| | |
| | | #include "board.h" |
| | | |
| | | #ifndef RSSI_EN |
| | | #define RSSI_EN 0 |
| | | #define RSSI_EN (0) |
| | | #endif |
| | | |
| | | // single tone power range: -20dBm ~ 10dBm, step: 0.5dB (+/-0.2dB); tx power = -20dBm + 0.5 * power_level (+/- 1.5dB). |
| | |
| | | static const uint8_t (*power_table)[5] = power_table_CH9; |
| | | |
| | | extern int16_t ranging_ant_delays_get(uint8_t ant_idx); |
| | | extern void ranging_ant_delays_set(uint8_t ant_idx, int16_t delay_ps); |
| | | extern int pdoa_ant_delays_get(int16_t *delays, uint8_t rx_ant_num); |
| | | extern int pdoa_ant_delays_set(int16_t *delays, uint8_t rx_ant_num); |
| | | extern int pdoa_ant_space_set(int16_t ant_space); |
| | | extern int pdoa_gain_set(int16_t *gain, uint8_t rx_ant_num); |
| | | extern int pdoa_angle_offset_set(int16_t *angle_offset); |
| | | |
| | | __WEAK int16_t ranging_ant_delays_get(uint8_t ant_idx) |
| | | { |
| | | return 0; |
| | | } |
| | | |
| | | extern void ranging_ant_delays_set(uint8_t ant_idx, int16_t delay_ps); |
| | | __WEAK void ranging_ant_delays_set(uint8_t ant_idx, int16_t delay_ps) |
| | | { |
| | | } |
| | | |
| | | extern int pdoa_ant_delays_get(int16_t *delays, uint8_t rx_ant_num); |
| | | __WEAK int pdoa_ant_delays_get(int16_t *delays, uint8_t rx_ant_num) |
| | | { |
| | | return 0; |
| | | } |
| | | |
| | | extern int pdoa_ant_delays_set(int16_t *delays, uint8_t rx_ant_num); |
| | | __WEAK int pdoa_ant_delays_set(int16_t *delays, uint8_t rx_ant_num) |
| | | { |
| | | return 0; |
| | | } |
| | | |
| | | extern int pdoa_ant_space_set(int16_t ant_space); |
| | | __WEAK int pdoa_ant_space_set(int16_t ant_space) |
| | | { |
| | | return 0; |
| | | } |
| | | |
| | | extern int pdoa_gain_set(int16_t *gain, uint8_t rx_ant_num); |
| | | __WEAK int pdoa_gain_set(int16_t *gain, uint8_t rx_ant_num) |
| | | { |
| | | return 0; |
| | | } |
| | | |
| | | extern int pdoa_angle_offset_set(int16_t *angle_offset); |
| | | __WEAK int pdoa_angle_offset_set(int16_t *angle_offset) |
| | | { |
| | | return 0; |
| | |
| | | mac_init(IRQ_PRIORITY_HIGH, 3, 3, PHY_PAYLOAD_LEN_MAX); |
| | | #endif |
| | | |
| | | #ifdef XIP_EN |
| | | mac_ifs_set(PHY_LIFS_PERIOD_MACCLK_LONG, PHY_SIFS_PERIOD_MACCLK_LONG); |
| | | #endif |
| | | |
| | | #if RSSI_EN |
| | | mac_rssi_calculation_en(1); |
| | | #endif |
| | | |
| | | phy_init(IRQ_PRIORITY_NORMAL); |
| | | phy_init(IRQ_PRIORITY_NONE); |
| | | |
| | | phy_timer_open(1, IRQ_PRIORITY_HIGH); |
| | | |
| | | |
| | | LOG_INFO(TRACE_MODULE_DRIVER, "uwb_open\r\n"); |
| | | return 0; |
| | | } |
| | |
| | | { |
| | | // lna scan dis |
| | | REG_WRITE(0x40000628, (1 << 6) | rx_ant_code[antenna_idx & 0x03]); |
| | | #ifndef RADAR_EN |
| | | LOG_INFO(TRACE_MODULE_DRIVER, "Open ANT%d\r\n", antenna_idx & 0x03); |
| | | #endif |
| | | } |
| | | } |
| | | |
| | |
| | | { |
| | | // low band |
| | | power_table = power_table_CH2; |
| | | } |
| | | } |
| | | |
| | | void uwb_pulse_shape_set(uint8_t pulse_shape) |
| | | { |
| | | uint32_t value = REG_READ(0x40000404) & ~(0x3U << 16); |
| | | if (pulse_shape) |
| | | { |
| | | REG_WRITE(0x40000404, value | (0x01 << 16)); |
| | | } |
| | | else |
| | | { |
| | | REG_WRITE(0x40000404, value); |
| | | } |
| | | } |
| | | |
| | |
| | | { |
| | | // RF config |
| | | uwb_channel_switch(ppdu_params->ch_num); |
| | | // Pulse shape |
| | | uwb_pulse_shape_set(ppdu_params->pulse_shape); |
| | | // Antenna |
| | | uwb_rx_antenna_open((enum UWB_RX_ANT_T)ppdu_params->rx_ant_id); |
| | | LOG_INFO(TRACE_MODULE_DRIVER, "Open ANT%d\r\n", ppdu_params->rx_ant_id & 0x03); |
| | | |
| | | // Generate PHY configuration |
| | | void *sets_a = phy_params_generate(mode, HIGH_PERFORMANCE_MODE_EN, ppdu_params, NULL); |
| | |
| | | { |
| | | } |
| | | |
| | | uint32_t lock = int_lock(); |
| | | if ((REG_READ(0x40000400) & 0x0f) == 7) |
| | | { |
| | | uint32_t lock = int_lock(); |
| | | uint32_t ts = phy_timer_count_get() + 250; /* 2us timeout */ |
| | | REG_WRITE(0x40000408, ts); /* cfg the rx timeout */ |
| | | if (int_rpt_dis) |
| | | { |
| | | mac_current_rx_report_discard(); |
| | | } |
| | | int_unlock(lock); |
| | | } |
| | | int_unlock(lock); |
| | | } |
| | | |
| | | void uwb_tx_carrier_only(uint8_t on, uint8_t ch_num, uint8_t tx_power_level) |