diff --git a/driver/bk4819.c b/driver/bk4819.c index b0cd015..0ef3f2f 100644 --- a/driver/bk4819.c +++ b/driver/bk4819.c @@ -102,8 +102,6 @@ void BK4819_Init(void) // BK4819_WriteRegister(0x77, 0xCCEF); // rssi + noise // BK4819_WriteRegister(0x77, 0xFFEF); // rssi -// BK4819_WriteRegister(0x73, (0u << 11) | (1u << 4)); // disable AFC - BK4819_config_sub_audible(); const uint8_t dtmf_coeffs[] = {111, 107, 103, 98, 80, 71, 58, 44, 65, 55, 37, 23, 228, 203, 181, 159}; @@ -245,6 +243,15 @@ void BK4819_WriteU16(uint16_t Data) SYSTICK_DelayUs(1); } } +void BK4819_EnableAFC(void) +{ + BK4819_WriteRegister(0x73, (0u << 11) | (0u << 4)); +} + +void BK4819_DisableAFC(void) +{ + BK4819_WriteRegister(0x73, (0u << 11) | (1u << 4)); +} void BK4819_DisableAGC(void) { @@ -413,7 +420,7 @@ void BK4819_set_TX_deviation(const bool narrow) BK4819_WriteRegister(0x40, (3u << 12) | deviation); } -void BK4819_SetFilterBandwidth(const BK4819_filter_bandwidth_t Bandwidth, const bool weak_no_different) +void BK4819_SetFilterBandwidth(const BK4819_filter_bandwidth_t Bandwidth) { // REG_43 // <15> 0 ??? @@ -467,88 +474,45 @@ void BK4819_SetFilterBandwidth(const BK4819_filter_bandwidth_t Bandwidth, const m_bandwidth = Bandwidth; + // when received signal is weak, the RX bandwidth is reduced + switch (Bandwidth) { default: case BK4819_FILTER_BW_WIDE: // 25kHz - if (weak_no_different) - { // make the RX bandwidth the same with weak signals - val = - (0u << 15) | // 0 - (4u << 12) | // *3 RF filter bandwidth - (2u << 9) | // *0 RF filter bandwidth when signal is weak - (6u << 6) | // *0 AFTxLPF2 filter Band Width - (2u << 4) | // 2 BW Mode Selection - (1u << 3) | // 1 - (0u << 2) | // 0 Gain after FM Demodulation - (0u << 0); // 0 - } - else - { // with weak RX signals the RX bandwidth is reduced - val = // 0x3028); // 0 011 000 000 10 1 0 00 - (0u << 15) | // 0 - (4u << 12) | // *3 RF filter bandwidth - (2u << 9) | // *0 RF filter bandwidth when signal is weak - (6u << 6) | // *0 AFTxLPF2 filter Band Width - (2u << 4) | // 2 BW Mode Selection - (1u << 3) | // 1 - (0u << 2) | // 0 Gain after FM Demodulation - (0u << 0); // 0 - } + val = // 0x3028); // 0 011 000 000 10 1 0 00 + (0u << 15) | // 0 + (4u << 12) | // *3 RF filter bandwidth + (2u << 9) | // *0 RF filter bandwidth when signal is weak + (6u << 6) | // *0 AFTxLPF2 filter Band Width + (2u << 4) | // 2 BW Mode Selection + (1u << 3) | // 1 + (0u << 2) | // 0 Gain after FM Demodulation + (0u << 0); // 0 break; case BK4819_FILTER_BW_NARROW: // 12.5kHz - if (weak_no_different) - { - val = - (0u << 15) | // 0 - (4u << 12) | // *4 RF filter bandwidth - (2u << 9) | // *0 RF filter bandwidth when signal is weak - (0u << 6) | // *1 AFTxLPF2 filter Band Width - (0u << 4) | // 0 BW Mode Selection - (1u << 3) | // 1 - (0u << 2) | // 0 Gain after FM Demodulation - (0u << 0); // 0 - } - else - { - val = // 0x4048); // 0 100 000 001 00 1 0 00 - (0u << 15) | // 0 - (4u << 12) | // *4 RF filter bandwidth - (2u << 9) | // *0 RF filter bandwidth when signal is weak - (0u << 6) | // *1 AFTxLPF2 filter Band Width - (0u << 4) | // 0 BW Mode Selection - (1u << 3) | // 1 - (0u << 2) | // 0 Gain after FM Demodulation - (0u << 0); // 0 - } + val = + (0u << 15) | // 0 + (4u << 12) | // *4 RF filter bandwidth + (2u << 9) | // *0 RF filter bandwidth when signal is weak + (0u << 6) | // *1 AFTxLPF2 filter Band Width + (0u << 4) | // 0 BW Mode Selection + (1u << 3) | // 1 + (0u << 2) | // 0 Gain after FM Demodulation + (0u << 0); // 0 break; case BK4819_FILTER_BW_NARROWER: // 6.25kHz - if (weak_no_different) - { - val = - (0u << 15) | // 0 - (3u << 12) | // 3 RF filter bandwidth - (3u << 9) | // *0 RF filter bandwidth when signal is weak - (1u << 6) | // 1 AFTxLPF2 filter Band Width - (1u << 4) | // 1 BW Mode Selection - (1u << 3) | // 1 - (0u << 2) | // 0 Gain after FM Demodulation - (0u << 0); // 0 - } - else - { - val = - (0u << 15) | // 0 - (3u << 12) | // 3 RF filter bandwidth - (0u << 9) | // 0 RF filter bandwidth when signal is weak - (1u << 6) | // 1 AFTxLPF2 filter Band Width - (1u << 4) | // 1 BW Mode Selection - (1u << 3) | // 1 - (0u << 2) | // 1 Gain after FM Demodulation - (0u << 0); // 0 - } + val = + (0u << 15) | // 0 + (3u << 12) | // 3 RF filter bandwidth + (2u << 9) | // *0 RF filter bandwidth when signal is weak + (1u << 6) | // 1 AFTxLPF2 filter Band Width + (1u << 4) | // 1 BW Mode Selection + (1u << 3) | // 1 + (0u << 2) | // 0 Gain after FM Demodulation + (0u << 0); // 0 break; } diff --git a/driver/bk4819.h b/driver/bk4819.h index ea92164..8bbcd53 100644 --- a/driver/bk4819.h +++ b/driver/bk4819.h @@ -67,6 +67,9 @@ void BK4819_WriteRegister(const uint8_t Register, uint16_t Data); void BK4819_WriteU8(uint8_t Data); void BK4819_WriteU16(uint16_t Data); +void BK4819_EnableAFC(void); +void BK4819_DisableAFC(void); + void BK4819_DisableAGC(void); void BK4819_EnableAGC(void); @@ -79,7 +82,7 @@ void BK4819_EnableVox(uint16_t Vox1Threshold, uint16_t Vox0Threshold); void BK4819_set_TX_deviation(const bool narrow); -void BK4819_SetFilterBandwidth(const BK4819_filter_bandwidth_t Bandwidth, const bool weak_no_different); +void BK4819_SetFilterBandwidth(const BK4819_filter_bandwidth_t Bandwidth); void BK4819_SetupPowerAmplifier(const uint8_t bias, const uint32_t frequency); void BK4819_set_rf_frequency(const uint32_t frequency, const bool trigger_update); diff --git a/firmware.bin b/firmware.bin index 6c534a3..6bf31ae 100644 Binary files a/firmware.bin and b/firmware.bin differ diff --git a/firmware.packed.bin b/firmware.packed.bin index 7591863..5d1f87a 100644 Binary files a/firmware.packed.bin and b/firmware.packed.bin differ diff --git a/radio.c b/radio.c index 1ae352d..f0e3927 100644 --- a/radio.c +++ b/radio.c @@ -644,16 +644,23 @@ void RADIO_setup_registers(bool switch_to_function_foreground) case BK4819_FILTER_BW_NARROW: #ifdef ENABLE_AM_FIX #if 0 -// BK4819_SetFilterBandwidth(Bandwidth, g_rx_vfo->channel.am_mode > 0 && g_eeprom.config.setting.am_fix); - BK4819_SetFilterBandwidth(Bandwidth, true); + BK4819_SetFilterBandwidth(Bandwidth); + BK4819_EnableAFC(); #else if (g_rx_vfo->channel.am_mode > 1) - BK4819_SetFilterBandwidth(BK4819_FILTER_BW_NARROWER, false); + { + BK4819_SetFilterBandwidth(BK4819_FILTER_BW_NARROWER); // sideband + BK4819_DisableAFC(); + } else - BK4819_SetFilterBandwidth(Bandwidth, true); + { + BK4819_SetFilterBandwidth(Bandwidth); + BK4819_EnableAFC(); + } #endif #else BK4819_SetFilterBandwidth(Bandwidth, false); + BK4819_EnableAFC(); #endif break; } @@ -908,16 +915,23 @@ void RADIO_enableTX(const bool fsk_tx) case BK4819_FILTER_BW_NARROW: #ifdef ENABLE_AM_FIX #if 0 -// BK4819_SetFilterBandwidth(Bandwidth, g_current_vfo->channel.am_mode > 0 && g_eeprom.config.setting.am_fix); - BK4819_SetFilterBandwidth(Bandwidth, true); + BK4819_SetFilterBandwidth(Bandwidth); + BK4819_EnableAFC(); #else if (g_current_vfo->channel.am_mode > 1) - BK4819_SetFilterBandwidth(BK4819_FILTER_BW_NARROWER, false); + { + BK4819_SetFilterBandwidth(BK4819_FILTER_BW_NARROWER); // sideband + BK4819_DisableAFC(); + } else - BK4819_SetFilterBandwidth(Bandwidth, true); + { + BK4819_SetFilterBandwidth(Bandwidth); + BK4819_EnableAFC(); + } #endif #else - BK4819_SetFilterBandwidth(Bandwidth, false); + BK4819_SetFilterBandwidth(Bandwidth); + BK4819_EnableAFC(); #endif break; }