0
mirror of https://github.com/OneOfEleven/uv-k5-firmware-custom.git synced 2025-06-19 22:58:04 +03:00

FM radio updates - faster scanning and gui update, also some renames

This commit is contained in:
OneOfEleven
2023-10-28 14:07:41 +01:00
parent 0082876274
commit 4153389778
36 changed files with 431 additions and 337 deletions

View File

@ -21,17 +21,60 @@
#include "driver/system.h"
#include "misc.h"
#ifndef ARRAY_SIZE
#define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0]))
#if defined(ENABLE_FMRADIO_64_76)
#define BAND 3u
#elif defined(ENABLE_FMRADIO_76_90)
#define BAND 2u
#elif defined(ENABLE_FMRADIO_76_108)
#define BAND 1u
#elif defined(ENABLE_FMRADIO_875_108)
#define BAND 0u
#endif
//#define CHAN_SPACING 0u // 200kHz
#define CHAN_SPACING 1u // 100kHz
//#define CHAN_SPACING 2u // 50kHz
#define VOLUME 15u
#define SEEK_THRESHOLD 10u
static const uint16_t BK1080_RegisterTable[] =
{
0x0008, 0x1080, 0x0201, 0x0000, 0x40C0, 0x0A1F, 0x002E, 0x02FF,
0x5B11, 0x0000, 0x411E, 0x0000, 0xCE00, 0x0000, 0x0000, 0x1000,
0x3197, 0x0000, 0x13FF, 0x9852, 0x0000, 0x0000, 0x0008, 0x0000,
0x51E1, 0xA8BC, 0x2645, 0x00E4, 0x1CD8, 0x3A50, 0xEAE0, 0x3000,
0x0200, 0x0000,
0x0008, // 0x00
0x1080, // 0x01 chip ID
(1u << 9) | (1u << 0), // 0x02 0x0201 0000001000000001
0x0000, // 0x03
0x40C0, // 0x04 0100000011000000
(SEEK_THRESHOLD << 8) | (BAND << 6) | (CHAN_SPACING << 4) | (VOLUME << 0), // 0x0A1F, // 0x05 00001010 00 01 1111
0x002E, // 0x06 0000000000101110
0x02FF, // 0x07 0000001011111111
0x5B11, // 0x08 0101101100010001
0x0000, // 0x09
0x411E, // 0x0A 0100000100011110
0x0000, // 0x0B
0xCE00, // 0x0C 1100111000000000
0x0000, // 0x0D
0x0000, // 0x0E
0x1000, // 0x0F 1000000000000000
0x3197, // 0x10 0011000110010111
0x0000, // 0x11
0x13FF, // 0x12 0001001111111111
0x9852, // 0x13 1001100001010010
0x0000, // 0x14
0x0000, // 0x15
0x0008, // 0x16
0x0000, // 0x17
0x51E1, // 0x18 0101000111100001
0xA8BC, // 0x19 1010100010111100
0x2645, // 0x1A 0010011001000101
0x00E4, // 0x1B 0000000011100100
0x1CD8, // 0x1C 0001110011011000
0x3A50, // 0x1D 0011101001010000
0xEAE0, // 0x1E 1110101011100000
0x3000, // 0x1F 0011000000000000
0x0200, // 0x20 0010000000000000
0x0000 // 0x21
};
bool is_init;
@ -62,17 +105,17 @@ void BK1080_Init(uint16_t Frequency, bool bDoScan)
}
else
{
BK1080_WriteRegister(BK1080_REG_02_POWER_CONFIGURATION, 0x0201);
BK1080_WriteRegister(BK1080_REG_02_POWER_CONFIGURATION, (1u << 9) | (1u << 0));
}
BK1080_WriteRegister(BK1080_REG_05_SYSTEM_CONFIGURATION2, 0x0A5F);
BK1080_WriteRegister(BK1080_REG_03_CHANNEL, Frequency - 760);
// SYSTEM_DelayMs(10);
BK1080_WriteRegister(BK1080_REG_03_CHANNEL, (Frequency - 760) | (1u << 15));
// BK1080_WriteRegister(BK1080_REG_05_SYSTEM_CONFIGURATION2, 0x0A5F);
BK1080_WriteRegister(BK1080_REG_05_SYSTEM_CONFIGURATION2, (SEEK_THRESHOLD << 8) | (BAND << 6) | (CHAN_SPACING << 4) | (VOLUME << 0));
BK1080_SetFrequency(Frequency);
}
else
{
BK1080_WriteRegister(BK1080_REG_02_POWER_CONFIGURATION, 0x0241);
BK1080_WriteRegister(BK1080_REG_02_POWER_CONFIGURATION, (1u << 9) | (1u << 6) | (1u << 0)); // 0x0241); // 0000 0010 0100 0001
GPIO_SetBit(&GPIOB->DATA, GPIOB_PIN_BK1080);
}
}
@ -101,18 +144,42 @@ void BK1080_WriteRegister(BK1080_Register_t Register, uint16_t Value)
void BK1080_Mute(bool Mute)
{
BK1080_WriteRegister(BK1080_REG_02_POWER_CONFIGURATION, Mute ? 0x4201 : 0x0201);
uint16_t val = (1u << 9) | (1u << 0);
if (Mute)
val |= 1u << 14;
BK1080_WriteRegister(BK1080_REG_02_POWER_CONFIGURATION, val);
}
void BK1080_SetFrequency(uint16_t Frequency)
{
BK1080_WriteRegister(BK1080_REG_03_CHANNEL, Frequency - 760);
#if defined(ENABLE_FMRADIO_64_76)
const uint16_t channel = Frequency - 640; // 100kHz channel spacing
#elif defined(ENABLE_FMRADIO_76_90)
const uint16_t channel = Frequency - 760; // 100kHz channel spacing
#elif defined(ENABLE_FMRADIO_76_108)
const uint16_t channel = Frequency - 760; // 100kHz channel spacing
#elif defined(ENABLE_FMRADIO_875_108)
// const uint16_t channel = Frequency - 760;
const uint16_t channel = Frequency - 875; // 100kHz channel spacing
#endif
BK1080_WriteRegister(BK1080_REG_03_CHANNEL, channel);
// SYSTEM_DelayMs(10);
BK1080_WriteRegister(BK1080_REG_03_CHANNEL, (Frequency - 760) | (1u << 15));
BK1080_WriteRegister(BK1080_REG_03_CHANNEL, channel | (1u << 15));
}
void BK1080_GetFrequencyDeviation(uint16_t Frequency)
uint16_t BK1080_GetFrequencyDeviation(uint16_t Frequency)
{
BK1080_BaseFrequency = Frequency;
BK1080_FrequencyDeviation = BK1080_ReadRegister(BK1080_REG_07) / 16;
BK1080_FrequencyDeviation = BK1080_ReadRegister(BK1080_REG_07) >> 4;
return BK1080_FrequencyDeviation;
}