CC2530的I/O外部中断
时间:10-02
整理:3721RD
点击:
CC2530的I/O外部中断
CC2530有18个中断源,这些中断源在手册中如图,
我们一般说的I/O外部中断,一般是指序号 6、13、15外部输入中断,Port x inputs。
通用I/O 引脚设置为输入后,可以用于产生中断。中断可以设置在外部信号的上升或下降沿触发。P0、P1或P2 端口都有中断使能位,对位于IENl-2 寄存器内的端口所有的位都是公共的,如下:
IENI.P0 IE:P0 中断使能
IEN2.PI IE:P1 中断使能
IEN2.P2IE:P2 中断使能
除了这些公共中断使能之外,每个端口的位都有位于SFR 寄存器P0IEN、P1IEN 和P2IEN 的单独的中断使能。即使配置为外设I/O 或通用输出的I/O 引脚使能时都有中断产生。
当中断条件发生在I/O 引脚之一上面,P0-P2 中断标志寄存器P0IFG、P1IFG 或P2IFG 中相应的中断状态标志将设置为1。不管引脚是否设置了它的中断使能位,中断状态标志都被设置。当中断已经执行,中断状态标志被清除,该标志写入0。这个标志必须在清除CPU 端口中断标志(PxIF)之前被清除。
用于中断的SFR 寄存器描述在下一节。寄存器总结如下:
实例:
void InitINT(void)
{
P1SEL &= ~0x01;
P1DIR &= ~0X01;
P1IEN |= 0X01; //P10éè???a?D??·?ê?
PICTL |= 0X02; //???μ??′¥·¢
EA = 1;
IEN2 |= 0x10;
P1IFG = 0;
}
#pragma vector = P1INT_VECTOR //?D??·t??×ó3ìDò
__interrupt void P1_ISR(void)
{
if(P1IFG>0)
{
if(P1IFG & 0x01)
{
Uart0Send(0xDD);
}
P1IFG = 0;
}
P1IF = 0;
}