mirror of
https://github.com/OneOfEleven/uv-k5-firmware-custom.git
synced 2025-08-03 09:36:32 +03:00
update mic gain code
This commit is contained in:
@@ -113,29 +113,35 @@ void BK1080_Init(const uint16_t frequency, const bool initialise)
|
||||
|
||||
// determine the lower and upper frequency limits when multiple bands are used
|
||||
|
||||
BK1080_freq_lower = 0xffff;
|
||||
BK1080_freq_upper = 0;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(FM_RADIO_FREQ_BAND_TABLE); i++)
|
||||
if (!is_init)
|
||||
{
|
||||
const uint16_t lower = FM_RADIO_FREQ_BAND_TABLE[i].lower;
|
||||
const uint16_t upper = FM_RADIO_FREQ_BAND_TABLE[i].upper;
|
||||
BK1080_freq_lower = 0xffff;
|
||||
BK1080_freq_upper = 0;
|
||||
|
||||
if (BK1080_freq_lower > lower)
|
||||
BK1080_freq_lower = lower;
|
||||
// if (BK1080_freq_lower > upper)
|
||||
// BK1080_freq_lower = upper;
|
||||
|
||||
// if (BK1080_freq_upper < lower)
|
||||
// BK1080_freq_upper = lower;
|
||||
if (BK1080_freq_upper < upper)
|
||||
BK1080_freq_upper = upper;
|
||||
for (i = 0; i < ARRAY_SIZE(FM_RADIO_FREQ_BAND_TABLE); i++)
|
||||
{
|
||||
const uint16_t lower = FM_RADIO_FREQ_BAND_TABLE[i].lower;
|
||||
const uint16_t upper = FM_RADIO_FREQ_BAND_TABLE[i].upper;
|
||||
|
||||
if (BK1080_freq_lower > lower)
|
||||
BK1080_freq_lower = lower;
|
||||
// if (BK1080_freq_lower > upper)
|
||||
// BK1080_freq_lower = upper;
|
||||
|
||||
// if (BK1080_freq_upper < lower)
|
||||
// BK1080_freq_upper = lower;
|
||||
if (BK1080_freq_upper < upper)
|
||||
BK1080_freq_upper = upper;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#else
|
||||
// only 1 band is used
|
||||
BK1080_freq_lower = FM_RADIO_FREQ_BAND_TABLE[0].lower;
|
||||
BK1080_freq_upper = FM_RADIO_FREQ_BAND_TABLE[0].upper;
|
||||
if (!is_init)
|
||||
{
|
||||
BK1080_freq_lower = FM_RADIO_FREQ_BAND_TABLE[0].lower;
|
||||
BK1080_freq_upper = FM_RADIO_FREQ_BAND_TABLE[0].upper;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (initialise)
|
||||
@@ -161,6 +167,8 @@ void BK1080_Init(const uint16_t frequency, const bool initialise)
|
||||
{
|
||||
BK1080_WriteRegister(BK1080_REG_02_POWER_CONFIGURATION, (1u << 9) | (1u << 0));
|
||||
}
|
||||
|
||||
BK1080_WriteRegister(BK1080_REG_05_SYSTEM_CONFIGURATION2, 0x0A5F); // 0000 1010 0101 1111
|
||||
|
||||
BK1080_SetFrequency(frequency);
|
||||
}
|
||||
@@ -218,14 +226,15 @@ void BK1080_SetFrequency(uint16_t Frequency)
|
||||
Frequency = BK1080_freq_lower;
|
||||
// return;
|
||||
}
|
||||
|
||||
BK1080_WriteRegister(BK1080_REG_05_SYSTEM_CONFIGURATION2, (SEEK_THRESHOLD << 8) | (band << 6) | (CHAN_SPACING << 4) | (VOLUME << 0));
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
channel = Frequency - FM_RADIO_FREQ_BAND_TABLE[band].lower; // 100kHz channel spacing
|
||||
|
||||
BK1080_WriteRegister(BK1080_REG_05_SYSTEM_CONFIGURATION2, (SEEK_THRESHOLD << 8) | (band << 6) | (CHAN_SPACING << 4) | (VOLUME << 0));
|
||||
|
||||
BK1080_WriteRegister(BK1080_REG_03_CHANNEL, channel);
|
||||
SYSTEM_DelayMs(1);
|
||||
BK1080_WriteRegister(BK1080_REG_03_CHANNEL, channel | (1u << 15));
|
||||
}
|
||||
|
||||
|
127
driver/bk4819.c
127
driver/bk4819.c
@@ -280,8 +280,9 @@ void BK4819_DisableAGC(void)
|
||||
// <2:0> 0b110 DC Filter Band Width for Rx (IF In).
|
||||
// 000=Bypass DC filter;
|
||||
//
|
||||
BK4819_WriteRegister(0x7E,
|
||||
(1u << 15) | // 0 AGC fix mode
|
||||
BK4819_WriteRegister(0x7E, // 0x302E 0 011 000000 101 110
|
||||
// (1u << 15) | // 0 AGC fix mode
|
||||
(0u << 15) | // 0 AGC fix mode
|
||||
(3u << 12) | // 3 AGC fix index
|
||||
(5u << 3) | // 5 DC Filter band width for Tx (MIC In)
|
||||
(6u << 0)); // 6 DC Filter band width for Rx (I.F In)
|
||||
@@ -330,63 +331,61 @@ void BK4819_DisableAGC(void)
|
||||
BK4819_WriteRegister(0x10, 0x007A); // 000000 00 011 11 010
|
||||
BK4819_WriteRegister(0x14, 0x0019); // 000000 00 000 11 001
|
||||
|
||||
// ??
|
||||
// ???
|
||||
BK4819_WriteRegister(0x49, 0x2A38);
|
||||
BK4819_WriteRegister(0x7B, 0x8420);
|
||||
}
|
||||
|
||||
#ifndef ENABLE_AM_FIX
|
||||
void BK4819_EnableAGC(void)
|
||||
{
|
||||
// TODO: See if this attenuates overloading
|
||||
// signals as well as boosting weak ones
|
||||
//
|
||||
// REG_7E
|
||||
//
|
||||
// <15> 0 AGC Fix Mode.
|
||||
// 1=Fix; 0=Auto.
|
||||
//
|
||||
// <14:12> 0b011 AGC Fix Index.
|
||||
// 011=Max, then 010,001,000,111,110,101,100(min).
|
||||
//
|
||||
// <5:3> 0b101 DC Filter Band Width for Tx (MIC In).
|
||||
// 000=Bypass DC filter;
|
||||
//
|
||||
// <2:0> 0b110 DC Filter Band Width for Rx (IF In).
|
||||
// 000=Bypass DC filter;
|
||||
|
||||
BK4819_WriteRegister(0x7E,
|
||||
(0u << 15) | // 0 AGC fix mode
|
||||
(3u << 12) | // 3 AGC fix index
|
||||
(5u << 3) | // 5 DC Filter band width for Tx (MIC In)
|
||||
(6u << 0)); // 6 DC Filter band width for Rx (I.F In)
|
||||
|
||||
// TBR: fagci has this listed as two values, agc_rssi and lna_peak_rssi
|
||||
// This is why AGC appeared to do nothing as-is for Rx
|
||||
//
|
||||
// REG_62
|
||||
//
|
||||
// <15:8> 0xFF AGC RSSI
|
||||
//
|
||||
// <7:0> 0xFF LNA Peak RSSI
|
||||
//
|
||||
// TBR: Using S9+30 (173) and S9 (143) as suggested values
|
||||
BK4819_WriteRegister(0x62, (173u << 8) | (143u << 0));
|
||||
|
||||
// AGC auto-adjusts the following LNA values, no need to set them ourselves
|
||||
//BK4819_WriteRegister(0x13, (3u << 8) | (5u << 5) | (3u << 3) | (6u << 0)); // 000000 11 101 11 110
|
||||
//BK4819_WriteRegister(0x12, 0x037B); // 000000 11 011 11 011
|
||||
//BK4819_WriteRegister(0x11, 0x027B); // 000000 10 011 11 011
|
||||
//BK4819_WriteRegister(0x10, 0x007A); // 000000 00 011 11 010
|
||||
//BK4819_WriteRegister(0x14, 0x0019); // 000000 00 000 11 001
|
||||
|
||||
BK4819_WriteRegister(0x49, 0x2A38);
|
||||
BK4819_WriteRegister(0x7B, 0x8420);
|
||||
|
||||
for (unsigned int i = 0; i < 8; i++)
|
||||
BK4819_WriteRegister(0x06, ((i & 7u) << 13) | (0x4A << 7) | (0x36 << 0));
|
||||
}
|
||||
#endif
|
||||
void BK4819_EnableAGC(void)
|
||||
{
|
||||
// TODO: See if this attenuates overloading
|
||||
// signals as well as boosting weak ones
|
||||
//
|
||||
// REG_7E
|
||||
//
|
||||
// <15> 0 AGC Fix Mode.
|
||||
// 1=Fix; 0=Auto.
|
||||
//
|
||||
// <14:12> 0b011 AGC Fix Index.
|
||||
// 011=Max, then 010,001,000,111,110,101,100(min).
|
||||
//
|
||||
// <5:3> 0b101 DC Filter Band Width for Tx (MIC In).
|
||||
// 000=Bypass DC filter;
|
||||
//
|
||||
// <2:0> 0b110 DC Filter Band Width for Rx (IF In).
|
||||
// 000=Bypass DC filter;
|
||||
|
||||
BK4819_WriteRegister(0x7E,
|
||||
(0u << 15) | // 0 AGC fix mode
|
||||
(3u << 12) | // 3 AGC fix index
|
||||
(5u << 3) | // 5 DC Filter band width for Tx (MIC In)
|
||||
(6u << 0)); // 6 DC Filter band width for Rx (I.F In)
|
||||
|
||||
// TBR: fagci has this listed as two values, agc_rssi and lna_peak_rssi
|
||||
// This is why AGC appeared to do nothing as-is for Rx
|
||||
//
|
||||
// REG_62
|
||||
//
|
||||
// <15:8> 0xFF AGC RSSI
|
||||
//
|
||||
// <7:0> 0xFF LNA Peak RSSI
|
||||
//
|
||||
// TBR: Using S9+30 (173) and S9 (143) as suggested values
|
||||
BK4819_WriteRegister(0x62, (173u << 8) | (143u << 0));
|
||||
|
||||
// AGC auto-adjusts the following LNA values, no need to set them ourselves
|
||||
//BK4819_WriteRegister(0x13, (3u << 8) | (5u << 5) | (3u << 3) | (6u << 0)); // 000000 11 101 11 110
|
||||
//BK4819_WriteRegister(0x12, 0x037B); // 000000 11 011 11 011
|
||||
//BK4819_WriteRegister(0x11, 0x027B); // 000000 10 011 11 011
|
||||
//BK4819_WriteRegister(0x10, 0x007A); // 000000 00 011 11 010
|
||||
//BK4819_WriteRegister(0x14, 0x0019); // 000000 00 000 11 001
|
||||
|
||||
BK4819_WriteRegister(0x49, 0x2A38);
|
||||
BK4819_WriteRegister(0x7B, 0x8420);
|
||||
|
||||
for (unsigned int i = 0; i < 8; i++)
|
||||
BK4819_WriteRegister(0x06, ((i & 7u) << 13) | (0x4A << 7) | (0x36 << 0));
|
||||
}
|
||||
|
||||
void BK4819_set_GPIO_pin(bk4819_gpio_pin_t Pin, bool bSet)
|
||||
{
|
||||
@@ -1074,12 +1073,12 @@ void BK4819_StartTone1(const uint16_t frequency, const unsigned int level, const
|
||||
BK4819_REG_30_ENABLE_VCO_CALIB |
|
||||
BK4819_REG_30_ENABLE_UNKNOWN |
|
||||
// BK4819_REG_30_ENABLE_RX_LINK |
|
||||
BK4819_REG_30_ENABLE_AF_DAC |
|
||||
BK4819_REG_30_ENABLE_DISC_MODE |
|
||||
BK4819_REG_30_ENABLE_AF_DAC | //
|
||||
BK4819_REG_30_ENABLE_DISC_MODE | //
|
||||
BK4819_REG_30_ENABLE_PLL_VCO |
|
||||
BK4819_REG_30_ENABLE_PA_GAIN |
|
||||
// BK4819_REG_30_ENABLE_MIC_ADC |
|
||||
BK4819_REG_30_ENABLE_TX_DSP |
|
||||
BK4819_REG_30_ENABLE_TX_DSP | //
|
||||
// BK4819_REG_30_ENABLE_RX_DSP |
|
||||
0);
|
||||
}
|
||||
@@ -1124,7 +1123,7 @@ void BK4819_StopTones(const bool tx)
|
||||
{
|
||||
BK4819_WriteRegister(0x30,
|
||||
BK4819_REG_30_ENABLE_VCO_CALIB |
|
||||
BK4819_REG_30_ENABLE_UNKNOWN |
|
||||
// BK4819_REG_30_ENABLE_UNKNOWN |
|
||||
BK4819_REG_30_ENABLE_RX_LINK |
|
||||
BK4819_REG_30_ENABLE_AF_DAC |
|
||||
BK4819_REG_30_ENABLE_DISC_MODE |
|
||||
@@ -1192,6 +1191,16 @@ void BK4819_Sleep(void)
|
||||
BK4819_WriteRegister(0x37, 0x1D00); // 0 0 0111 0 1 0000 0 0 0 0
|
||||
}
|
||||
|
||||
void BK4819_set_mic_gain(unsigned int level)
|
||||
{
|
||||
if (level > 31)
|
||||
level = 31;
|
||||
|
||||
// mic gain 0.5dB/step 0 to 31
|
||||
BK4819_WriteRegister(0x7D, 0xE940 | level);
|
||||
// BK4819_WriteRegister(0x19, 0x1041); // 0001 0000 0100 0001 <15> MIC AGC 1 = disable 0 = enable .. doesn't work
|
||||
}
|
||||
|
||||
void BK4819_TurnsOffTones_TurnsOnRX(void)
|
||||
{
|
||||
BK4819_WriteRegister(0x70, 0);
|
||||
|
@@ -108,6 +108,7 @@ void BK4819_StopTones(const bool tx);
|
||||
void BK4819_PlayTone(const unsigned int tone_Hz, const unsigned int delay, const unsigned int level);
|
||||
void BK4819_EnterTxMute(void);
|
||||
void BK4819_ExitTxMute(void);
|
||||
void BK4819_set_mic_gain(unsigned int level);
|
||||
void BK4819_Sleep(void);
|
||||
void BK4819_TurnsOffTones_TurnsOnRX(void);
|
||||
|
||||
|
Reference in New Issue
Block a user