中断标志位实验心得
在做CC2530开发板一些实验时候,经常会遇到一些最基本的问题,比如清中断标志位时候,是先清源中断寄存器还是先是清CPU中断标志寄存器。
初始化中断标志:
P0IFG = 0X00;
在下面电路中需要将引脚定义为终端触发引脚即 P0_1后面连接开关+GND;
单向导电二极管负极为低电平时该发光二极管点亮,否则处于熄灭状态,因此,在初始化开关函数时候,有如下定义:
P0IEN |= 0x2; // P0.1 设置为中断方式 1:中断使能
PICTL |= 0x1; //下降沿触发
IEN1 |= 0x20; //允许P0口中断;
P0IFG = 0x00; //初始化中断标志位
EA = 1; //打开总中断
当 P0_1为低电平时候即P0_1=0,触发中断,
#pragma vector = P0INT_VECTOR
通过中断函数入口地址进入中断函数以此实现相应功能。
由于按键存在一定的振动,因此,需要进行消抖,该部分功能具体实现如下
... if(P0IFG>0)
{
DelayMS(10);
if(P0IFG>0)
{
......
}
}
上述的P0IFG是端口0中断状态标志,端口0中bit7~bit0为输入中断状态标志。当输入端口中断请求未决时,则其相应标志位置1即可。
清中断标志命令
P0IFG = 0;
P0IF = 0;
问题:清中断标志是先清源中断寄存器还是CPU中断标志寄存器?
答:这要看中断触发方式是脉冲或者边沿触发还是电平触发方式。如果为前者,则先清CPU中断标志寄存器;否则若是电平触发方式,则先清源中断标志寄存器。