From c20b80fe9dfe72220649bf1d85550e9f3ebc9549 Mon Sep 17 00:00:00 2001 From: zhyinch <zhyinch@gmail.com> Date: 星期日, 05 九月 2021 20:27:46 +0800 Subject: [PATCH] 增加中断接收模式,未测试。 --- 源码/核心板/Src/application/dw_app.c | 49 +++++++++++++++++++++++++++++++++++-------------- 1 files changed, 35 insertions(+), 14 deletions(-) diff --git "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/dw_app.c" "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/dw_app.c" index dc17da9..6a49fef 100644 --- "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/dw_app.c" +++ "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/application/dw_app.c" @@ -130,7 +130,7 @@ dwt_configure(&config);//配置DW1000 - + dwt_setinterrupt(DWT_INT_TFRS | DWT_INT_RFCG | (DWT_INT_ARFE | DWT_INT_RFSL | DWT_INT_SFDT | DWT_INT_RPHE | DWT_INT_RFCE | DWT_INT_RFTO | DWT_INT_RXPTO), 1); /* Apply default antenna delay value. See NOTE 1 below. */ dwt_setrxantennadelay(RX_ANT_DLY); //设置接收天线延迟 dwt_settxantennadelay(TX_ANT_DLY); //设置发射天线延迟 @@ -1059,7 +1059,7 @@ poll_rx_ts_32 = (uint32_t)poll_rx_ts;//使用32位数据计算 resp_tx_ts_32 = (uint32_t)resp_tx_ts; final_rx_ts_32 = (uint32_t)final_rx_ts; - time_monitor[1] = sync_timer*1000+TIM3->CNT; +// time_monitor[1] = sync_timer*1000+TIM3->CNT; Ra = (double)(resp_rx_ts - poll_tx_ts);//Tround1 = T4 - T1 Rb = (double)(final_rx_ts_32 - resp_tx_ts_32);//Tround2 = T6 - T3 Da = (double)(final_tx_ts - resp_rx_ts);//Treply2 = T5 - T4 @@ -1072,7 +1072,7 @@ dwt_readdiagnostics(&d1); // time_monitor[2] = sync_timer*1000+TIM3->CNT; LOS(&d1); - time_monitor[3] = sync_timer*1000+TIM3->CNT; +// time_monitor[3] = sync_timer*1000+TIM3->CNT; /*--------------------------以下为非测距逻辑------------------------*/ //dist_cm=33000; GPIO_WriteBit(GPIOB, GPIO_Pin_10, Bit_RESET); @@ -1147,6 +1147,18 @@ u16 recnearbaselist_id[30]; int32_t recnearbaselist_dist[30]; int16_t rec_tagheight; +void Anchor_Start(void) +{ +dwt_write32bitreg(SYS_STATUS_ID, SYS_STATUS_ALL_RX_ERR| SYS_STATUS_TXFRS |SYS_STATUS_RXFCG); + g_start_sync_flag=0; + + dwt_setrxtimeout(1000);//设定接收超时时间,0位没有超时时间 + dwt_rxenable(0);//打开接收 +// while (!((status_reg = dwt_read32bitreg(SYS_STATUS_ID)) & (SYS_STATUS_RXFCG | SYS_STATUS_ALL_RX_ERR))&&!g_start_send_flag&&!g_start_sync_flag)//不断查询芯片状态直到接收成功或者出现错误 +// { +// //IdleTask(); +// }; +} void Anchor_App(void) { @@ -1154,21 +1166,22 @@ u16 tempid; uint32_t rec_syncid; - dwt_write32bitreg(SYS_STATUS_ID, SYS_STATUS_ALL_RX_ERR| SYS_STATUS_TXFRS |SYS_STATUS_RXFCG); - g_start_sync_flag=0; +// dwt_write32bitreg(SYS_STATUS_ID, SYS_STATUS_ALL_RX_ERR| SYS_STATUS_TXFRS |SYS_STATUS_RXFCG); +// g_start_sync_flag=0; - dwt_setrxtimeout(0);//设定接收超时时间,0位没有超时时间 - dwt_rxenable(0);//打开接收 -// GPIO_WriteBit(GPIOA, GPIO_Pin_10, Bit_SET); - while (!((status_reg = dwt_read32bitreg(SYS_STATUS_ID)) & (SYS_STATUS_RXFCG | SYS_STATUS_ALL_RX_ERR))&&!g_start_send_flag&&!g_start_sync_flag)//不断查询芯片状态直到接收成功或者出现错误 - { - IdleTask(); - }; +// dwt_setrxtimeout(0);//设定接收超时时间,0位没有超时时间 +// dwt_rxenable(0);//打开接收 +//// GPIO_WriteBit(GPIOA, GPIO_Pin_10, Bit_SET); +// while (!((status_reg = dwt_read32bitreg(SYS_STATUS_ID)) & (SYS_STATUS_RXFCG | SYS_STATUS_ALL_RX_ERR))&&!g_start_send_flag&&!g_start_sync_flag)//不断查询芯片状态直到接收成功或者出现错误 +// { +// IdleTask(); +// }; + status_reg = dwt_read32bitreg(SYS_STATUS_ID); //GPIO_WriteBit(GPIOA, GPIO_Pin_10, Bit_RESET); if (status_reg & SYS_STATUS_RXFCG)//成功接收 { u16 tag_recv_interval; float temp_tagpos; - time_monitor[0] = sync_timer*1000+TIM3->CNT; + //time_monitor[0] = sync_timer*1000+TIM3->CNT; g_Resttimer=0; dwt_write32bitreg(SYS_STATUS_ID, SYS_STATUS_RXFCG);//清除标志位 frame_len = dwt_read32bitreg(RX_FINFO_ID) & RX_FINFO_RXFL_MASK_1023;//获得接收数据长度 @@ -1196,6 +1209,10 @@ tagofflinetime[taglist_pos]=0; rec_nearbase_num=rx_buffer[NEARBASENUM_INDEX]; + if(rec_nearbase_num>=30) + { + break; + } battary = rx_buffer[BATTARY_IDX]; button = rx_buffer[BUTTON_IDX]; frame_seq_nb2 = rx_buffer[SEQUENCE_IDX]; @@ -1316,6 +1333,10 @@ temp_tagpos=round((float)(sync_timer%g_com_map[COM_INTERVAL])/slottime); tagpos_rec[(u8)temp_tagpos]=1; rec_nearbase_num=rx_buffer[NEARBASENUM_INDEX]; + if(rec_nearbase_num>30) + { + break; + } battary = rx_buffer[BATTARY_IDX]; button = rx_buffer[BUTTON_IDX]; frame_seq_nb2 = rx_buffer[SEQUENCE_IDX]; @@ -1345,7 +1366,7 @@ checksum = Checksum_u16(&usart_send[2],23+8*rec_nearbase_num); memcpy(&usart_send[25+8*rec_nearbase_num],&checksum,2); - // UART_PushFrame(usart_send,27+8*rec_nearbase_num); + UART_PushFrame(usart_send,27+8*rec_nearbase_num); ////////////////////////////////////////////////////////////// -- Gitblit v1.9.3