在程序中先初始化外部中断口EINT2和EINT3,代码如下:<br />void ext_init(void)<br />{<br /> <br /> set_gpio_p07eint2;//用到P0.7做为外部中断2的输入,<br /> <br /> set_gpio_p030eint3;//设置P0.30做为外部中断3的输入<br /> VICIntSelect = 0x00000000;<br /> EXTMODE = 0X0C; //EDGE ACTIVE,外部中断2和3采用边触发方式<br /> <br /> EXTPOLAR =0X0C;//上升沿触发(★)<br /> VICVectCntl2 = 0x20 | 16; // 分配外部中断2到向量中断2<br /> VICVectAddr2 = (INT32U)IRQ_Eint2; // 设置中断服务程序地址<br /> VICVectCntl3 = 0x20 | 17; // 分配外部中断3到向量中断3<br /> VICVectAddr3 = (INT32U)IRQ_Eint3; // 设置中断服务程序地址<br /><br /> VICIntEnable = (1<<16)|(1<<17); // 使能EINT2,3中断<br /> EXTINT = 0X0C; //FLAG CLEAR,清零EINT2,EINT3<br /><br />}<br /><br />使用UICE的仿真器单步仿真,走到(EXTPOLAR=0X0C;//上升沿触发)就出现跑飞.各位大侠谈下是否这类有BUG.<br /><br />相应的针对外部中断初始化程序中加入:<br />uint8 temp1,temp2;<br />temp1=VPBDIV;<br />temp2=VPBDIV;<br />VPBDIV=0;<br />EXTMODE=0x0c;//使能EINT2,EINT3中断为边沿激活<br />VPBDIV=temp2;<br /><br />就能通过仿真<br /><br /><br /> <br /> |
|