| | |
| | | #include "dw_driver.h" |
| | | #include "Spi.h" |
| | | #include "led.h" |
| | | #include "serial_at_cmd_app.h" |
| | | #include "Usart.h" |
| | | #include "global_param.h" |
| | | #include "filters.h" |
| | | |
| | | |
| | | /*------------------------------------ Marcos ------------------------------------------*/ |
| | |
| | | #define POLL_TX_TO_RESP_RX_DLY_UUS 150 |
| | | /* This is the delay from Frame RX timestamp to TX reply timestamp used for calculating/setting the DW1000's delayed TX function. This includes the |
| | | * frame length of approximately 2.66 ms with above configuration. */ |
| | | #define RESP_RX_TO_FINAL_TX_DLY_UUS 4100 |
| | | #define RESP_RX_TO_FINAL_TX_DLY_UUS 1500 |
| | | /* Receive response timeout. See NOTE 5 below. */ |
| | | #define RESP_RX_TIMEOUT_UUS 14700 |
| | | #define RESP_RX_TIMEOUT_UUS 2700 |
| | | |
| | | #define POLL_RX_TO_RESP_TX_DLY_UUS 3600 |
| | | #define POLL_RX_TO_RESP_TX_DLY_UUS 420 |
| | | /* This is the delay from the end of the frame transmission to the enable of the receiver, as programmed for the DW1000's wait for response feature. */ |
| | | #define RESP_TX_TO_FINAL_RX_DLY_UUS 500 |
| | | #define RESP_TX_TO_FINAL_RX_DLY_UUS 200 |
| | | /* Receive final timeout. See NOTE 5 below. */ |
| | | #define FINAL_RX_TIMEOUT_UUS 4300 |
| | | |
| | |
| | | |
| | | /*------------------------------------ Variables ------------------------------------------*/ |
| | | /* Default communication configuration. We use here EVK1000's default mode (mode 3). */ |
| | | static dwt_config_t config = |
| | | { |
| | | 2, /* Channel number. */ |
| | | DWT_PRF_64M, /* Pulse repetition frequency. */ |
| | | DWT_PLEN_1024, /* Preamble length. */ |
| | | DWT_PAC32, /* Preamble acquisition chunk size. Used in RX only. */ |
| | | 9, /* TX preamble code. Used in TX only. */ |
| | | 9, /* RX preamble code. Used in RX only. */ |
| | | 1, /* Use non-standard SFD (Boolean) */ |
| | | DWT_BR_110K, /* Data rate. */ |
| | | DWT_PHRMODE_STD, /* PHY header mode. */ |
| | | (1025 + 64 - 32) /* SFD timeout (preamble length + 1 + SFD length - PAC size). Used in RX only. */ |
| | | static dwt_config_t config = { |
| | | 5, /* Channel number. */ |
| | | DWT_PRF_64M, /* Pulse repetition frequency. */ |
| | | DWT_PLEN_128, /* Preamble length. */ |
| | | DWT_PAC8, /* Preamble acquisition chunk size. Used in RX only. */ |
| | | 9, /* TX preamble code. Used in TX only. */ |
| | | 9, /* RX preamble code. Used in RX only. */ |
| | | 0, /* Use non-standard SFD (Boolean) */ |
| | | DWT_BR_6M8, /* Data rate. */ |
| | | DWT_PHRMODE_STD, /* PHY header mode. */ |
| | | (129 + 8 - 8) /* SFD timeout (preamble length + 1 + SFD length - PAC size). Used in RX only. */ |
| | | }; |
| | | |
| | | /* Frames used in the ranging process. See NOTE 2 below. */ |
| | |
| | | uint8_t random_delay_tim = 0; |
| | | |
| | | double distance, dist_no_bias, dist_cm; |
| | | |
| | | uint32_t g_UWB_com_interval = 0; |
| | | float dis_after_filter; //å½åè·ç¦»å¼ |
| | | LPFilter_Frac* p_Dis_Filter; //æµè·ç¨çä½éæ»¤æ³¢å¨ |
| | | |
| | | /*------------------------------------ Functions ------------------------------------------*/ |
| | | |
| | |
| | | |
| | | /* Configure DW1000. See NOTE 6 below. */ |
| | | dwt_configure(&config);//é
ç½®DW1000 |
| | | |
| | | |
| | | |
| | | /* Apply default antenna delay value. See NOTE 1 below. */ |
| | | dwt_setrxantennadelay(RX_ANT_DLY); //è®¾ç½®æ¥æ¶å¤©çº¿å»¶è¿ |
| | | dwt_settxantennadelay(TX_ANT_DLY); //设置åå°å¤©çº¿å»¶è¿ |
| | |
| | | dwt_setrxtimeout(RESP_RX_TIMEOUT_UUS); //è®¾ç½®æ¥æ¶è¶
æ¶æ¶é´ |
| | | } |
| | | |
| | | void tag_sleep_configuraion(void) |
| | | { |
| | | dwt_configuresleep(0x940, 0x7); |
| | | dwt_entersleep(); |
| | | } |
| | | |
| | | void Tag_App(void)//å鿍¡å¼(TAGæ ç¾) |
| | | { |
| | | uint32_t frame_len; |
| | | uint32_t final_tx_time; |
| | | |
| | | GPIO_ResetBits(SPIx_GPIO, SPIx_CS); |
| | | delay_us(2000); |
| | | GPIO_SetBits(SPIx_GPIO, SPIx_CS); |
| | | |
| | | /* Write frame data to DW1000 and prepare transmission. See NOTE 7 below. */ |
| | | tx_poll_msg[ALL_MSG_SN_IDX] = frame_seq_nb; |
| | |
| | | } |
| | | LED0_BLINK; |
| | | /* Execute a delay between ranging exchanges. */ |
| | | deca_sleep(RNG_DELAY_MS + random_delay_tim); //ä¼ç åºå®æ¶é´ |
| | | dwt_entersleep(); |
| | | |
| | | } |
| | | |
| | | void Anchor_App(void) |
| | |
| | | |
| | | /* 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)))//䏿æ¥è¯¢è¯çç¶æç´å°æ¥æ¶æåæè
åºç°é误 |
| | | { }; |
| | | { |
| | | UART_CheckReceive(); |
| | | UART_CheckSend(); |
| | | }; |
| | | |
| | | if (status_reg & SYS_STATUS_RXFCG)//æåæ¥æ¶ |
| | | { |
| | |
| | | dist_cm = dist_no_bias * 100; //dis 为åä½ä¸ºcmçè·ç¦» |
| | | // dist[TAG_ID] = LP(dis, TAG_ID); //LP 为ä½é滤波å¨ï¼è®©æ°æ®æ´ç¨³å® |
| | | |
| | | /*--------------------------以ä¸ä¸ºéæµè·é»è¾------------------------*/ |
| | | LED0_BLINK; //æ¯æå䏿¬¡é讯åéªç䏿¬¡ |
| | | g_UWB_com_interval = 0; |
| | | dis_after_filter = LP_Frac_Update(p_Dis_Filter, dist_cm); |
| | | |
| | | } |
| | | } |