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