From 59a4e01d92da432e9736b24c085089cd31963833 Mon Sep 17 00:00:00 2001 From: zhangbo <zhangbo@qq.com> Date: 星期三, 21 五月 2025 15:19:22 +0800 Subject: [PATCH] 修改了串口读取的bug,现在是通过飞线控制的 PCA蓝牙IRQ拉低,修改灯的闪灯逻辑, --- keil/uwb_app.c | 47 ++++++++++++++++++++++++++++++++--------------- 1 files changed, 32 insertions(+), 15 deletions(-) diff --git a/keil/uwb_app.c b/keil/uwb_app.c index 0e87f06..13b32ec 100644 --- a/keil/uwb_app.c +++ b/keil/uwb_app.c @@ -12,7 +12,7 @@ #include "PCA9555.h" #define TAG_KEEPTIMES 20 -#define REPORT_TAG_KEEPTIMES 1 +#define REPORT_TAG_KEEPTIMES 20 #define GROUP_NUM 3 uint16_t group_min_dist[GROUP_NUM+1]; @@ -326,6 +326,7 @@ uint16_t ERR_RX_NUM; uint8_t send_qiangzhan_NUM; uint8_t resp_tx_flag; +uint32_t temp_c[10]; static void rx_int_callback(struct MAC_HW_REPORT_T *rx_report) { uint8_t valid_sts=0; // Power off radio @@ -341,18 +342,19 @@ memcpy(rx_buf, rx_report->pkt_data, rx_length); memcpy(&rx_rpt, rx_report, sizeof(struct MAC_HW_REPORT_T)); /* Calculate rx timestamp */ - temp_count= phy_timer_count_get(); + poll_rx_en_start_u32 = rx_rpt.timestamp - phy_shr_duration(); poll_rx_ts_i64 = ranging_rx_time_correct(&rx_rpt); poll_rx_num++; REV_RX_NUM++; rssi = rx_report->rssi; receive_flag=1; + temp_count= phy_timer_count_get(); Anchor_App(); - if(resp_tx_flag==0) - { - OpenUWB(); - } + if(resp_tx_flag==0) + { + OpenUWB(); + } #ifdef STS_MODE valid_sts= sts_valid_check(); if (valid_sts) @@ -386,8 +388,14 @@ OpenUWB();//再次开启UWB接收 } -// OpenUWB();//再次开启UWB接收 - +// OpenUWB();//再次开启UWB接收 +#ifdef USE_TX_UWBON + if(UWB_STATE==UWB_STATE_IDLE) + { + UWB_STATE=UWB_RX_STATE_BUSY; + OpenUWB();//再次开启UWB接收 + } +#endif } uint16_t TX_CALL_POLL_NUM; /* TX done process handler. */ @@ -395,6 +403,11 @@ { // Power off radio power_off_radio(); +#ifdef USE_TX_UWBON + UWB_STATE=UWB_STATE_IDLE; + UWB_STATE=UWB_RX_STATE_BUSY; + OpenUWB();//再次开启UWB接收 +#endif /** UWB TX success */ if (tx_report->err_code == UWB_TX_OK) { @@ -402,10 +415,8 @@ temp_count= phy_timer_count_get(); temp_internal=temp_count; - + OpenUWB(); TX_CALL_POLL_NUM++; - - OpenUWB(); // if(send_qiangzhan_NUM) // { // send_qiangzhan_NUM=0; @@ -527,7 +538,7 @@ uint16_t response_num; uint8_t Anchor_RecNearPoll(uint8_t ancrec_nearbasepos)//根据自己是否为新基站定制消息去发送,根据是否抢占判断 { - temp_count2=poll_rx_en_start_u32; +// temp_count2=phy_timer_count_get(); memcpy(&send_buffer[GROUP_ID_IDX],&group_id,1);//组id memcpy(&send_buffer[ANCHOR_ID_IDX],&dev_id,2);//自身id memcpy(&send_buffer[TAG_ID_IDX],&tag_id_recv,2);//接受者id @@ -546,7 +557,7 @@ // //这里应该有问题问一下钟工 // }//此处设置绝对时间将poll u32改为phy_timer_count_get() position=ancrec_nearbasepos; - temp_count1=phy_timer_count_get(); + resp_tx_en_start_u32 = poll_rx_en_start_u32+US_TO_PHY_TIMER_COUNT(POLL_RX_TO_RESP_TX_DLY_US)+ancrec_nearbasepos*US_TO_PHY_TIMER_COUNT(DELAY_BETWEEN_TWO_FRAME_UUS);//加入帧间隔 // resp_tx_en_start_u32 = temp_count1+US_TO_PHY_TIMER_COUNT(POLL_RX_TO_RESP_TX_DLY_US)+ancrec_nearbasepos*US_TO_PHY_TIMER_COUNT(DELAY_BETWEEN_TWO_FRAME_UUS);//加入帧间隔 resp_tx_ts_i64 = ranging_tx_time_correct(resp_tx_en_start_u32 + phy_shr_duration());//修正时间戳 @@ -555,7 +566,7 @@ resp_msg_set_ts(&send_buffer[RESP_MSG_RESP_TX_TS_IDX], resp_tx_ts_i64);//此处时间戳int64直接转换为uint64不知道会不会有错误 memcpy(&send_buffer[RESP_MSG_ANC_DISTOFFSET],&disoffset,2);//差个修正offset,修正有符号但是这个com表为无符号的,传过去直接赋给Int16_t相当于还原了 temp_resp_i64=resp_tx_ts_i64; - temp_count3= phy_timer_count_get(); + UWB_STATE==UWB_TX_STATE_BUSY; flag_temp2=uwb_tx(send_buffer, 40,1 ,resp_tx_en_start_u32);//立即发送测试size大小 resp_tx_flag=1; @@ -700,10 +711,12 @@ //uint16_t REV_POLL_NUM; //uint16_t REPLY_POLL_NUM; +extern uint8_t uwbled,gpsled,loraled,powerled; int Anchor_App(void) { uint8_t i; uint16_t tempid; + temp_count1=phy_timer_count_get(); if(group_id==rx_buf[GROUP_ID_IDX]&&rx_buf[MESSAGE_TYPE_IDX] == MBX_POLL)//判断是否是和自己是同一组通讯的且为poll包 { flag_recsuccess = 1; // wltag_state=RANGE;//成功后从search切换为range @@ -716,11 +729,14 @@ battary = rx_buf[BATTARY_IDX]; rec_nearbase_num=rx_buf[FZ_NEARBASENUM_INDEX]; //标签传过来的他与基站交互的基站id数目 memcpy(&tag_id_recv,&rx_buf[TAG_ID_IDX],2); + temp_count2=phy_timer_count_get(); memcpy(rec_ancidlist,&rx_buf[FZ_NEARBASEID_INDEX],2*rec_nearbase_num); memcpy(rec_ancdistlist,&rx_buf[FZ_NEARBASEID_INDEX+2*rec_nearbase_num],2*rec_nearbase_num); memcpy(&rec_antdelay,&rx_buf[FZ_NEARBASEID_INDEX+rec_nearbase_num*4],2); taglist_pos=CmpTagInList(tag_id_recv); - UWB_LED_ON; + // UWB_LED_ON; + uwbled=1; + temp_count3=phy_timer_count_get(); if(taglist_num>=ANC_MAX_NUM) return 0; for(i=0; i<rec_nearbase_num; i++) @@ -739,6 +755,7 @@ break; } } + if((i==rec_nearbase_num&&taglist_pos==taglist_num)||(rec_nearbase_num==0&&!ExistInTagList(tag_id_recv)))//当基站不在标签列表中,标签也不在基站列表中时,随机找个时间片回复基站。 { Anchor_RecNearPoll(rec_nearbase_num); -- Gitblit v1.9.3