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