chen
2025-05-16 4cdc4b3d488e15b1d6572bdcd61a2ce92d0c8c9b
成功分离2个测距功能
已修改7个文件
142 ■■■■■ 文件已修改
keil/include/board/board.c 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
keil/include/board/board.h 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
keil/include/components/app/src/ranging_fira.c 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
keil/include/drivers/mk_uwb.c 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
keil/include/main/main.c 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pin_config.c 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user_config.h 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
keil/include/board/board.c
@@ -408,10 +408,10 @@
void board_led_init(void)
{
    //灯
        io_pin_mux_set(LED_PIN, IO_FUNC0);
        gpio_pin_set_dir( LED_PIN, GPIO_DIR_OUT, 0);
        io_pull_set(LED_PIN , IO_PULL_DOWN, IO_PULL_UP_LEVEL4);
         // 判断是Airtag还是免布线模式
    io_pin_mux_set(MODE_CHANGE_PIN, IO_FUNC0);
        gpio_pin_set_dir( MODE_CHANGE_PIN, GPIO_DIR_IN, 0);
        io_pull_set(MODE_CHANGE_PIN , IO_PULL_DOWN, IO_PULL_UP_LEVEL2);
}
void board_led_on(enum IO_PIN_T idx)
keil/include/board/board.h
@@ -143,6 +143,7 @@
 */
