From 1bc5316248ec8b8e7d720d351f3f3924f21d8698 Mon Sep 17 00:00:00 2001 From: muzkr Date: Thu, 23 Oct 2025 19:57:44 +0800 Subject: [PATCH] Port drivers and eliminate build errors --- App/CMakeLists.txt | 10 ++-- App/app/action.c | 1 - App/app/aircopy.c | 4 +- App/app/app.c | 15 +++-- App/app/dtmf.c | 1 - App/app/flashlight.c | 7 +-- App/app/fm.c | 1 - App/app/menu.c | 1 - App/audio.c | 1 - App/audio.h | 1 - App/driver/backlight.c | 1 + App/driver/bk1080.c | 5 +- App/driver/bk4819.c | 118 +++++++++++++++++++++++++------------ App/driver/gpio.h | 2 +- App/driver/i2c.c | 108 ++++++++++++++++++++------------- App/driver/storage.c | 31 ++++++++++ App/driver/uart.c | 27 +++++---- App/functions.c | 1 - App/helper/boot.c | 3 +- App/main.c | 8 +-- App/radio.c | 1 - App/scheduler.c | 5 +- CMakeLists.txt | 31 +++++----- CMakePresets.json | 2 +- Core/Src/system_py32f071.c | 2 +- 25 files changed, 235 insertions(+), 152 deletions(-) create mode 100644 App/driver/storage.c diff --git a/App/CMakeLists.txt b/App/CMakeLists.txt index 2b2d1e6d..7f4220c5 100644 --- a/App/CMakeLists.txt +++ b/App/CMakeLists.txt @@ -7,14 +7,15 @@ target_compile_definitions(App INTERFACE PRINTF_INCLUDE_CONFIG_H) target_sources(App INTERFACE # Drivers # driver/adc.c - # driver/backlight.c - # driver/bk4819.c + driver/backlight.c + driver/bk4819.c # driver/eeprom.c + driver/storage.c driver/gpio.c - # driver/i2c.c + driver/i2c.c driver/keyboard.c # driver/spi.c - # driver/st7565.c + driver/st7565.c driver/system.c driver/systick.c # Main @@ -26,6 +27,7 @@ target_sources(App INTERFACE app/generic.c app/main.c app/menu.c + app/scanner.c audio.c bitmaps.c board.c diff --git a/App/app/action.c b/App/app/action.c index 68b3bbaa..d3e7cea3 100644 --- a/App/app/action.c +++ b/App/app/action.c @@ -30,7 +30,6 @@ #endif #include "app/scanner.h" #include "audio.h" -#include "bsp/dp32g030/gpio.h" #ifdef ENABLE_FMRADIO #include "driver/bk1080.h" #endif diff --git a/App/app/aircopy.c b/App/app/aircopy.c index 99ca635a..aa0a85bf 100644 --- a/App/app/aircopy.c +++ b/App/app/aircopy.c @@ -119,8 +119,8 @@ void AIRCOPY_StorePacket(void) g_FSK_Buffer[i + 1] ^= Obfuscation[i % 8]; } - uint16_t CRC = CRC_Calculate(&g_FSK_Buffer[1], 2 + 64); - if (g_FSK_Buffer[34] != CRC) { + uint16_t Crc = CRC_Calculate(&g_FSK_Buffer[1], 2 + 64); + if (g_FSK_Buffer[34] != Crc) { gErrorsDuringAirCopy++; return; } diff --git a/App/app/app.c b/App/app/app.c index a341f2c1..1488e1a8 100644 --- a/App/app/app.c +++ b/App/app/app.c @@ -43,7 +43,6 @@ #include "py32f0xx.h" #include "audio.h" #include "board.h" -#include "bsp/dp32g030/gpio.h" #ifdef ENABLE_FEAT_F4HWN_SLEEP #include "bsp/dp32g030/pwmplus.h" #endif @@ -906,7 +905,7 @@ void APP_Update(void) if (gEeprom.BACKLIGHT_TIME == 0) { if (gBlinkCounter == 0 || gBlinkCounter == 250) { - GPIO_FlipBit(&GPIOC->DATA, GPIOC_PIN_FLASHLIGHT); + GPIO_TogglePin(GPIO_PIN_FLASHLIGHT); } } else @@ -1176,7 +1175,7 @@ static void CheckKeys(void) #ifdef ENABLE_FEAT_F4HWN if (gSetting_set_ptt_session) { - if (!GPIO_CheckBit(&GPIOC->DATA, GPIOC_PIN_PTT) && !SerialConfigInProgress() && gPttOnePushCounter == 0) + if (GPIO_IsPttPressed() && !SerialConfigInProgress() && gPttOnePushCounter == 0) { // PTT pressed if (++gPttDebounceCounter >= 3) // 30ms { // start transmitting @@ -1187,7 +1186,7 @@ static void CheckKeys(void) ProcessKey(KEY_PTT, true, false); } } - else if ((GPIO_CheckBit(&GPIOC->DATA, GPIOC_PIN_PTT) || SerialConfigInProgress()) && gPttOnePushCounter == 1) + else if ((!GPIO_IsPttPressed() || SerialConfigInProgress()) && gPttOnePushCounter == 1) { // PTT released or serial comms config in progress if (++gPttDebounceCounter >= 3 || SerialConfigInProgress()) // 30ms @@ -1195,14 +1194,14 @@ static void CheckKeys(void) gPttOnePushCounter = 2; } } - else if (!GPIO_CheckBit(&GPIOC->DATA, GPIOC_PIN_PTT) && !SerialConfigInProgress() && gPttOnePushCounter == 2) + else if (GPIO_IsPttPressed() && !SerialConfigInProgress() && gPttOnePushCounter == 2) { // PTT pressed again if (++gPttDebounceCounter >= 3 || SerialConfigInProgress()) // 30ms { // stop transmitting gPttOnePushCounter = 3; } } - else if ((GPIO_CheckBit(&GPIOC->DATA, GPIOC_PIN_PTT) || SerialConfigInProgress()) && gPttOnePushCounter == 3) + else if ((!GPIO_IsPttPressed() || SerialConfigInProgress()) && gPttOnePushCounter == 3) { // PTT released or serial comms config in progress if (++gPttDebounceCounter >= 3 || SerialConfigInProgress()) // 30ms { // stop transmitting @@ -1225,7 +1224,7 @@ static void CheckKeys(void) { if (gPttIsPressed) { - if (GPIO_CheckBit(&GPIOC->DATA, GPIOC_PIN_PTT) || SerialConfigInProgress()) + if (!GPIO_IsPttPressed() || SerialConfigInProgress()) { // PTT released or serial comms config in progress if (++gPttDebounceCounter >= 3 || SerialConfigInProgress()) // 30ms { // stop transmitting @@ -1241,7 +1240,7 @@ static void CheckKeys(void) else gPttDebounceCounter = 0; } - else if (!GPIO_CheckBit(&GPIOC->DATA, GPIOC_PIN_PTT) && !SerialConfigInProgress()) + else if (GPIO_IsPttPressed() && !SerialConfigInProgress()) { // PTT pressed if (++gPttDebounceCounter >= 3) // 30ms { // start transmitting diff --git a/App/app/dtmf.c b/App/app/dtmf.c index 91b5868e..70d5fe6f 100644 --- a/App/app/dtmf.c +++ b/App/app/dtmf.c @@ -22,7 +22,6 @@ #include "app/fm.h" #endif #include "app/scanner.h" -#include "bsp/dp32g030/gpio.h" #include "audio.h" #include "driver/bk4819.h" #include "driver/eeprom.h" diff --git a/App/app/flashlight.c b/App/app/flashlight.c index 589025f1..f72ea081 100644 --- a/App/app/flashlight.c +++ b/App/app/flashlight.c @@ -4,10 +4,9 @@ #include "app/flashlight.h" #include -#define FLASHLIGHT_PIN GPIO_PIN_MASK(GPIOC_PIN_FLASHLIGHT) -static inline void Flashlight_TurnOn(){ LL_GPIO_SetOutputPin(GPIOC, FLASHLIGHT_PIN); } -static inline void Flashlight_TurnOff(){ LL_GPIO_ResetOutputPin(GPIOC, FLASHLIGHT_PIN); } -static inline void Flashlight_Toggle(){ LL_GPIO_TogglePin(GPIOC, FLASHLIGHT_PIN); } +static inline void Flashlight_TurnOn(){ GPIO_SetOutputPin(GPIO_PIN_FLASHLIGHT); } +static inline void Flashlight_TurnOff(){ GPIO_ResetOutputPin(GPIO_PIN_FLASHLIGHT); } +static inline void Flashlight_Toggle(){ GPIO_TogglePin(GPIO_PIN_FLASHLIGHT); } #if !defined(ENABLE_FEAT_F4HWN) || defined(ENABLE_FEAT_F4HWN_RESCUE_OPS) enum FlashlightMode_t gFlashLightState; diff --git a/App/app/fm.c b/App/app/fm.c index 353f3f26..acf302e0 100644 --- a/App/app/fm.c +++ b/App/app/fm.c @@ -22,7 +22,6 @@ #include "app/fm.h" #include "app/generic.h" #include "audio.h" -#include "bsp/dp32g030/gpio.h" #include "driver/bk1080.h" #include "driver/eeprom.h" #include "driver/gpio.h" diff --git a/App/app/menu.c b/App/app/menu.c index 0dc63103..74325a91 100644 --- a/App/app/menu.c +++ b/App/app/menu.c @@ -25,7 +25,6 @@ #include "app/scanner.h" #include "audio.h" #include "board.h" -#include "bsp/dp32g030/gpio.h" #include "driver/backlight.h" #include "driver/bk4819.h" #include "driver/eeprom.h" diff --git a/App/audio.c b/App/audio.c index 8392c083..adfadb7e 100644 --- a/App/audio.c +++ b/App/audio.c @@ -18,7 +18,6 @@ #include "app/fm.h" #endif #include "audio.h" -#include "bsp/dp32g030/gpio.h" #ifdef ENABLE_FMRADIO #include "driver/bk1080.h" #endif diff --git a/App/audio.h b/App/audio.h index 4bee066f..64ec8f5e 100644 --- a/App/audio.h +++ b/App/audio.h @@ -20,7 +20,6 @@ #include #include -#include "bsp/dp32g030/gpio.h" #include "driver/gpio.h" enum BEEP_Type_t diff --git a/App/driver/backlight.c b/App/driver/backlight.c index 7a65493f..11d3a75a 100644 --- a/App/driver/backlight.c +++ b/App/driver/backlight.c @@ -137,6 +137,7 @@ void BACKLIGHT_TurnOn(void) void BACKLIGHT_TurnOff() { + GPIO_TurnOffBacklight(); #ifdef ENABLE_BLMIN_TMP_OFF register uint8_t tmp; diff --git a/App/driver/bk1080.c b/App/driver/bk1080.c index 151bea6e..d8ae2643 100644 --- a/App/driver/bk1080.c +++ b/App/driver/bk1080.c @@ -14,7 +14,6 @@ * limitations under the License. */ -#include "bsp/dp32g030/gpio.h" #include "bk1080.h" #include "driver/gpio.h" #include "driver/i2c.h" @@ -49,7 +48,7 @@ void BK1080_Init(uint16_t freq, uint8_t band/*, uint8_t space*/) unsigned int i; if (freq) { - GPIO_ClearBit(&GPIOB->DATA, GPIOB_PIN_BK1080); + // GPIO_ClearBit(&GPIOB->DATA, GPIOB_PIN_BK1080); if (!gIsInitBK1080) { for (i = 0; i < ARRAY_SIZE(BK1080_RegisterTable); i++) @@ -77,7 +76,7 @@ void BK1080_Init(uint16_t freq, uint8_t band/*, uint8_t space*/) } else { BK1080_WriteRegister(BK1080_REG_02_POWER_CONFIGURATION, 0x0241); - GPIO_SetBit(&GPIOB->DATA, GPIOB_PIN_BK1080); + // GPIO_SetBit(&GPIOB->DATA, GPIOB_PIN_BK1080); } } diff --git a/App/driver/bk4819.c b/App/driver/bk4819.c index ae3b8db8..35ddd399 100644 --- a/App/driver/bk4819.c +++ b/App/driver/bk4819.c @@ -19,20 +19,22 @@ #include "settings.h" -#include "../audio.h" -#include "../bsp/dp32g030/gpio.h" -#include "../bsp/dp32g030/portcon.h" +#include "audio.h" -#include "bk4819.h" -#include "gpio.h" -#include "system.h" -#include "systick.h" +#include "driver/bk4819.h" +#include "driver/gpio.h" +#include "driver/system.h" +#include "driver/systick.h" #ifndef ARRAY_SIZE #define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0])) #endif +#define PIN_CSN GPIO_MAKE_PIN(GPIOF, LL_GPIO_PIN_9) +#define PIN_SCL GPIO_MAKE_PIN(GPIOB, LL_GPIO_PIN_8) +#define PIN_SDA GPIO_MAKE_PIN(GPIOB, LL_GPIO_PIN_9) + static const uint16_t FSK_RogerTable[7] = {0xF1A2, 0x7446, 0x61A4, 0x6544, 0x4E8A, 0xE044, 0xEA84}; static const uint8_t DTMF_TONE1_GAIN = 65; @@ -42,6 +44,46 @@ static uint16_t gBK4819_GpioOutState; bool gRxIdleMode; +static inline void CS_Assert() +{ + GPIO_ResetOutputPin(PIN_CSN); +} + +static inline void CS_Release() +{ + GPIO_SetOutputPin(PIN_CSN); +} + +static inline void SCL_Reset() +{ + GPIO_ResetOutputPin(PIN_SCL); +} + +static inline void SCL_Set() +{ + GPIO_SetOutputPin(PIN_SCL); +} + +static inline void SDA_Reset() +{ + GPIO_ResetOutputPin(PIN_SDA); +} + +static inline void SDA_Set() +{ + GPIO_SetOutputPin(PIN_SDA); +} + +static inline void SDA_SetDir(bool Output) +{ + LL_GPIO_SetPinMode(GPIO_PORT(PIN_SDA), GPIO_PIN_MASK(PIN_SDA), Output ? LL_GPIO_MODE_OUTPUT : LL_GPIO_MODE_INPUT); +} + +static inline uint32_t SDA_ReadInput() +{ + return GPIO_IsInputPinSet(PIN_SDA) ? 1 : 0; +} + __inline uint16_t scale_freq(const uint16_t freq) { // return (((uint32_t)freq * 1032444u) + 50000u) / 100000u; // with rounding @@ -50,9 +92,9 @@ __inline uint16_t scale_freq(const uint16_t freq) void BK4819_Init(void) { - GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_BK4819_SCN); - GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_BK4819_SCL); - GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_BK4819_SDA); + CS_Release(); + SCL_Set(); + SDA_Set(); BK4819_WriteRegister(BK4819_REG_00, 0x8000); BK4819_WriteRegister(BK4819_REG_00, 0x0000); @@ -129,21 +171,19 @@ static uint16_t BK4819_ReadU16(void) unsigned int i; uint16_t Value; - PORTCON_PORTC_IE = (PORTCON_PORTC_IE & ~PORTCON_PORTC_IE_C2_MASK) | PORTCON_PORTC_IE_C2_BITS_ENABLE; - GPIOC->DIR = (GPIOC->DIR & ~GPIO_DIR_2_MASK) | GPIO_DIR_2_BITS_INPUT; + SDA_SetDir(false); SYSTICK_DelayUs(1); Value = 0; for (i = 0; i < 16; i++) { Value <<= 1; - Value |= GPIO_CheckBit(&GPIOC->DATA, GPIOC_PIN_BK4819_SDA); - GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_BK4819_SCL); + Value |= SDA_ReadInput(); + SCL_Set(); SYSTICK_DelayUs(1); - GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_BK4819_SCL); + SCL_Reset(); SYSTICK_DelayUs(1); } - PORTCON_PORTC_IE = (PORTCON_PORTC_IE & ~PORTCON_PORTC_IE_C2_MASK) | PORTCON_PORTC_IE_C2_BITS_DISABLE; - GPIOC->DIR = (GPIOC->DIR & ~GPIO_DIR_2_MASK) | GPIO_DIR_2_BITS_OUTPUT; + SDA_SetDir(true); return Value; } @@ -152,32 +192,32 @@ uint16_t BK4819_ReadRegister(BK4819_REGISTER_t Register) { uint16_t Value; - GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_BK4819_SCN); - GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_BK4819_SCL); + CS_Release(); + SCL_Reset(); SYSTICK_DelayUs(1); - GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_BK4819_SCN); + CS_Assert(); BK4819_WriteU8(Register | 0x80); Value = BK4819_ReadU16(); - GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_BK4819_SCN); + CS_Release(); SYSTICK_DelayUs(1); - GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_BK4819_SCL); - GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_BK4819_SDA); + SCL_Set(); + SDA_Set(); return Value; } void BK4819_WriteRegister(BK4819_REGISTER_t Register, uint16_t Data) { - GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_BK4819_SCN); - GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_BK4819_SCL); + CS_Release(); + SCL_Reset(); SYSTICK_DelayUs(1); - GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_BK4819_SCN); + CS_Assert(); BK4819_WriteU8(Register); SYSTICK_DelayUs(1); @@ -186,33 +226,33 @@ void BK4819_WriteRegister(BK4819_REGISTER_t Register, uint16_t Data) SYSTICK_DelayUs(1); - GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_BK4819_SCN); + CS_Release(); SYSTICK_DelayUs(1); - GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_BK4819_SCL); - GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_BK4819_SDA); + SCL_Set(); + SDA_Set(); } void BK4819_WriteU8(uint8_t Data) { unsigned int i; - GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_BK4819_SCL); + SCL_Reset(); for (i = 0; i < 8; i++) { if ((Data & 0x80) == 0) - GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_BK4819_SDA); + SDA_Reset(); else - GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_BK4819_SDA); + SDA_Set(); SYSTICK_DelayUs(1); - GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_BK4819_SCL); + SCL_Set(); SYSTICK_DelayUs(1); Data <<= 1; - GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_BK4819_SCL); + SCL_Reset(); SYSTICK_DelayUs(1); } } @@ -221,21 +261,21 @@ void BK4819_WriteU16(uint16_t Data) { unsigned int i; - GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_BK4819_SCL); + SCL_Reset(); for (i = 0; i < 16; i++) { if ((Data & 0x8000) == 0) - GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_BK4819_SDA); + SDA_Reset(); else - GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_BK4819_SDA); + SDA_Set(); SYSTICK_DelayUs(1); - GPIO_SetBit(&GPIOC->DATA, GPIOC_PIN_BK4819_SCL); + SCL_Set(); Data <<= 1; SYSTICK_DelayUs(1); - GPIO_ClearBit(&GPIOC->DATA, GPIOC_PIN_BK4819_SCL); + SCL_Reset(); SYSTICK_DelayUs(1); } } diff --git a/App/driver/gpio.h b/App/driver/gpio.h index be6a539c..8629098f 100644 --- a/App/driver/gpio.h +++ b/App/driver/gpio.h @@ -23,7 +23,7 @@ #include "py32f071_ll_gpio.h" #define GPIO_MAKE_PIN(Port, PinMask) ((uint32_t)((((uint32_t)(Port)) << 16) | (0xffff & (PinMask)))) -#define GPIO_PORT(Pin) ((GPIO_TypeDef *)((Pin) >> 16)) +#define GPIO_PORT(Pin) ((GPIO_TypeDef *)(IOPORT_BASE + ((Pin) >> 16))) #define GPIO_PIN_MASK(Pin) (0xffff & (Pin)) enum GPIO_PINS diff --git a/App/driver/i2c.c b/App/driver/i2c.c index 9b80c239..2e3996c5 100644 --- a/App/driver/i2c.c +++ b/App/driver/i2c.c @@ -1,4 +1,5 @@ -/* Copyright 2023 Dual Tachyon +/* Copyright 2025 muzkr https://github.com/muzkr + * Copyright 2023 Dual Tachyon * https://github.com/DualTachyon * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -14,33 +15,64 @@ * limitations under the License. */ -#include "bsp/dp32g030/gpio.h" -#include "bsp/dp32g030/portcon.h" #include "driver/gpio.h" #include "driver/i2c.h" #include "driver/systick.h" +#define PIN_SCL GPIO_MAKE_PIN(GPIOF, LL_GPIO_PIN_5) +#define PIN_SDA GPIO_MAKE_PIN(GPIOF, LL_GPIO_PIN_6) + +static inline void SCL_Set() +{ + GPIO_SetOutputPin(PIN_SCL); +} + +static inline void SCL_Reset() +{ + GPIO_ResetOutputPin(PIN_SCL); +} + +static inline void SDA_Set() +{ + GPIO_SetOutputPin(PIN_SDA); +} + +static inline void SDA_Reset() +{ + GPIO_ResetOutputPin(PIN_SDA); +} + +static inline void SDA_SetDir(bool Output) +{ + LL_GPIO_SetPinMode(GPIO_PORT(PIN_SDA), GPIO_PIN_MASK(PIN_SDA), Output ? LL_GPIO_MODE_OUTPUT : LL_GPIO_MODE_INPUT); +} + +static inline bool SDA_IsSet() +{ + return GPIO_IsInputPinSet(PIN_SDA); +} + void I2C_Start(void) { - GPIO_SetBit(&GPIOA->DATA, GPIOA_PIN_I2C_SDA); + SDA_Set(); SYSTICK_DelayUs(1); - GPIO_SetBit(&GPIOA->DATA, GPIOA_PIN_I2C_SCL); + SCL_Set(); SYSTICK_DelayUs(1); - GPIO_ClearBit(&GPIOA->DATA, GPIOA_PIN_I2C_SDA); + SDA_Reset(); SYSTICK_DelayUs(1); - GPIO_ClearBit(&GPIOA->DATA, GPIOA_PIN_I2C_SCL); + SCL_Reset(); SYSTICK_DelayUs(1); } void I2C_Stop(void) { - GPIO_ClearBit(&GPIOA->DATA, GPIOA_PIN_I2C_SDA); + SDA_Reset(); SYSTICK_DelayUs(1); - GPIO_ClearBit(&GPIOA->DATA, GPIOA_PIN_I2C_SCL); + SCL_Reset(); SYSTICK_DelayUs(1); - GPIO_SetBit(&GPIOA->DATA, GPIOA_PIN_I2C_SCL); + SCL_Set(); SYSTICK_DelayUs(1); - GPIO_SetBit(&GPIOA->DATA, GPIOA_PIN_I2C_SDA); + SDA_Set(); SYSTICK_DelayUs(1); } @@ -48,39 +80,35 @@ uint8_t I2C_Read(bool bFinal) { uint8_t i, Data; - PORTCON_PORTA_IE |= PORTCON_PORTA_IE_A11_BITS_ENABLE; - PORTCON_PORTA_OD &= ~PORTCON_PORTA_OD_A11_MASK; - GPIOA->DIR &= ~GPIO_DIR_11_MASK; + SDA_SetDir(false); Data = 0; for (i = 0; i < 8; i++) { - GPIO_ClearBit(&GPIOA->DATA, GPIOA_PIN_I2C_SCL); + SCL_Reset(); SYSTICK_DelayUs(1); - GPIO_SetBit(&GPIOA->DATA, GPIOA_PIN_I2C_SCL); + SCL_Set(); SYSTICK_DelayUs(1); Data <<= 1; SYSTICK_DelayUs(1); - if (GPIO_CheckBit(&GPIOA->DATA, GPIOA_PIN_I2C_SDA)) { + if (SDA_IsSet()) { Data |= 1U; } - GPIO_ClearBit(&GPIOA->DATA, GPIOA_PIN_I2C_SCL); + SCL_Reset(); SYSTICK_DelayUs(1); } - PORTCON_PORTA_IE &= ~PORTCON_PORTA_IE_A11_MASK; - PORTCON_PORTA_OD |= PORTCON_PORTA_OD_A11_BITS_ENABLE; - GPIOA->DIR |= GPIO_DIR_11_BITS_OUTPUT; - GPIO_ClearBit(&GPIOA->DATA, GPIOA_PIN_I2C_SCL); + SDA_SetDir(true); + SCL_Reset(); SYSTICK_DelayUs(1); if (bFinal) { - GPIO_SetBit(&GPIOA->DATA, GPIOA_PIN_I2C_SDA); + SDA_Set(); } else { - GPIO_ClearBit(&GPIOA->DATA, GPIOA_PIN_I2C_SDA); + SDA_Reset(); } SYSTICK_DelayUs(1); - GPIO_SetBit(&GPIOA->DATA, GPIOA_PIN_I2C_SCL); + SCL_Set(); SYSTICK_DelayUs(1); - GPIO_ClearBit(&GPIOA->DATA, GPIOA_PIN_I2C_SCL); + SCL_Reset(); SYSTICK_DelayUs(1); return Data; @@ -91,43 +119,39 @@ int I2C_Write(uint8_t Data) uint8_t i; int ret = -1; - GPIO_ClearBit(&GPIOA->DATA, GPIOA_PIN_I2C_SCL); + SCL_Reset(); SYSTICK_DelayUs(1); for (i = 0; i < 8; i++) { if ((Data & 0x80) == 0) { - GPIO_ClearBit(&GPIOA->DATA, GPIOA_PIN_I2C_SDA); + SDA_Reset(); } else { - GPIO_SetBit(&GPIOA->DATA, GPIOA_PIN_I2C_SDA); + SDA_Set(); } Data <<= 1; SYSTICK_DelayUs(1); - GPIO_SetBit(&GPIOA->DATA, GPIOA_PIN_I2C_SCL); + SCL_Set(); SYSTICK_DelayUs(1); - GPIO_ClearBit(&GPIOA->DATA, GPIOA_PIN_I2C_SCL); + SCL_Reset(); SYSTICK_DelayUs(1); } - PORTCON_PORTA_IE |= PORTCON_PORTA_IE_A11_BITS_ENABLE; - PORTCON_PORTA_OD &= ~PORTCON_PORTA_OD_A11_MASK; - GPIOA->DIR &= ~GPIO_DIR_11_MASK; - GPIO_SetBit(&GPIOA->DATA, GPIOA_PIN_I2C_SDA); + SDA_SetDir(false); + SDA_Set(); SYSTICK_DelayUs(1); - GPIO_SetBit(&GPIOA->DATA, GPIOA_PIN_I2C_SCL); + SCL_Set(); SYSTICK_DelayUs(1); for (i = 0; i < 255; i++) { - if (GPIO_CheckBit(&GPIOA->DATA, GPIOA_PIN_I2C_SDA) == 0) { + if (!SDA_IsSet()) { ret = 0; break; } } - GPIO_ClearBit(&GPIOA->DATA, GPIOA_PIN_I2C_SCL); + SCL_Reset(); SYSTICK_DelayUs(1); - PORTCON_PORTA_IE &= ~PORTCON_PORTA_IE_A11_MASK; - PORTCON_PORTA_OD |= PORTCON_PORTA_OD_A11_BITS_ENABLE; - GPIOA->DIR |= GPIO_DIR_11_BITS_OUTPUT; - GPIO_SetBit(&GPIOA->DATA, GPIOA_PIN_I2C_SDA); + SDA_SetDir(true); + SDA_Set(); return ret; } diff --git a/App/driver/storage.c b/App/driver/storage.c new file mode 100644 index 00000000..81a8d538 --- /dev/null +++ b/App/driver/storage.c @@ -0,0 +1,31 @@ +/* Copyright 2023 Dual Tachyon + * https://github.com/DualTachyon + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include + +#include "driver/eeprom.h" +#include "driver/system.h" + +void EEPROM_ReadBuffer(uint16_t Address, void *pBuffer, uint8_t Size) +{ + +} + +void EEPROM_WriteBuffer(uint16_t Address, const void *pBuffer) +{ + +} diff --git a/App/driver/uart.c b/App/driver/uart.c index 9a4597ee..e9ee7d33 100644 --- a/App/driver/uart.c +++ b/App/driver/uart.c @@ -24,7 +24,8 @@ #include "py32f071_ll_usart.h" #include "driver/uart.h" -#define _DMA_CHANNEL LL_DMA_CHANNEL_2 +#define USARTx USART1 +#define DMA_CHANNEL LL_DMA_CHANNEL_2 static bool UART_IsLogEnabled; uint8_t UART_DMA_Buffer[256]; @@ -57,14 +58,14 @@ void UART_Init(void) // DMA do { - LL_DMA_DisableChannel(DMA1, _DMA_CHANNEL); + LL_DMA_DisableChannel(DMA1, DMA_CHANNEL); LL_DMA_InitTypeDef DMA_InitStruct; LL_DMA_StructInit(&DMA_InitStruct); DMA_InitStruct.Direction = LL_DMA_DIRECTION_PERIPH_TO_MEMORY; DMA_InitStruct.Mode = LL_DMA_MODE_CIRCULAR; - DMA_InitStruct.PeriphOrM2MSrcAddress = LL_USART_DMA_GetRegAddr(USART1); + DMA_InitStruct.PeriphOrM2MSrcAddress = LL_USART_DMA_GetRegAddr(USARTx); DMA_InitStruct.PeriphOrM2MSrcIncMode = LL_DMA_PERIPH_NOINCREMENT; DMA_InitStruct.PeriphOrM2MSrcDataSize = LL_DMA_PDATAALIGN_BYTE; DMA_InitStruct.MemoryOrM2MDstAddress = (uint32_t)UART_DMA_Buffer; @@ -73,9 +74,9 @@ void UART_Init(void) DMA_InitStruct.NbData = sizeof(UART_DMA_Buffer); DMA_InitStruct.Priority = LL_DMA_PRIORITY_HIGH; - LL_DMA_Init(DMA1, _DMA_CHANNEL, &DMA_InitStruct); + LL_DMA_Init(DMA1, DMA_CHANNEL, &DMA_InitStruct); - LL_SYSCFG_SetDMARemap(DMA1, _DMA_CHANNEL, LL_SYSCFG_DMA_MAP_USART1_RD); + LL_SYSCFG_SetDMARemap(DMA1, DMA_CHANNEL, LL_SYSCFG_DMA_MAP_USART1_RD); } while (0); @@ -85,22 +86,22 @@ void UART_Init(void) // USART do { - LL_USART_Disable(USART1); + LL_USART_Disable(USARTx); LL_USART_InitTypeDef USART_InitStruct; LL_USART_StructInit(&USART_InitStruct); USART_InitStruct.BaudRate = 38400; USART_InitStruct.TransferDirection = LL_USART_DIRECTION_TX_RX; - LL_USART_Init(USART1, &USART_InitStruct); + LL_USART_Init(USARTx, &USART_InitStruct); - LL_USART_EnableDMAReq_RX(USART1); + LL_USART_EnableDMAReq_RX(USARTx); } while (0); - LL_DMA_EnableChannel(DMA1, _DMA_CHANNEL); - LL_USART_Enable(USART1); - LL_USART_TransmitData8(USART1, 0); + LL_DMA_EnableChannel(DMA1, DMA_CHANNEL); + LL_USART_Enable(USARTx); + LL_USART_TransmitData8(USARTx, 0); } void UART_Send(const void *pBuffer, uint32_t Size) @@ -110,9 +111,9 @@ void UART_Send(const void *pBuffer, uint32_t Size) for (i = 0; i < Size; i++) { - while (!LL_USART_IsActiveFlag_TXE(USART1)) + while (!LL_USART_IsActiveFlag_TXE(USARTx)) ; - LL_USART_TransmitData8(USART1, pData[i]); + LL_USART_TransmitData8(USARTx, pData[i]); } } diff --git a/App/functions.c b/App/functions.c index d09abbdc..ef580fc7 100644 --- a/App/functions.c +++ b/App/functions.c @@ -21,7 +21,6 @@ #include "app/fm.h" #endif #include "audio.h" -#include "bsp/dp32g030/gpio.h" #include "dcs.h" #include "driver/backlight.h" #if defined(ENABLE_FMRADIO) diff --git a/App/helper/boot.c b/App/helper/boot.c index 39e20305..db296e46 100644 --- a/App/helper/boot.c +++ b/App/helper/boot.c @@ -19,7 +19,6 @@ #ifdef ENABLE_AIRCOPY #include "app/aircopy.h" #endif -#include "bsp/dp32g030/gpio.h" #include "driver/bk4819.h" #include "driver/keyboard.h" #include "driver/gpio.h" @@ -38,7 +37,7 @@ BOOT_Mode_t BOOT_GetMode(void) for (i = 0; i < 2; i++) { - if (GPIO_CheckBit(&GPIOC->DATA, GPIOC_PIN_PTT)) + if (!GPIO_IsPttPressed()) return BOOT_MODE_NORMAL; // PTT not pressed Keys[i] = KEYBOARD_Poll(); SYSTEM_DelayMs(20); diff --git a/App/main.c b/App/main.c index fd3ef8ac..f4ebf816 100644 --- a/App/main.c +++ b/App/main.c @@ -42,8 +42,6 @@ #include "app/app.h" #include "app/dtmf.h" -#include "bsp/dp32g030/gpio.h" -#include "bsp/dp32g030/syscon.h" #include "driver/backlight.h" #include "driver/bk4819.h" @@ -177,7 +175,7 @@ void Main(void) } // wait for user to release all butts before moving on - if (!GPIO_CheckBit(&GPIOC->DATA, GPIOC_PIN_PTT) || + if (GPIO_IsPttPressed() || KEYBOARD_Poll() != KEY_INVALID || BootMode != BOOT_MODE_NORMAL) { // keys are pressed @@ -187,7 +185,7 @@ void Main(void) // 500ms for (int i = 0; i < 50;) { - i = (GPIO_CheckBit(&GPIOC->DATA, GPIOC_PIN_PTT) && KEYBOARD_Poll() == KEY_INVALID) ? i + 1 : 0; + i = (!GPIO_IsPttPressed() && KEYBOARD_Poll() == KEY_INVALID) ? i + 1 : 0; SYSTEM_DelayMs(10); } gKeyReading0 = KEY_INVALID; @@ -250,7 +248,7 @@ void Main(void) BOOT_ProcessMode(BootMode); - GPIO_ClearBit(&GPIOA->DATA, GPIOA_PIN_VOICE_0); + // GPIO_ClearBit(&GPIOA->DATA, GPIOA_PIN_VOICE_0); gUpdateStatus = true; diff --git a/App/radio.c b/App/radio.c index d4c16b9c..08a7e302 100644 --- a/App/radio.c +++ b/App/radio.c @@ -23,7 +23,6 @@ #include "app/fm.h" #endif #include "audio.h" -#include "bsp/dp32g030/gpio.h" #include "dcs.h" #include "driver/bk4819.h" #include "driver/eeprom.h" diff --git a/App/scheduler.c b/App/scheduler.c index bc4ee5c4..3cf1cf17 100644 --- a/App/scheduler.c +++ b/App/scheduler.c @@ -26,7 +26,6 @@ #include "settings.h" #include "driver/backlight.h" -#include "bsp/dp32g030/gpio.h" #include "driver/gpio.h" #define DECREMENT(cnt) \ @@ -44,10 +43,8 @@ static volatile uint32_t gGlobalSysTickCounter; -void SystickHandler(void); - // we come here every 10ms -void SystickHandler(void) +void SysTick_Handler(void) { gGlobalSysTickCounter++; diff --git a/CMakeLists.txt b/CMakeLists.txt index b6509b51..0ccc5647 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -94,18 +94,19 @@ add_custom_command( ) # Pack -if(ENABLE_FEAT_F4HWN) - add_custom_command( - TARGET ${EXE_NAME} - POST_BUILD - COMMAND python ${CMAKE_SOURCE_DIR}/fw-pack.py ${TARGET_ELF} ${AUTHOR_STRING_2} ${VERSION_STRING_2} ${EXE_NAME}.packed.bin - COMMENT "Generating packed binary" - ) -else() - add_custom_command( - TARGET ${EXE_NAME} - POST_BUILD - COMMAND python ${CMAKE_SOURCE_DIR}/fw-pack.py ${TARGET_ELF} ${AUTHOR_STRING} ${VERSION_STRING} ${EXE_NAME}.packed.bin - COMMENT "Generating packed binary" - ) -endif() +# TODO: Incorparate venv? +# if(ENABLE_FEAT_F4HWN) +# add_custom_command( +# TARGET ${EXE_NAME} +# POST_BUILD +# COMMAND python ${CMAKE_SOURCE_DIR}/fw-pack.py ${TARGET_ELF} ${AUTHOR_STRING_2} ${VERSION_STRING_2} ${EXE_NAME}.packed.bin +# COMMENT "Generating packed binary" +# ) +# else() +# add_custom_command( +# TARGET ${EXE_NAME} +# POST_BUILD +# COMMAND python ${CMAKE_SOURCE_DIR}/fw-pack.py ${TARGET_ELF} ${AUTHOR_STRING} ${VERSION_STRING} ${EXE_NAME}.packed.bin +# COMMENT "Generating packed binary" +# ) +# endif() diff --git a/CMakePresets.json b/CMakePresets.json index cece37e9..de5687b3 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -66,7 +66,7 @@ "ENABLE_AM_FIX_SHOW_DATA": false, "ENABLE_AGC_SHOW_DATA": false, "ENABLE_UART_RW_BK_REGS": false, - "ENABLE_SWD": false, + "ENABLE_SWD": true, "VERSION_STRING_1": "v0.22", "VERSION_STRING_2": "v4.2" } diff --git a/Core/Src/system_py32f071.c b/Core/Src/system_py32f071.c index 708d253c..8d8e0369 100644 --- a/Core/Src/system_py32f071.c +++ b/Core/Src/system_py32f071.c @@ -141,7 +141,7 @@ void SystemInit(void) { /* Set the HSI clock to 8MHz by default */ /* Set the LSI clock to 32.768KHz by default */ - RCC->ICSCR = (RCC->ICSCR & 0xFE000000) | (0x1 << 13) | ((*(uint32_t *)(0x1fff3208)) & 0x0000FFFF) | ((*(uint32_t *)(0x1fff3348))<<16); +// RCC->ICSCR = (RCC->ICSCR & 0xFE000000) | (0x1 << 13) | ((*(uint32_t *)(0x1fff3208)) & 0x0000FFFF) | ((*(uint32_t *)(0x1fff3348))<<16); /* Configure the Vector Table location add offset address ------------------*/ #ifdef VECT_TAB_SRAM