From bbb68fd93739963f866d0c95246191962b6a7f72 Mon Sep 17 00:00:00 2001 From: zhyinch <zhyinch@gmail.com> Date: 星期二, 29 十月 2019 09:49:50 +0800 Subject: [PATCH] 增加基站时间同步,等待systick换成基础定时器 --- 源码/核心板/Src/application/dw_app.c | 33 ++++++++++++++++++++++++++++++--- 1 files changed, 30 insertions(+), 3 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 00e7907..2491416 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" @@ -64,6 +64,8 @@ #define FINAL_MSG_FINAL_TX_TS_IDX 18 #define FINAL_MSG_TS_LEN 4 +#define SYNC_SEQ_IDX 5 + #define GROUP_ID_IDX 0 #define ANCHOR_ID_IDX 1 #define TAG_ID_IDX 5 @@ -80,6 +82,7 @@ #define POLL 0x01 #define RESPONSE 0x02 #define FINAL 0x03 +#define SYNC 0x04 /*------------------------------------ Variables ------------------------------------------*/ /* Default communication configuration. We use here EVK1000's default mode (mode 3). */ @@ -98,6 +101,7 @@ /* Frames used in the ranging process. See NOTE 2 below. */ static uint8_t tx_poll_msg[20] = {0}; +static uint8_t tx_sync_msg[14] = {0}; //static uint8_t rx_resp_msg[] = {0x41, 0x88, 0, 0xCA, 0xDE, 'V', 'E', 'W', 'A', 0x10, 0x02, 0, 0, 0, 0}; static uint8_t tx_final_msg[] = {0x41, 0x88, 0, 0xCA, 0xDE, 'W', 'A', 'V', 'E', 0x23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; @@ -268,10 +272,12 @@ tx_poll_msg[MESSAGE_TYPE_IDX]=POLL; tx_resp_msg[MESSAGE_TYPE_IDX]=RESPONSE; tx_final_msg[MESSAGE_TYPE_IDX]=FINAL; + tx_sync_msg[MESSAGE_TYPE_IDX]=SYNC; + memcpy(&tx_poll_msg[TAG_ID_IDX], &dev_id, 4); memcpy(&tx_final_msg[TAG_ID_IDX], &dev_id, 4); memcpy(&tx_resp_msg[ANCHOR_ID_IDX], &dev_id, 4); - + memcpy(&tx_sync_msg[ANCHOR_ID_IDX], &dev_id, 4); } uint16_t Checksum_u16(uint8_t* pdata, uint32_t len) { @@ -291,6 +297,17 @@ { dwt_configuresleep(0x940, 0x7); dwt_entersleep(); +} +extern uint8_t g_start_send_flag; +u8 g_start_sync_flag; +void SyncPoll(u8 sync_seq) +{ + g_start_sync_flag=1; + dwt_forcetrxoff(); + tx_sync_msg[SYNC_SEQ_IDX]=sync_seq; + dwt_writetxdata(sizeof(tx_sync_msg), tx_sync_msg, 0);//将Poll包数据传给DW1000,将在开启发送时传出去 + dwt_writetxfctrl(sizeof(tx_sync_msg), 0);//设置超宽带发送数据长度 + dwt_starttx(DWT_START_TX_IMMEDIATE); } uint16_t g_Resttimer; uint8_t result; @@ -442,7 +459,8 @@ } int8_t correction_time; -extern uint8_t g_start_send_flag; +extern uint8_t sync_seq; +extern uint16_t sync_timer; void Anchor_App(void) { uint32_t frame_len; @@ -455,7 +473,7 @@ dwt_rxenable(0);//打开接收 /* Poll for reception of a frame or error/timeout. See NOTE 7 below. */ - while (!((status_reg = dwt_read32bitreg(SYS_STATUS_ID)) & (SYS_STATUS_RXFCG | SYS_STATUS_ALL_RX_ERR))&&!g_start_send_flag)//不断查询芯片状态直到接收成功或者出现错误 + 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(); g_Resttimer=0; @@ -608,6 +626,15 @@ /* Clear RX error events in the DW1000 status register. */ dwt_write32bitreg(SYS_STATUS_ID, SYS_STATUS_ALL_RX_ERR); } + }else if(rx_buffer[MESSAGE_TYPE_IDX] == SYNC) + { + if(rx_buffer[SYNC_SEQ_IDX]<sync_seq) + { + sync_seq=rx_buffer[SYNC_SEQ_IDX]+1; + SysTick->VAL =00; + sync_timer=0; + SyncPoll(sync_seq); + } } } else -- Gitblit v1.9.3