zhyinch
2019-10-29 bbb68fd93739963f866d0c95246191962b6a7f72
Ô´Âë/ºËÐİå/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