From b1e4f6dbfbf0e3c77f0699a3e3cef529d08f9682 Mon Sep 17 00:00:00 2001 From: Alexander Mandera <alexander@mandera.eu> Date: Thu, 29 Jun 2023 00:49:28 +0200 Subject: [PATCH] Try to fix SystemInit, change pin for blink example --- ch32v003fun/ch32v003fun.c | 11 ++++++++-- ch32v003fun/ch32v003fun.h | 42 ++++++++++++++++++++++--------------- examples_v30x/blink/blink.c | 10 ++++----- 3 files changed, 39 insertions(+), 24 deletions(-) diff --git a/ch32v003fun/ch32v003fun.c b/ch32v003fun/ch32v003fun.c index d07d4ca..fc4e178 100644 --- a/ch32v003fun/ch32v003fun.c +++ b/ch32v003fun/ch32v003fun.c @@ -1380,6 +1380,9 @@ void SystemInit() #endif #if defined(FUNCONF_USE_HSI) && FUNCONF_USE_HSI + #if defined(CH32V30x) + EXTEN->EXTEN_CTR |= EXTEN_PLL_HSI_PRE; + #endif #if defined(FUNCONF_USE_PLL) && FUNCONF_USE_PLL RCC->CFGR0 = BASE_CFGR0; RCC->CTLR = RCC_HSION | RCC_PLLON | ((FUNCONF_HSITRIM) << 3); // Use HSI, but enable PLL. @@ -1395,11 +1398,15 @@ void SystemInit() // Values lifted from the EVT. There is little to no documentation on what this does. while(!(RCC->CTLR&RCC_HSERDY)); - #if defined(FUNCONF_USE_PLL) && FUNCONF_USE_PLL + #if defined(CH32V003) RCC->CFGR0 = BASE_CFGR0 | RCC_SW_HSE; + #else + RCC->CFGR0 = BASE_CFGR0 | RCC_PLLSRC_HSE | RCC_PLLXTPRE_HSE; + #endif + + #if defined(FUNCONF_USE_PLL) && FUNCONF_USE_PLL RCC->CTLR = RCC_HSEON | RCC_PLLON | HSEBYP; // Turn off HSI. #else - RCC->CFGR0 = BASE_CFGR0 | RCC_SW_HSE; RCC->CTLR = RCC_HSEON | HSEBYP; // Turn off PLL and HSI. #endif #endif diff --git a/ch32v003fun/ch32v003fun.h b/ch32v003fun/ch32v003fun.h index c97ec0c..2212859 100644 --- a/ch32v003fun/ch32v003fun.h +++ b/ch32v003fun/ch32v003fun.h @@ -86,7 +86,7 @@ #define FUNCONF_PLL_MULTIPLIER 10 // Default: 8 * 10 = 80 MHz #elif defined(CH32V20x) #define FUNCONF_PLL_MULTIPLIER 18 // Default: 8 * 18 = 144 MHz - #elif defined(CH32V20x) + #elif defined(CH32V30x) #define FUNCONF_PLL_MULTIPLIER 18 // Default: 8 * 18 = 144 MHz #else // CH32V003 #define FUNCONF_PLL_MULTIPLIER 2 // Default: 24 * 2 = 48 MHz @@ -12157,6 +12157,11 @@ void DefaultIRQHandler( void ) __attribute__((section(".text.vector_handler"))) #endif +#define str(token) #token +#define xstr(token) str(token) + +#pragma message("CH32V003FUN: " xstr(FUNCONF_PLL_MULTIPLIER) " Multiplier") + // Determination of PLL multiplication factor for non-V003 chips #if defined(CH32V10x) || defined(CH32V20x) || defined(CH32V30x) #if !defined(FUNCONF_SYSTEM_CORE_CLOCK) @@ -12200,35 +12205,35 @@ void DefaultIRQHandler( void ) __attribute__((section(".text.vector_handler"))) #endif #else #if FUNCONF_PLL_MULTIPLIER == 3 - #define PLL_MULTIPLICATION RCC_PLLMULL3 + #define PLL_MULTIPLICATION RCC_PLLMULL3_EXTEN #elif FUNCONF_PLL_MULTIPLIER == 4 - #define PLL_MULTIPLICATION RCC_PLLMULL4 + #define PLL_MULTIPLICATION RCC_PLLMULL4_EXTEN #elif FUNCONF_PLL_MULTIPLIER == 5 - #define PLL_MULTIPLICATION RCC_PLLMULL5 + #define PLL_MULTIPLICATION RCC_PLLMULL5_EXTEN #elif FUNCONF_PLL_MULTIPLIER == 6 - #define PLL_MULTIPLICATION RCC_PLLMULL6 - #elif FUNCONF_PLL_MULTIPLIER == 6.5 - #define PLL_MULTIPLICATION RCC_PLLMULL6_5 + #define PLL_MULTIPLICATION RCC_PLLMULL6_EXTEN #elif FUNCONF_PLL_MULTIPLIER == 7 - #define PLL_MULTIPLICATION RCC_PLLMULL7 + #define PLL_MULTIPLICATION RCC_PLLMULL7_EXTEN #elif FUNCONF_PLL_MULTIPLIER == 8 - #define PLL_MULTIPLICATION RCC_PLLMULL8 + #define PLL_MULTIPLICATION RCC_PLLMULL8_EXTEN #elif FUNCONF_PLL_MULTIPLIER == 9 - #define PLL_MULTIPLICATION RCC_PLLMULL9 + #define PLL_MULTIPLICATION RCC_PLLMULL9_EXTEN #elif FUNCONF_PLL_MULTIPLIER == 10 - #define PLL_MULTIPLICATION RCC_PLLMULL10 + #define PLL_MULTIPLICATION RCC_PLLMULL10_EXTEN #elif FUNCONF_PLL_MULTIPLIER == 11 - #define PLL_MULTIPLICATION RCC_PLLMULL11 + #define PLL_MULTIPLICATION RCC_PLLMULL11_EXTEN #elif FUNCONF_PLL_MULTIPLIER == 12 - #define PLL_MULTIPLICATION RCC_PLLMULL12 + #define PLL_MULTIPLICATION RCC_PLLMULL12_EXTEN #elif FUNCONF_PLL_MULTIPLIER == 13 - #define PLL_MULTIPLICATION RCC_PLLMULL13 + #define PLL_MULTIPLICATION RCC_PLLMULL13_EXTEN #elif FUNCONF_PLL_MULTIPLIER == 14 - #define PLL_MULTIPLICATION RCC_PLLMULL14 + #define PLL_MULTIPLICATION RCC_PLLMULL14_EXTEN #elif FUNCONF_PLL_MULTIPLIER == 15 - #define PLL_MULTIPLICATION RCC_PLLMULL15 + #define PLL_MULTIPLICATION RCC_PLLMULL15_EXTEN #elif FUNCONF_PLL_MULTIPLIER == 16 - #define PLL_MULTIPLICATION RCC_PLLMULL16 + #define PLL_MULTIPLICATION RCC_PLLMULL16_EXTEN + #elif FUNCONF_PLL_MULTIPLIER == 18 + #define PLL_MULTIPLICATION RCC_PLLMULL18_EXTEN #else #error "Invalid PLL multiplier" #endif @@ -12236,6 +12241,9 @@ void DefaultIRQHandler( void ) __attribute__((section(".text.vector_handler"))) #endif #endif +#pragma message("CH32V003FUN: " xstr(FUNCONF_SYSTEM_CORE_CLOCK) " Clock") + + #ifndef __ASSEMBLER__ void DelaySysTick( uint32_t n ); diff --git a/examples_v30x/blink/blink.c b/examples_v30x/blink/blink.c index 7ac84c2..2e5d239 100644 --- a/examples_v30x/blink/blink.c +++ b/examples_v30x/blink/blink.c @@ -9,15 +9,15 @@ int main() //RCC->APB2PCENR |= RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOC; RCC->APB2PCENR |= RCC_APB2Periph_GPIOA; - // GPIO A15 Push-Pull - GPIOA->CFGHR &= ~((uint32_t)0x0F<<(4*7)); - GPIOA->CFGHR |= (uint32_t)(GPIO_Speed_10MHz | GPIO_CNF_OUT_PP)<<(4*7); + // GPIO A3 Push-Pull + GPIOA->CFGLR &= ~((uint32_t)0x0F<<(4*3)); + GPIOA->CFGLR |= (uint32_t)(GPIO_Speed_10MHz | GPIO_CNF_OUT_PP)<<(4*3); while(1) { - GPIOA->BSHR = (1<<15); // Turn on GPIO + GPIOA->BSHR = (1<<3); // Turn on GPIO Delay_Ms( 1000 ); - GPIOA->BSHR = (1<<(16+15)); // Turn off GPIO + GPIOA->BSHR = (1<<(16+3)); // Turn off GPIO Delay_Ms( 1000 ); } } -- GitLab