我用周工的ARM Executable Image for lpc2100模板,在ADS1.2中建了一个项目,然后添加如下文件main.c,模板其他文件未做任何改动. <br />该程序简单至极,仅仅测试EINT0中断响应并设置一个标志而已.我用示波器看到EINT0输入变低,在easy JTAG调试时也确实看到IRQstatus EINT0标志位起来了,可是程序就是进不了中断,奇怪死了.我后来用GPIO方式查询EINT0是完全没问题的.<br />下面是完整的main.c文件,请问哪里还需要设置一下呢?<br /><br />#include "config.h"<br /><br />unsigned int iIntHappened;<br /><br /><br />//EINT0 service<br />void __irq IRQ_EINT0(void)<br />{<br /> iIntHappened = 1;<br /> <br /> VICIntEnClr = 0x00004000; //关中断,待主程序循环中处理后再开启<br /> <br />}<br /><br />//main program<br />int main (void)<br />{// add user source code <br /> unsigned int temp;<br /> <br /> //interrupt config<br /> temp = PINSEL1;<br /> temp &= 0x3bfffffc;<br /> temp |= 0x00000001;<br /> PINSEL1 = temp; //P0.16 作为中断输入<br /> <br /> EXTMODE = 0x00000000; //EINT0 低电平有效<br /> EXTPOLAR = 0x00000000;<br /> <br /> EXTINT = 0x0000000f; //清除此前可能的中断标志<br /> <br /> <br /> VICIntSelect = 0x00000000; //all interrupt source as IRQ<br /> VICVectCntl0 = 0x2e; //EINT0 as IRQ slot0<br /> VICVectAddr0 = (int)IRQ_EINT0; //EINT0 sservice address<br /> VICIntEnable = 0x00004000; //enable EINT0<br /> <br /> //----------------------------------------------------------------<br /> <br /> <br /> while(1)<br /> {<br /> if (iIntHappened)<br /> {<br /> iIntHappened = 0;<br /> <br /> VICIntEnable = 0x00004000; //再开启中断 <br /> }<br /> }<br /><br /> <br /> return 0;<br />} |
|