void board_pins_config(void);
void boot_deinit(void);
/**
 * @brief Configure debug trace port.
 * @param[in] port      Trace port
keil/include/components/app/src/ranging_fira.c
@@ -136,12 +136,14 @@
// This function will be called by uwbapi_session_init()
void app_session_init(void)
{
        normal_uwb_change_to_fira();//变为fira配置的uwb
{
    #ifdef MY_MODE
            normal_uwb_change_to_fira();
    #endif
    // register process handler for MAC TX done and RX done
    mac_register_process_handler(ranging_tx_process, ranging_rx_process);
        uwbs_handler_init(&op);
    uwbs_handler_init(&op);
}
void ranging_configure(void)
@@ -309,10 +311,10 @@
    .phy_cfg.rx_ant_id = UWB_RX_ANT_3,        /* UWB RX antenna port                       */
};
#endif
uint8_t normal_flag=1;
void uwb_fira_init(void)
{
        uwb_open();
//        uwb_open();
    // set advanced parameters
    struct PHY_ADV_CONFIG_T adv_config =
@@ -340,6 +342,7 @@
    uwb_app_config.session_param.tx_power_level = board_param.tx_power_fcc[CALIB_CH(uwb_app_config.ppdu_params.ch_num)];
    uwb_app_config.ppdu_params.rx_ant_id = (uint8_t)(RX_MAIN_ANT_PORT);
}
uint8_t normal_flag=0;
void uwb_normal_init(void)
{
Uwb_init();    
@@ -403,7 +406,9 @@
void ranging_stop(void)
{
    ranging_env.enable = 0;
    #ifdef MY_MODE
        fira_uwb_change_to_normal();//变为normal配置的uwb
    #endif
    ranging_monitor_stop();
    LOG_INFO(TRACE_NO_REPORT_HOST | TRACE_MODULE_APP, "Ranging stop\r\n");
}
keil/include/drivers/mk_uwb.c
@@ -402,22 +402,22 @@
    {
        ranging_ant_delays_set(i, board_param.ant_delays[ch_idx][i]);
    }
    LOG_INFO(TRACE_MODULE_DRIVER, "ToF ant delays %d %d %d %d\r\n", board_param.ant_delays[ch_idx][0], board_param.ant_delays[ch_idx][1],
             board_param.ant_delays[ch_idx][2], board_param.ant_delays[ch_idx][3]);
    //LOG_INFO(TRACE_MODULE_DRIVER, "ToF ant delays %d %d %d %d\r\n", board_param.ant_delays[ch_idx][0], board_param.ant_delays[ch_idx][1],
    //         board_param.ant_delays[ch_idx][2], board_param.ant_delays[ch_idx][3]);
    pdoa_ant_delays_set(&board_param.pdoa_delays[ch_idx][0], 4);
    LOG_INFO(TRACE_MODULE_DRIVER, "PDoA delays %d %d %d %d\r\n", board_param.pdoa_delays[ch_idx][0], board_param.pdoa_delays[ch_idx][1],
             board_param.pdoa_delays[ch_idx][2], board_param.pdoa_delays[ch_idx][3]);
    //LOG_INFO(TRACE_MODULE_DRIVER, "PDoA delays %d %d %d %d\r\n", board_param.pdoa_delays[ch_idx][0], board_param.pdoa_delays[ch_idx][1],
     //        board_param.pdoa_delays[ch_idx][2], board_param.pdoa_delays[ch_idx][3]);
    pdoa_gain_set(&board_param.pdoa_gains[ch_idx][0], 4);
    LOG_INFO(TRACE_MODULE_DRIVER, "PDoA gains %d %d %d %d\r\n", board_param.pdoa_gains[ch_idx][0], board_param.pdoa_gains[ch_idx][1],
             board_param.pdoa_gains[ch_idx][2], board_param.pdoa_gains[ch_idx][3]);
    //LOG_INFO(TRACE_MODULE_DRIVER, "PDoA gains %d %d %d %d\r\n", board_param.pdoa_gains[ch_idx][0], board_param.pdoa_gains[ch_idx][1],
      //       board_param.pdoa_gains[ch_idx][2], board_param.pdoa_gains[ch_idx][3]);
    pdoa_ant_space_set(board_param.pdoa_ant_space);
    LOG_INFO(TRACE_MODULE_DRIVER, "PDoA ant space %d\r\n", board_param.pdoa_ant_space);
    //LOG_INFO(TRACE_MODULE_DRIVER, "PDoA ant space %d\r\n", board_param.pdoa_ant_space);
    pdoa_angle_offset_set(board_param.pdoa_offsets);
    LOG_INFO(TRACE_MODULE_DRIVER, "PDoA angle offsets %d %d\r\n", board_param.pdoa_offsets[0], board_param.pdoa_offsets[1]);
    //LOG_INFO(TRACE_MODULE_DRIVER, "PDoA angle offsets %d %d\r\n", board_param.pdoa_offsets[0], board_param.pdoa_offsets[1]);
}
void *uwb_configure(uint8_t mode, uint8_t tx_power_level, const struct UWB_CONFIG_T *ppdu_params)
keil/include/main/main.c
@@ -158,6 +158,7 @@
    LOG_INFO(TRACE_MODULE_APP,"固件版本:4G-GPS定位手环 V%d.%d. \r\n",g_com_map[VERSION]>>8,g_com_map[VERSION]&0xff);
    LOG_INFO(TRACE_MODULE_APP,"服务器地址: %d.%d.%d.%d:%d.\r\n",ip0,ip1,ip2,ip3,port);
}
static void board_init(void)
{
    uint32_t internal_flash = (REG_READ(0x40000018) >> 17) & 0x1;
@@ -165,6 +166,7 @@
    // Clock configuration
    board_clock_run();
        boot_deinit();//新加的
    // Pin configuration
    board_pins_config();
    // Trace configuration
@@ -203,7 +205,7 @@
#else
        Program_Init();
    // led
   // board_led_init();
    board_led_init();
//    board_led_on(BOARD_LED_1);
#endif
    board_configure();
@@ -241,13 +243,15 @@
}
int main(void)
{
    // Initialize MCU system
{
    // Initialize MCU system
    board_init();
    // Disable watchdog timer
     // Disable watchdog timer
    wdt_close(WDT_ID0);
    LOG_INFO(TRACE_MODULE_APP, "UCI FiRa example\r\n");
    if(gpio_pin_get_val(MODE_CHANGE_PIN))
    {
        
        // Platform init for WSF
    PalSysInit();
@@ -288,35 +292,40 @@
    uwb_test_init(handlerId);
#endif
#ifndef MY_MODE
    uwb_open();
//    // set advanced parameters
//    struct PHY_ADV_CONFIG_T adv_config =
//    {
//        // RPM0: 40, RPM3: 60
//        .thres_fap_detect = 60,
//        // RPM0: 4, RPM3: 8
//        .nth_scale_factor = 8,
//        // RFrame SP0: 0/1, Others: 0/1/2/3
//        .ranging_performance_mode = 3,
//#if RX_ANT_PORTS_NUM == 4
//        .skip_weakest_port_en = 1,
//#else
//        .skip_weakest_port_en = 0,
//#endif
//    };
//    phy_adv_params_configure(&adv_config);
    // set advanced parameters
    struct PHY_ADV_CONFIG_T adv_config =
    {
        // RPM0: 40, RPM3: 60
        .thres_fap_detect = 60,
        // RPM0: 4, RPM3: 8
        .nth_scale_factor = 8,
        // RFrame SP0: 0/1, Others: 0/1/2/3
        .ranging_performance_mode = 3,
#if RX_ANT_PORTS_NUM == 4
        .skip_weakest_port_en = 1,
#else
        .skip_weakest_port_en = 0,
#endif
    };
    phy_adv_params_configure(&adv_config);
//    // which RX ports will be used for AoA/PDoA
//    phy_rx_ant_mode_set(RX_ANT_PORTS_COMBINATION);
    // which RX ports will be used for AoA/PDoA
    phy_rx_ant_mode_set(RX_ANT_PORTS_COMBINATION);
//    uwbs_init();
//    uwb_app_config.ranging_flow_mode = (uint8_t)(RANGING_FLOW_FIRA);
//    uwb_app_config.filter_en = (uint8_t)(FILTER_EN);
//    uwb_app_config.session_param.tx_power_level = board_param.tx_power_fcc[CALIB_CH(uwb_app_config.ppdu_params.ch_num)];
//    uwb_app_config.ppdu_params.rx_ant_id = (uint8_t)(RX_MAIN_ANT_PORT);
    uwbs_init();
    uwb_app_config.ranging_flow_mode = (uint8_t)(RANGING_FLOW_FIRA);
    uwb_app_config.filter_en = (uint8_t)(FILTER_EN);
    uwb_app_config.session_param.tx_power_level = board_param.tx_power_fcc[CALIB_CH(uwb_app_config.ppdu_params.ch_num)];
    uwb_app_config.ppdu_params.rx_ant_id = (uint8_t)(RX_MAIN_ANT_PORT);
#elif defined MY_MODE
        Uwb_init();//默认为我们测距配置
        OpenUWB();
        uart_receive(UART_ID1,m_EUART_DMA_RXBuf,EUART_RX_BUF_SIZE,uart_receive_callback);
#endif
    //
    // Create UCI transmission layer task
    //
@@ -335,19 +344,30 @@
    // Enable sleep timer
    sleep_timer_open(true, SLEEP_TIMER_MODE_ONESHOT, sleep_timer_callback);
        uart_receive(UART_ID1,m_EUART_DMA_RXBuf,EUART_RX_BUF_SIZE,uart_receive_callback);
    while (1)
    {
        wsfOsDispatcher();
#ifdef MY_MODE
                if(normal_flag)
                {
                IdleTask();
                }
#endif
        power_manage();
    }
    }else{
//                 adc_open(&usr_adc_cfg);
        Uwb_init();//默认为我们测距配置
        OpenUWB();
        uart_receive(UART_ID1,m_EUART_DMA_RXBuf,EUART_RX_BUF_SIZE,uart_receive_callback);
             while (1)
                {
                uwb_app_poll();//我们的测距逻辑
                IdleTask();
                }
        power_manage();
    }
    }
}
void app_restore_from_power_down(void)
pin_config.c
@@ -40,6 +40,18 @@
#include "mk_io.h"
#include "board.h"
void boot_deinit(void)
{
    //将boot中串口返回普通gpio
// UART0 TX/RX
    io_pin_mux_set(IO_PIN_5, IO_FUNC0);
    io_pin_mux_set(IO_PIN_6, IO_FUNC0);
    // UART1 RX/TX
    io_pin_mux_set(IO_PIN_10, IO_FUNC0);
    io_pin_mux_set(IO_PIN_9, IO_FUNC0);
     uart_close(UART_ID1);//解绑原来串口1
     uart_close(UART_ID0);//解绑原来串口0
}
void board_pins_config(void)
{
@@ -80,6 +92,7 @@
    io_pin_mux_set(IO_PIN_0, IO_FUNC4);
    io_pin_mux_set(IO_PIN_1, IO_FUNC4);
#elif BOARD_TYPE == MK8000_DK
    // UART1 TX/RX
user_config.h
@@ -305,7 +305,7 @@
/// Antenna pattern
#define ANT_PATTERN (ANT_PATTERN_LINEAR)
#endif
//#define MY_MODE
/** Enable load cap automatic tuning during ranging procedure */
#define XTAL_AUTO_TUNE_EN (1)
@@ -328,6 +328,7 @@
#define UWB_RX_WINDOW (US_TO_PHY_TIMER_COUNT(750))
#define LED_PIN  IO_PIN_4
#define INPUT_5V_Pin  IO_PIN_11
#define MODE_CHANGE_PIN IO_PIN_4
/* =========================================================================================================================== */
/* ================                                           End                                             ================ */
/* =========================================================================================================================== */