RSSI应用参考¶
1 功能介绍¶
PAN3029读取RSSI功能是指在芯片接收到数据时,读取当前数据包的信号强度值的功能。在收到RX_IRQ信号之后,直接读取寄存器获取RSSI值。
2 软件设计参考¶
2.2 软件设计验证¶
参照SDK Rx Demo。
2.2.1 SDK示例¶
参考代码:
ret = rf_init(); //初始化
if(ret != OK)
{
printf(" RF Init Fail");
while(1);
}
rf_set_default_para(); //配置参数
rf_enter_continous_rx(); //进入连续接收模式
while (1)
{
rf_irq_process(); //3029中断处理
key_scan();
key_event_process();
process_rf_events(); //事件处理
}
示例代码配置了连续接收模式,并在接收到数据后,将接收到的数据内容及SNR、RSSI值打印出来。
void rf_irq_process(void)
{
if(pan3029_irq_trigged_flag == true)
{
pan3029_irq_trigged_flag = false;
uint8_t irq = rf_get_irq();
printf("irq:%x\r\n",irq);
if(irq & REG_IRQ_RX_PLHD_DONE)
{
RxDoneParams.PlhdSize = rf_get_plhd_len();
rf_set_recv_flag(RADIO_FLAG_PLHDRXDONE);
RxDoneParams.PlhdSize = rf_plhd_receive(RxDoneParams.PlhdPayload, RxDoneParams.PlhdSize);
}
if(irq & REG_IRQ_RX_DONE)
{
RxDoneParams.Snr = rf_get_snr();
RxDoneParams.Rssi = rf_get_rssi();
rf_set_recv_flag(RADIO_FLAG_RXDONE);
RxDoneParams.Size = rf_receive(RxDoneParams.Payload);
}
if(irq & REG_IRQ_CRC_ERR)
{
rf_set_recv_flag(RADIO_FLAG_RXERR);
rf_clr_irq();
}
if(irq & REG_IRQ_RX_TIMEOUT)
{
rf_set_refresh();
rf_set_recv_flag(RADIO_FLAG_RXTIMEOUT);
rf_clr_irq();
}
if(irq & REG_IRQ_TX_DONE)
{
rf_set_transmit_flag(RADIO_FLAG_TXDONE);
rf_clr_irq();
}
}
}
3029中断处理函数中,当芯片接收到数据,产生REG_IRQ_RX_DONE(RX_IRQ)中断时,通过PAN3029_get_rssi接口函数读取当前数据包的信号强度值。