halRfInit()中调用了halPaLnaInit()和halRfEnableRxInterrupt(),由于在实际使用过程中涉及到 PA部分为RFX2401的模块,因此对halPaLnaInit()先在这里做下简单说明(木有使用过2591的模块 - -!)。
static void halPaLnaInit(void)
{
#if INCLUDE_PA==2591 //对于使用2591的模块,可以通过宏定义INCLUDE_PA为2591来启用PA模块;
// Initialize CC2591 to RX high gain mode
static uint8 fFirst= TRUE;
if(fFirst) {
AGCCTRL1 = 0x15;
FSCAL1 = 0x0;
RFC_OBS_CTRL0 = 0x68;
RFC_OBS_CTRL1 = 0x6A;
OBSSEL1 = 0xFB;
OBSSEL4 = 0xFC;
P0DIR |= 0x80;
halRfSetGain(HAL_RF_GAIN_HIGH);
}
#else // do nothing
#endif
}
对于使用RFX2401的模块,其中RFX2401的 TX/RXN 和 CE针分别为P1.2和P2.0,并参照 2591的寄存器设置做了如下更改:
static void halPaLnaInit(void)
{
#if INCLUDE_PA==2591
// Initialize CC2591 to RX high gain mode
static uint8 fFirst= TRUE;
if(fFirst) {
AGCCTRL1 = 0x15;
FSCAL1 = 0x0;
RFC_OBS_CTRL0 = 0x68;
RFC_OBS_CTRL1 = 0x6A;
OBSSEL1 = 0xFB;
OBSSEL4 = 0xFC;
P0DIR |= 0x80;
halRfSetGain(HAL_RF_GAIN_HIGH);
}
#else // do nothing
AGCCTRL1 = 0x15;
FSCAL1 = 0x00;
RFC_OBS_CTRL0 = 0x68;
//RFC_OBS_CTRL1 = 0x6A;
OBSSEL2 = 0xFB; //信号对应针做下修改,具体介绍参看数据手册;
//OBSSEL4 = 0xFC;
P2DIR |= 0x01; //由于该代码是处于接收模式,因此根据2401的真值表,将其设置为高电平(有时间关于2401做下总结:))
P2 |=0x01;
halRfSetGain(HAL_RF_GAIN_HIGH);
#endif
}
/***********************************************************************************
* @fn halRfInit
*
* @brief Power up, sets default tuning settings, enables autoack, enables random
* generator.
*
* @param none
*
* @return SUCCESS always (for interface compatibility)
*/
uint8 halRfInit(void)
{
// Enable auto ack and auto crc
//始能ACK和CRC校验,其中是否自动发送一个ACK取决于FCF相应位是否置一;
FRMCTRL0 |= (AUTO_ACK | AUTO_CRC);
// Recommended RX settings
// 手册中的推荐简单设置
TXFILTCFG = 0x09;
AGCCTRL1 = 0x15;
FSCAL1 = 0x00;
// Enable random generator -> Not implemented yet
// Enable CC2591 with High Gain Mode
halPaLnaInit();
// Enable RX interrupt
// 为什么在这块做个RF接收中断的始能???
halRfEnableRxInterrupt();
return SUCCESS; //成功状态是一直返回的- -!
}
总结:貌似没什么总结的,都推到后面了- -!;
另外,halRfInit()在整个项目中存在的意义是什么?
一些成文字性的东西 各种不明白的地方,看来写这东东 意义相当的大:)