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