第一:你的程序一眼看过去为什么没有while(1)?让看门狗自动复位?
嵌入式程序设计的一个终极原则就是要设计成死循环,而且你的程序逻辑上也不对啊!中断处理完了程序总该有个返回的地方,你自己分析下是不是不知道去哪里了。
第二:你的很多程序语句后面的注释也明显有问题,比如rSRCPND|=1<<5;这就,貌似应该注释成清楚EINT8_23中断源挂起标志位吧?这就和你的主函数的第一句rSRCPND=rSRCPND是一个意思,只不过第一句清楚的是所有中断源挂起标志位罢。再比如rINTMSK|=1<<5;貌似这就应该注释成不屏蔽外部中断源EINT8_23(即允许EINT8_23发生中断并且允许CPU去处理中断)吧?等等,好几条语句都注释得答非所问似的。
说点题外话。按键按下有前沿抖动和后延抖动,这里外部中断配置成下降沿触发,很容易造成多次进入外部中断的效果。当然你的中断服务程序只是让灯亮这么一种功能看不出来,如果你原本想设计成第一次进中断led亮,第二次进中断led灭,第三次又亮....你就会发现,根本不是你想的那样,真实的情况会是按一次按键,LED会闪动好几次。这里就是因为按键抖动的原因(这点我经验丰富)。
本人的经验,一般使用按键都用定时器中断消抖处理。
第一:你的程序一眼看过去为什么没有while(1)?让看门狗自动复位?
嵌入式程序设计的一个终极原则就是要设计成死循环,而且你的程序逻辑上也不对啊!中断处理完了程序总该有个返回的地方,你自己分析下是不是不知道去哪里了。
第二:你的很多程序语句后面的注释也明显有问题,比如rSRCPND|=1<<5;这就,貌似应该注释成清楚EINT8_23中断源挂起标志位吧?这就和你的主函数的第一句rSRCPND=rSRCPND是一个意思,只不过第一句清楚的是所有中断源挂起标志位罢。再比如rINTMSK|=1<<5;貌似这就应该注释成不屏蔽外部中断源EINT8_23(即允许EINT8_23发生中断并且允许CPU去处理中断)吧?等等,好几条语句都注释得答非所问似的。
说点题外话。按键按下有前沿抖动和后延抖动,这里外部中断配置成下降沿触发,很容易造成多次进入外部中断的效果。当然你的中断服务程序只是让灯亮这么一种功能看不出来,如果你原本想设计成第一次进中断led亮,第二次进中断led灭,第三次又亮....你就会发现,根本不是你想的那样,真实的情况会是按一次按键,LED会闪动好几次。这里就是因为按键抖动的原因(这点我经验丰富)。
本人的经验,一般使用按键都用定时器中断消抖处理。
举报