使用F2132与CC1101,前者用到了P2.0作GDO0、P2.1作GDO2,要求收到同步字时P2.1置高
//====================== GDO2的外部中断设置 ====================
void GDO2_ISR(void)
{
TI_CC_GDO2_PxSEL &=~TI_CC_GDO2_PIN; // 普通IO
TI_CC_GDO2_PxDIR &=~TI_CC_GDO2_PIN; // input
TI_CC_GDO2_PxREN |= TI_CC_GDO2_PIN; //
TI_CC_GDO2_PxOUT &=~TI_CC_GDO2_PIN; // Set P2.1 as pull-Down resistance TI_CC_GDO2_PxIES &=~TI_CC_GDO2_PIN; // P2.1 Lo->Hi edge
TI_CC_GDO2_PxIFG &=~TI_CC_GDO2_PIN; // P2.1 IFG cleared
TI_CC_GDO2_PxIE |= TI_CC_GDO2_PIN; // P2.1 interrupt enabled,GDO2
}
上面代码的第5行(P2IES &=~BIT1;)则接收端会出现连接2次RF数据接收,且检查发现是发送端已经发送了3次(收到的是第1次和第3次);
而如果修改为(P2IES &= BIT1;)则接收端会正确地只收到1次RF数据。
后面的写法,有什么其它的问题呢?
Charles Wu:
430对IO的操作很少会用第二种写法,一般用以下两种
给BITx置位: PxIES |= BITx
给BITx复位:PxIES &= ~BITx。
第二种写法的结果是P2IES 清除其他BIT(BIT0,BIT2~BIT7)的各位数据,为0。保留BIT1之前的数据,应该和你的设计本意不同吧。
而用第一种写法只接受到2次RF数据的原因,估计是RF发送的速度过快,你的GDO2的中断处理函数处理速度不够,所有漏掉了第二次的数据。