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接口函数读取当前数据包的信号强度值。