mirror of
https://github.com/DualTachyon/uv-k5-firmware.git
synced 2025-02-17 17:50:43 +08:00
Added BK4819 initialisation.
This commit is contained in:
parent
0d1e0a084c
commit
7659792c4a
1
Makefile
1
Makefile
@ -18,6 +18,7 @@ OBJS += $(BLOB_OVERLAY).o
|
||||
# Drivers
|
||||
OBJS += driver/adc.o
|
||||
OBJS += driver/bk1080.o
|
||||
OBJS += driver/bk4819.o
|
||||
OBJS += driver/crc.o
|
||||
OBJS += driver/eeprom.o
|
||||
OBJS += driver/flash.o
|
||||
|
74
driver/bk4819-regs.h
Executable file
74
driver/bk4819-regs.h
Executable file
@ -0,0 +1,74 @@
|
||||
#ifndef BK4819_REGS_H
|
||||
#define BK4819_REGS_H
|
||||
|
||||
enum BK4819_REGISTER_t {
|
||||
REG_00 = 0x00U,
|
||||
REG_06 = 0x06U,
|
||||
REG_07_CTC_FREQUENCY_CDCSS_BAUD_RATE = 0x07U,
|
||||
REG_08_CDCSS_CALL_SYMBOL_NUMBER_AND_COEFFICIENT = 0x08U,
|
||||
REG_09 = 0x09U,
|
||||
REG_0B_FSK_STATUS = 0x0BU,
|
||||
REG_0C_CDCSS_CTCSS_STATUS_VOX_SQ_INTR_INDICATOR = 0x0CU,
|
||||
REG_0D_FREQUENCY_SCAN_INDICATOR_FREQ_HIGH = 0x0DU,
|
||||
REG_0E_FREQUENCY_SCAN_FREQ_LOW = 0x0EU,
|
||||
REG_10 = 0x10U,
|
||||
REG_11 = 0x11U,
|
||||
REG_12 = 0x12U,
|
||||
REG_13 = 0x13U,
|
||||
REG_14 = 0x14U,
|
||||
REG_19 = 0x19U,
|
||||
REG_1F = 0x1FU,
|
||||
REG_20 = 0x20U,
|
||||
REG_24_DTMF_SELCALL_CONFIG = 0x24U,
|
||||
REG_28_EXPANDER_CONFIG = 0x28U,
|
||||
REG_29_COMPRESS_CONFIG = 0x29U,
|
||||
REG_2B_AF_FILTER_DISABLE = 0x2BU,
|
||||
REG_30_VARIOUS_ENABLE_BITS = 0x30U,
|
||||
REG_31_ENABLE_COMPANDER_VOX_SCRAMBLE = 0x31U,
|
||||
REG_32_FREQUENCY_SCAN = 0x32U,
|
||||
REG_33 = 0x33U,
|
||||
REG_36_POWER_AMPLIFIER_BIAS_AND_GAIN = 0x36U,
|
||||
REG_37_VOLTATE_LDO_AND_MISC_ENABLE = 0x37U,
|
||||
REG_38_FREQUENCY_LOW = 0x38U,
|
||||
REG_39_FREQUENCY_HIGH = 0x39U,
|
||||
REG_3A_RSSI_THRESHOLD_FOR_SQ1_SQ0 = 0x3AU,
|
||||
REG_3B_XTAL_FREQ_LOW = 0x3BU,
|
||||
REG_3C_XTAL_FREQ_HIGH = 0x3CU,
|
||||
REG_3E = 0x3EU,
|
||||
REG_3F_INTERRUPT_ENABLE = 0x3FU,
|
||||
REG_43_RF_AFT_LPF2_FILTER_BANDWIDTH = 0x43U,
|
||||
REG_46_VOICE_AMPLITUDE_THRESHOLD_VOX1 = 0x46U,
|
||||
REG_48_AF_RF_GAIN_DAC_GAIN = 0x48U,
|
||||
REG_49 = 0x49U,
|
||||
REG_4D_GLITCH_THR_SQ0 = 0x4DU,
|
||||
REG_4E_SQ1_DELAY_SQ0_DELAY_GLITCH_THR_SQ1 = 0x4EU,
|
||||
REG_4F_EXNOISE_THR_SQ0_EXNOISE_THR_SQ1 = 0x4FU,
|
||||
REG_51_CTCSS_CDCSS_CONFIG = 0x51U,
|
||||
REG_58_FSK_CONFIG_BITS = 0x58U,
|
||||
REG_59_VARIOUS_FSK_ENABLE_AND_CONFIG_BITS = 0x59U,
|
||||
REG_5A_FSK_SYNC_BYTES_0_1 = 0x5AU,
|
||||
REG_5B_FSK_SYNC_BYTES_2_3 = 0x5BU,
|
||||
REG_5C_CRC_ENABLE_AND_UNKNOWN_BITS = 0x5CU,
|
||||
REG_5D_FSK_DATA_LENGTH = 0x5DU,
|
||||
REG_5F_FSK_WORD_INPUT_OUTPUT = 0x5FU,
|
||||
REG_64_VOXAMP = 0x64U,
|
||||
REG_67_RSSI = 0x67U,
|
||||
REG_68_CTCSS_SCAN_INDICATOR_FREQ = 0x68U,
|
||||
REG_69_CDCSS_SCAN_INDICATOR_FREQ_HIGH = 0x69U,
|
||||
REG_6A_CDCSS_SCAN_FREQ_LOW = 0x6AU,
|
||||
REG_6F_AF_TX_RX_INPUT_AMPLITUDE = 0x6FU,
|
||||
REG_70_TONE1_CONFIG = 0x70U,
|
||||
REG_71_TONE1_SCRAMBLE_FREQ_CONTROL_WORD = 0x71U,
|
||||
REG_72_TONE2_FSK_FREQUENCY_CONTROL_WORD = 0x72U,
|
||||
REG_79_VOX1_DETECTION_INTERVAL_TIME_VOICE_AMPLITUDE_THRESHOLD_VOX0 = 0x79U,
|
||||
REG_7A_VOX0_DETECTION_DELAY = 0x7AU,
|
||||
REG_7B = 0x7BU,
|
||||
REG_7C = 0x7CU,
|
||||
REG_7D_MIC_SENSITIVITY_TUNING = 0x7DU,
|
||||
REG_7E_DC_FILTER_BANDWIDTH_AND_AGC_FIX = 0x7EU,
|
||||
};
|
||||
|
||||
typedef enum BK4819_REGISTER_t BK4819_REGISTER_t;
|
||||
|
||||
#endif
|
||||
|
129
driver/bk4819.c
Executable file
129
driver/bk4819.c
Executable file
@ -0,0 +1,129 @@
|
||||
#include "bk4819.h"
|
||||
#include "bsp/dp32g030/gpio.h"
|
||||
#include "driver/gpio.h"
|
||||
#include "driver/systick.h"
|
||||
|
||||
uint16_t gBK4819_GpioOutState;
|
||||
|
||||
void BK4819_Init(void)
|
||||
{
|
||||
GPIO_SetBit(&GPIOC->DATA, 0);
|
||||
GPIO_SetBit(&GPIOC->DATA, 1);
|
||||
GPIO_SetBit(&GPIOC->DATA, 2);
|
||||
|
||||
BK4819_WriteRegister(REG_00, 0x8000);
|
||||
BK4819_WriteRegister(REG_00, 0x0000);
|
||||
BK4819_WriteRegister(REG_37_VOLTATE_LDO_AND_MISC_ENABLE, 0x1D0F);
|
||||
BK4819_WriteRegister(REG_36_POWER_AMPLIFIER_BIAS_AND_GAIN, 0x0022);
|
||||
BK4819_SetAGC(0);
|
||||
BK4819_WriteRegister(REG_19, 0x1041);
|
||||
BK4819_WriteRegister(REG_7D_MIC_SENSITIVITY_TUNING, 0xE940);
|
||||
BK4819_WriteRegister(REG_48_AF_RF_GAIN_DAC_GAIN, 0xB3A8);
|
||||
BK4819_WriteRegister(REG_09, 0x006F);
|
||||
BK4819_WriteRegister(REG_09, 0x106B);
|
||||
BK4819_WriteRegister(REG_09, 0x2067);
|
||||
BK4819_WriteRegister(REG_09, 0x3062);
|
||||
BK4819_WriteRegister(REG_09, 0x4050);
|
||||
BK4819_WriteRegister(REG_09, 0x5047);
|
||||
BK4819_WriteRegister(REG_09, 0x603A);
|
||||
BK4819_WriteRegister(REG_09, 0x702C);
|
||||
BK4819_WriteRegister(REG_09, 0x8041);
|
||||
BK4819_WriteRegister(REG_09, 0x9037);
|
||||
BK4819_WriteRegister(REG_09, 0xA025);
|
||||
BK4819_WriteRegister(REG_09, 0xB017);
|
||||
BK4819_WriteRegister(REG_09, 0xC0E4);
|
||||
BK4819_WriteRegister(REG_09, 0xD0CB);
|
||||
BK4819_WriteRegister(REG_09, 0xE0B5);
|
||||
BK4819_WriteRegister(REG_09, 0xF09F);
|
||||
BK4819_WriteRegister(REG_1F, 0x5454);
|
||||
BK4819_WriteRegister(REG_3E, 0xA037);
|
||||
gBK4819_GpioOutState = 0x9000;
|
||||
BK4819_WriteRegister(REG_33, 0x9000);
|
||||
BK4819_WriteRegister(REG_3F_INTERRUPT_ENABLE, 0);
|
||||
}
|
||||
|
||||
void BK4819_WriteRegister(BK4819_REGISTER_t Register, uint16_t Data)
|
||||
{
|
||||
GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_BK4819_0);
|
||||
GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_BK4819_1);
|
||||
SYSTICK_DelayUs(1);
|
||||
GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_BK4819_0);
|
||||
BK4819_WriteU8(Register);
|
||||
SYSTICK_DelayUs(1);
|
||||
BK4819_WriteU16(Data);
|
||||
SYSTICK_DelayUs(1);
|
||||
GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_BK4819_0);
|
||||
SYSTICK_DelayUs(1);
|
||||
GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_BK4819_1);
|
||||
GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_BK4819_2);
|
||||
}
|
||||
|
||||
void BK4819_WriteU8(uint8_t Data)
|
||||
{
|
||||
uint8_t i;
|
||||
|
||||
GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_BK4819_1);
|
||||
for (i = 0; i < 8; i++) {
|
||||
if ((Data & 0x80U) == 0) {
|
||||
GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_BK4819_2);
|
||||
} else {
|
||||
GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_BK4819_2);
|
||||
}
|
||||
SYSTICK_DelayUs(1);
|
||||
GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_BK4819_1);
|
||||
SYSTICK_DelayUs(1);
|
||||
Data <<= 1;
|
||||
GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_BK4819_1);
|
||||
SYSTICK_DelayUs(1);
|
||||
}
|
||||
}
|
||||
|
||||
void BK4819_WriteU16(uint16_t Data)
|
||||
{
|
||||
uint8_t i;
|
||||
|
||||
GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_BK4819_1);
|
||||
for (i = 0; i < 16; i++) {
|
||||
if ((Data & 0x8000U) == 0U) {
|
||||
GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_BK4819_2);
|
||||
} else {
|
||||
GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_BK4819_2);
|
||||
}
|
||||
SYSTICK_DelayUs(1);
|
||||
GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_BK4819_1);
|
||||
Data <<= 1;
|
||||
SYSTICK_DelayUs(1);
|
||||
GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_BK4819_1);
|
||||
SYSTICK_DelayUs(1);
|
||||
}
|
||||
}
|
||||
|
||||
void BK4819_SetAGC(uint8_t Value)
|
||||
{
|
||||
if (Value == 0) {
|
||||
BK4819_WriteRegister(REG_13, 0x03BE);
|
||||
BK4819_WriteRegister(REG_12, 0x037B);
|
||||
BK4819_WriteRegister(REG_11, 0x027B);
|
||||
BK4819_WriteRegister(REG_10, 0x007A);
|
||||
BK4819_WriteRegister(REG_14, 0x0019);
|
||||
BK4819_WriteRegister(REG_49, 0x2A38);
|
||||
BK4819_WriteRegister(REG_7B, 0x8420);
|
||||
} else if (Value == 1) {
|
||||
uint8_t i;
|
||||
|
||||
BK4819_WriteRegister(REG_13, 0x03BE);
|
||||
BK4819_WriteRegister(REG_12, 0x037C);
|
||||
BK4819_WriteRegister(REG_11, 0x027B);
|
||||
BK4819_WriteRegister(REG_10, 0x007A);
|
||||
BK4819_WriteRegister(REG_14, 0x0018);
|
||||
BK4819_WriteRegister(REG_49, 0x2A38);
|
||||
BK4819_WriteRegister(REG_7B, 0x318C);
|
||||
BK4819_WriteRegister(REG_7C, 0x595E);
|
||||
BK4819_WriteRegister(REG_20, 0x8DEF);
|
||||
for (i = 0; i < 8; i++) {
|
||||
// Bug? The bit 0x2000 below overwrites the (i << 13)
|
||||
BK4819_WriteRegister(REG_06, ((i << 13) | 0x2500U) + 0x36U);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
15
driver/bk4819.h
Executable file
15
driver/bk4819.h
Executable file
@ -0,0 +1,15 @@
|
||||
#ifndef DRIVER_BK4819_h
|
||||
#define DRIVER_BK4819_h
|
||||
|
||||
#include <stdint.h>
|
||||
#include "driver/bk4819-regs.h"
|
||||
|
||||
void BK4819_Init(void);
|
||||
void BK4819_WriteRegister(BK4819_REGISTER_t Register, uint16_t Data);
|
||||
void BK4819_WriteU8(uint8_t Data);
|
||||
void BK4819_WriteU16(uint16_t Data);
|
||||
|
||||
void BK4819_SetAGC(uint8_t Value);
|
||||
|
||||
#endif
|
||||
|
9
main.c
9
main.c
@ -22,6 +22,7 @@
|
||||
#include "bsp/dp32g030/syscon.h"
|
||||
#include "board.h"
|
||||
#include "driver/crc.h"
|
||||
#include "driver/bk4819.h"
|
||||
#include "driver/eeprom.h"
|
||||
#include "driver/flash.h"
|
||||
#include "driver/gpio.h"
|
||||
@ -79,6 +80,14 @@ void Main(void)
|
||||
UART_Init();
|
||||
UART_Send(Version, sizeof(Version));
|
||||
|
||||
// Not implementing authentic device checks
|
||||
|
||||
// TODO: EEPROM Init
|
||||
|
||||
BK4819_Init();
|
||||
|
||||
// Below this line is development/test area not conforming to the original firmware
|
||||
|
||||
// Show some signs of life
|
||||
FLASHLIGHT_Init();
|
||||
FLASHLIGHT_TurnOn();
|
||||
|
Loading…
Reference in New Issue
Block a user