使用P0.14脚EINT1功能,从该脚飞出一导线,通过触地产生低脉冲,配置为降沿触发。代码如下: void __irq IRQ_Eint1(void) { …… EXTINT = 0x02; VICVectAddr = 0; } int main(void) { . . . PINSEL0 |= 0x20000000; // 使能EINT1中断 EXTMODE = 0x02; // 设置EINT1中断为边沿触发模式 EXTPOLAR = 0x00; // 设置EINT1中断为降沿触发 //打开EINT1中断(设置向量控制器,即使用向量IRQ) VICIntSelect = 0x00000000; // 设置所有中断分配为IRQ中断 VICVectCntl0 = 0x2F; // 分配EINT1中断到向量中断0 VICVectAddr0 = (uint32)IRQ_Eint1; // 设置中断服务程序地址 EXTINT = 0x02; // 清除EINT1中断标志 VICIntEnable = 0x00008000; // 使能EINT1中断
while(1); }
在startup.s中已使能了IRQ中断。当运行到while(1)时若飞线碰一下地,程序并未停在IRQ_Eint1()中的断点,停止AXD的运行会看到EXTINT变为0x02,说明EINT1位由于产生了降沿被置位,但程序却跑到了Undefined B Undefined处而没有进入IRQ_Eint1()。 从AXD reload程序重新运行调试,此时EXTINT外部中断1职位标志尚未被清0,当startup.s运行到初始化堆栈时(BL InitStack),系统又会根据所设中断处理程序地址跳转过去执行ISR,然后再从main()开始执行,但问题依然。
请教大家这有可能是什么问题啊,感觉main()里对中断的配置应该不会有错,是不是运行环境的初始化有什么工作没做到啊?? 大家觉得有什么可能都请提出来,我都会试试的,自己尝试着改了一些地方但还是不行,求教了!!!!! |