ARM中断问题,谁用过FreeScale的i.MX31,ADS1.2中,中断搞不定啊!
[复制链接]
我用FreeScale的i.MX31(ARM11)做嵌入式系统,在WinCE下能使用中断,但是winCE初始化中断的代码是看不到的!
我在ADS1.2中做BootLoader,中断调不出来!发生中断时,没有自动跳转到中断向量那里去。
1、CP15中VE(Bit24)置0, V( Bit13)置0,即中断向量放在0地址。并且中断向量在对应地址都安排好了。
(所有中断向量都放了1条指令:跳转到本身地址,即死循环,这样当发生中断时,查看pc值就知道了)
2、SPSR的F(Bit6)和I(Bit7)都置0,即允许IRQ和FIQ
3、每个运行模式的栈都设置了。最后模式设为系统模式(管理模式也试过)
我用Timer2测试(中断号为27),CPU的AVIC(ARM Vector Interrupt controller)如下设置
(1)INTCNTL设为0,允许Normal Interrupt和Fast Interrupt
(2)NIMASK默认0x1F,即不屏蔽任何中断
(3)ENNUM写27(INTENABLEL自动会设置为0x08000000,表示允许27号中断)
(4)INTTYPEH和INTTYPEL都为0,表示所有中断都当作普通中断
(5)NIPRIORITY3设置为0x0000F000,27号中断优先级为15,最高优先级
(6)Timer2模块中,计数器、比较计数器、中断允许都设置好了。我设置为3秒钟之后产生中断
等待3秒后,Timer2模块中中断标识发生了,AVIC中Pending(未决中断)寄存器对应位置位了,但就是没跳转到0x18处。
我设置了断点在0x18处,也没见跳转到那里????
我将所有中断改为FIQ,也没有跳转。
如果我故意去访问无效的地址,那么引起Data Abort时能自动跳到0x10处死循环!用SWI指令也能跳转到0x08处。
就是我用正常中断不能正常跳转过去!!!! 我改用KeyPad按键中断,当按键时,AVIC中Pending也有对应位置位了,但仍旧不能跳转到中断向量那里去?
我之前在ADS1.2中调试出来过ARM10的PXA270的中断,因此编译器应该不是问题。
是我哪里设置的不对? 还是另有地方我没有做到?
各位大侠,有谁做过i.MX31的中断,请给指导一下。