| 6410BSP中的EBOOT支持USB中断,类似的我们也可以接管其他的中断。 不过一开始对接管中断的方式搞不太懂,void InitializeInterrupt(void)中: #define DRAM_BASE_PA_START (0x50000000) #define pISR (*(volatile unsigned *)(DRAM_BASE_PA_START+0x18)) pISR = (unsigned)(0xEA000000)+(((unsigned)ASM_IsrHandler -(DRAM_BASE_CA_START + 0x18 + 0x8))>>2); pISR对应从DRAM起始地址开始的0x18(24)字节处,每指令4字节,所以这个地址为第7个中断向量,即IRQ. 0xEA000000为ARM跳转指令。 ARM是3级流水线,即pc-2是执行指针,pc-1是译码指针,pc为取指指针。所以(DRAM_BASE_CA_START + 0x18 + 0x8)是执行IRQ跳转时的PC值(0x8 = 2*4),用自己的ISR地址减去此PC然后除以4,就得到了跳转地址。 |
eboot中的中断处理
最新推荐文章于 2017-02-18 14:56:15 发布
1113

被折叠的 条评论
为什么被折叠?



