之前用惯了C51,用interrupt很方便,初初使用arm,不知道该怎么写了,
看了别人汇编写的bootloader,发现它在SDRAM里做了一个中断地址表,然后获取中断处理程序的地址值写到这个地址表里,通过跳转来完成。
如: ldr r0, =HandleIRQ ;Setup IRQ handler ldr r1, =IsrService str r1, [r0]
MAP _ISR_STARTADDRESS HandleUndef # 4 HandleSWI # 4 HandlePabort # 4 HandleDabort # 4 HandleIRQ # 4 HandleFIQ # 4
HandleADC # 4 HandleRTC # 4 HandleUTXD1 # 4 ......
如果我是用C写的中断处理程序,也是要通过这种方式把它的地址值放到上面的表里吗?但是C写的处理函数怎么能得到它的地址所在呢?而且每个用到的中断都要如此设置一次?? |