cc2430的中断设置有很多。来看外部中断应该如何设置。
板子的按键S1连接在P0.1口,使能这个中断要有3步操作:
1,开总中断。IEN0_EAL位置一。
2,开P0口中断。IEN1_P0IE位置一。
3,开P0口的P0.1的中断。PICTL_P0IENL位置一(该位置一实际上开了P0_0到P0_3的中断)
中断标志位对应的有两个:
P0口中断对应的标志位为IRCON_P0IF。
P0_1位对应的标志位为P0IFG_P0IF1。所以在清中断标志的时候,要清两遍的!
程序部分代码如下:
开中断的程序:
//开三次中断开关 中断范围依次从小到大
PICTL |= 0x08; // Enable interrupt from P0_1 to P0_3第一次开 P0_1到P0_3中断
PICTL |= 0x01; // Falling edge gives interrupt 下降沿触发
INT_ENABLE(INUM_P0INT, INT_ON); // Enabling interrupt from P0 第二次开 P0口中断
INT_GLOBAL_ENABLE(TRUE); //第三次开 总中断
中断服务程序里的清中断标志位:
#pragma vector=P0INT_VECTOR
__interrupt void P0_IRQ(void){
// check if PUSH_BUTTON is pressed
//要清两次中断
if(P0IFG & BUTTON_PUSH_IF_MASK){
GLED ^= 1;
P0IFG &= ~BUTTON_PUSH_IF_MASK; // clear pin Int Flag 第一次清P0_1的中断标志
}
P0IF = FALSE; // clear Port 0 Interrupt Flag 第二次清P0口的标志
}