DM365裸跑中断
DM365上裸跑,现在无法进入中断服务程序,能否给出实现中断的步骤和例程?
1, CPSR 全能中断, 在特权模式下能设置它吗?如何用C语言设置
2, 特权模式下是否影响中断的产生?3, IRQ的服务程序地址可以放什么地方?必须是内部RAM的某一处吗?
4, 跳转,还是地址? 中断向量表存放的是地址还是某条跳转指令?是不是不同的工作模式,会有所不同。如果是地址,那为什么 中断向量表 需要设置 每条记录大小,4bytes,8bytes,16byutes…
Bill Lee:
问题已经解决了。
但 为什么中断 不是按照 DM365 的文档说明的进行硬跳转, 跳转的EABASE + IRQ_NUM * SIZE,而是 跳转到 0x18 ,
是不是跟我选择的工作模式有关。
Bill Lee:
中断测试代码如下:为什么我的中断不能过滤,不管什么中断都产生了。还有,开中断后,DiableIRQ为什么不能关中断?0x01C48000到底设置中断是否起作用? DiableIRQ(); Int_Reg = (INTC_REGS*)0x01C48000; // Mask all interrupts Int_Reg->INTCTL = 0x4; Int_Reg->EABASE = 0x0; Int_Reg->EINT0 = 0x0; Int_Reg->EINT1 = 0x0; // Clear all interrupts Int_Reg->FIQ0 = 0xFFFFFFFF; Int_Reg->FIQ1 = 0xFFFFFFFF; Int_Reg->IRQ0 = 0xFFFFFFFF; Int_Reg->IRQ1 = 0xFFFFFFFF; Int_Reg->INTCTL = 0x0002; Int_Reg->EABASE = 0x0000; Int_Reg->EINT0 |= 0x001 << 12; EnableIRQ();其中void EnableIRQ(void) { int r0; __asm { MRS r0, cpsr EOR r0, r0, #0xC0 MSR cpsr_c, r0 NOP NOP } }void DiableIRQ(void) { int r0; __asm { MRS r0, cpsr ORR r0, r0, #0xC0 MSR cpsr_c, r0 NOP NOP } }
TI中文支持网