|
楼主 |
发表于 2025-9-16 23:41:30
|
显示全部楼层
来自 河北保定
#include "../../drivers.h"
#include "../../genfsk_ll/genfsk_ll.h"
#define RX_BUF_LEN 64
#define RX_BUF_NUM 4
volatile static unsigned char rx_buf[RX_BUF_LEN*RX_BUF_NUM] __attribute__ ((aligned (4))) = {};
volatile static unsigned char rx_ptr = 0;
volatile static unsigned char rx_flag = 0;
static unsigned char *rx_packet = 0;
static unsigned char rx_payload_len = 0;
volatile static unsigned char *rx_payload = 0;
volatile static unsigned char rssi = 0;
volatile static unsigned int rx_timestamp = 0;
volatile static unsigned int rx_test_cnt = 0;
_attribute_ram_code_ __attribute__((optimize("-Os")))void irq_handler (void)
{
unsigned int irq_src = irq_get_src();
unsigned short rf_irq_src = rf_irq_src_get();
if (irq_src & FLD_IRQ_ZB_RT_EN) {//if rf irq occurs
if (rf_irq_src & FLD_RF_IRQ_RX) {//if rf rx irq occurs
rx_test_cnt++;
rx_packet = rx_buf + rx_ptr*RX_BUF_LEN;
//set to next rx_buf
rx_ptr = (rx_ptr + 1) % RX_BUF_NUM;
gen_fsk_rx_buffer_set((unsigned char *)(rx_buf + rx_ptr*RX_BUF_LEN), RX_BUF_LEN);
// rx_flag=1;
// if (gen_fsk_is_rx_crc_ok(rx_packet)) {
if(RX_BUF_LEN>17){
rx_flag = 1;
}
}
rf_irq_clr_src(FLD_RF_IRQ_ALL);
}
irq_clr_src2(FLD_IRQ_ALL);
}
int main(void)
{
unsigned char sync_word[5] = {0x34, 0x43, 0x10, 0x10, 0X01};
cpu_wakeup_init();
clock_init(SYS_CLK_24M_Crystal);
//generic FSK Link Layer configuratioin
gen_fsk_datarate_set(GEN_FSK_DATARATE_250KBPS); //Note that this API must be invoked first before all other APIs
gen_fsk_preamble_len_set(1);//设置前导码长度为5字节
gen_fsk_sync_word_len_set(SYNC_WORD_LEN_5BYTE);//设置同步字长度为5字节
gen_fsk_sync_word_set(GEN_FSK_PIPE0, sync_word); //set pipe0's sync word为管道0设置具体的同步字内容
gen_fsk_pipe_open(GEN_FSK_PIPE0); //enable pipe0's reception启用管道0的接收功能
gen_fsk_tx_pipe_set(GEN_FSK_PIPE0); //set pipe0 as the TX pipe设置管道0作为发送管道
gen_fsk_packet_format_set(GEN_FSK_PACKET_FORMAT_VARIABLE_PAYLOAD,0);//设置数据包格式为固定负载长度,并指定负载长度为8字节
gen_fsk_radio_power_set(GEN_FSK_RADIO_POWER_10DBM);
gen_fsk_rx_buffer_set(rx_buf + rx_ptr*RX_BUF_LEN, RX_BUF_LEN); //接收缓冲区设置
gen_fsk_channel_set(7); //set rf freq as 2403.5MHz10. 信道设置
gen_fsk_radio_state_set(GEN_FSK_STATE_RX); //set transceiver to basic RX state//射频状态设置
gen_fsk_rx_settle_set(89);//12. 接收稳定时间设置
WaitUs(90); //wait for rx settle
//irq configuration
rf_irq_enable(FLD_RF_IRQ_RX); //enable rf tx irq
irq_enable_type(FLD_IRQ_ZB_RT_EN); //enable RF irq
irq_enable(); //enable general irq
printf("star\r\n");
WaitMs(10);
printf("star\r\n");
WaitMs(10);
rx_flag=1;
while (1) {
if (rx_flag) {
rx_flag = 0;
rx_payload = gen_fsk_rx_payload_get(rx_packet, &rx_payload_len);
rssi = (gen_fsk_rx_packet_rssi_get(rx_packet) + 110);
rx_timestamp = gen_fsk_rx_timestamp_get(rx_packet);
printf("Received %d bytes: ", rx_payload_len);
for(int i = 0; i < rx_payload_len; i++) {
printf("%02X ", rx_payload[i]);
}
printf("rx_timestamp=%d",rx_test_cnt);
printf("\n");
// log_msg(0, rx_payload, rx_payload_len);
// log_msg(0, &rssi, 1);
// log_msg(0, &rx_timestamp, 4);
// 模拟 log_msg(0, rx_payload, rx_payload_len)
// for(int i = 0; i < rx_payload_len; i++) {
// printf("%c", rx_payload[i]); // 直接输出原始字节
// }
// 模拟 log_msg(0, &rssi, 1)
// printf("%d", rssi);
// 模拟 log_msg(0, &rx_timestamp, 4)
// 注意字节序问题:通常是小端格式
}
}
}
能收到个数也对但是不管我发送什么都收到的是20 2A 这是什么原因呢
? |
|