测试过程1:将cc1110的P0.4口设为输入中断,将P0的5,6,7任何一个端口设为输出,当将该输出io口拉高时,会一直进入P0的中断服务子程序,按我的理解,虽然4.5.6.7是同一个寄存器使能的中断,但设为输出的io口是不能够使得中断触发的,此为离奇之处;
测试过程2:作为比对,又将P0.0口设为输入中断,但当拉高P0的1.2.3输出口都不会触发中断
测试部分代码:
P0SEL&=~(0x10);
P0DIR&=~(0x10);
P2INP &=~(0x01<<5);
P0INP &=~(0x10);
/*Port 0 inputs 7 to 4 interrupt enable*/
PICTL |= 0x10;
/*Select falling edge on input gives interrupt*/
PICTL |= 0x00;
EA = 1; /*Enable each interrupt source*/
IEN1 |= (0x01<<5); /*Enable port 0 interrupt*/
P0IFG &= ~(0x10); /*Clear P0.4 interrupt status flag*/
#pragma vector = P0INT_VECTOR
__interrupt void p0_interrupt(void)
{
EA = 0;
if(P_0_4_Flag) /*P0.4 interrupt flag*/
{
P0IFG &= ~(0x10); /*Clear P0.4 interrupt flag*/
KeyFlag = ON; }
P0IF = 0; /*Clear port 0 interrupt flag */
EA = 1;
}
那么问题来了:是我的代码有问题还是cc1110本身就不支持这种用法,求告知
gaoyang9992006:
是你程序的问题
注意寄存器配置,给你个IO中断按键的例子
gaoyang9992006:
看看你的PICTL那两句是不是对的。
跟我发的例子对比一下,还有后门的中断处理。