Skip to content

Add clock option for CH32V003 #66

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 2 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions boards.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

menu.pnum=Board Select

menu.clock=Clock Select

menu.xserial=U(S)ART support
menu.usb=USB support (if available)
menu.xusb=USB speed (if available)
Expand Down Expand Up @@ -49,6 +51,20 @@ CH32V00x_EVT.menu.upload_method.swdMethod.upload.options=
CH32V00x_EVT.menu.upload_method.swdMethod.upload.tool=WCH_linkE


# Clock Select
CH32V00x_EVT.menu.clock.48MHz_HSI=48MHz Internal
CH32V00x_EVT.menu.clock.48MHz_HSI.build.flags.clock=-DSYSCLK_FREQ_48MHz_HSI=48000000
CH32V00x_EVT.menu.clock.24MHz_HSI=24MHz Internal
CH32V00x_EVT.menu.clock.24MHz_HSI.build.flags.clock=-DSYSCLK_FREQ_24MHz_HSI=24000000
CH32V00x_EVT.menu.clock.8MHz_HSI=8MHz Internal
CH32V00x_EVT.menu.clock.8MHz_HSI.build.flags.clock=-DSYSCLK_FREQ_8MHz_HSI=8000000
CH32V00x_EVT.menu.clock.48MHz_HSE=48MHz External
CH32V00x_EVT.menu.clock.48MHz_HSE.build.flags.clock=-DSYSCLK_FREQ_48MHz_HSE=48000000
CH32V00x_EVT.menu.clock.24MHz_HSE=24MHz External
CH32V00x_EVT.menu.clock.24MHz_HSE.build.flags.clock=-DSYSCLK_FREQ_24MHz_HSE=24000000
CH32V00x_EVT.menu.clock.8MHz_HSE=8MHz External
CH32V00x_EVT.menu.clock.8MHz_HSE.build.flags.clock=-DSYSCLK_FREQ_8MHz_HSE=8000000


# Optimizations
CH32V00x_EVT.menu.opt.osstd=Smallest (-Os default)
Expand Down
7 changes: 4 additions & 3 deletions platform.txt
Original file line number Diff line number Diff line change
Expand Up @@ -32,15 +32,15 @@ compiler.objdump.cmd=riscv-none-embed-objdump

compiler.libraries.ldflags=

#"@{build.opt.path}" {build.flags.optimize} {compiler.warning_flags} {build.flags.debug} -MP -MF
#"@{build.opt.path}" {build.flags.clock} {build.flags.optimize} {compiler.warning_flags} {build.flags.debug} -MP -MF

compiler.extra_flags=-march={build.march} -mabi={build.mabi} -msmall-data-limit=8 -msave-restore -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections -fno-common

compiler.S.flags={compiler.extra_flags} -x assembler-with-cpp "-I{build.system.path}/{build.series}/SRC/Startup/" "-I{build.core.path}/ch32/"

compiler.c.flags={compiler.extra_flags} -c {build.flags.optimize} {build.flags.debug} {compiler.warning_flags} -std=gnu99 -MMD {compiler.ch.extra_include}
compiler.c.flags={compiler.extra_flags} -c {build.flags.clock} {build.flags.optimize} {build.flags.debug} {compiler.warning_flags} -std=gnu99 -MMD {compiler.ch.extra_include}

compiler.cpp.flags={compiler.extra_flags} -c {build.flags.optimize} {build.flags.debug} {compiler.warning_flags} -std={compiler.cpp.std} -fno-threadsafe-statics -fno-rtti -fno-exceptions -fno-use-cxa-atexit -MMD {compiler.ch.extra_include} -fpermissive
compiler.cpp.flags={compiler.extra_flags} -c {build.flags.clock} {build.flags.optimize} {build.flags.debug} {compiler.warning_flags} -std={compiler.cpp.std} -fno-threadsafe-statics -fno-rtti -fno-exceptions -fno-use-cxa-atexit -MMD {compiler.ch.extra_include} -fpermissive

compiler.ar.flags=rcs

Expand Down Expand Up @@ -99,6 +99,7 @@ build.enable_virtio=
build.peripheral_pins=
build.startup_file=
build.flags.fp=
build.flags.clock=
build.flags.optimize=
build.flags.debug=
build.flags.ldspecs=
Expand Down
43 changes: 22 additions & 21 deletions system/CH32V00x/USER/system_ch32v00x.c
Original file line number Diff line number Diff line change
Expand Up @@ -17,20 +17,21 @@
* If none of the define below is enabled, the HSI is used as System clock source.
*/

//Do it in menu selection in Arduino
//#define SYSCLK_FREQ_8MHz_HSI 8000000
//#define SYSCLK_FREQ_24MHZ_HSI HSI_VALUE
//#define SYSCLK_FREQ_48MHZ_HSI 48000000
//#define SYSCLK_FREQ_24MHz_HSI HSI_VALUE
//#define SYSCLK_FREQ_48MHz_HSI 48000000
//#define SYSCLK_FREQ_8MHz_HSE 8000000
//#define SYSCLK_FREQ_24MHz_HSE HSE_VALUE
#define SYSCLK_FREQ_48MHz_HSE 48000000
//#define SYSCLK_FREQ_48MHz_HSE 48000000

/* Clock Definitions */
#ifdef SYSCLK_FREQ_8MHz_HSI
uint32_t SystemCoreClock = SYSCLK_FREQ_8MHz_HSI; /* System Clock Frequency (Core Clock) */
#elif defined SYSCLK_FREQ_24MHZ_HSI
uint32_t SystemCoreClock = SYSCLK_FREQ_24MHZ_HSI; /* System Clock Frequency (Core Clock) */
#elif defined SYSCLK_FREQ_48MHZ_HSI
uint32_t SystemCoreClock = SYSCLK_FREQ_48MHZ_HSI; /* System Clock Frequency (Core Clock) */
#elif defined SYSCLK_FREQ_24MHz_HSI
uint32_t SystemCoreClock = SYSCLK_FREQ_24MHz_HSI; /* System Clock Frequency (Core Clock) */
#elif defined SYSCLK_FREQ_48MHz_HSI
uint32_t SystemCoreClock = SYSCLK_FREQ_48MHz_HSI; /* System Clock Frequency (Core Clock) */
#elif defined SYSCLK_FREQ_8MHz_HSE
uint32_t SystemCoreClock = SYSCLK_FREQ_8MHz_HSE; /* System Clock Frequency (Core Clock) */
#elif defined SYSCLK_FREQ_24MHz_HSE
Expand All @@ -49,10 +50,10 @@ static void SetSysClock(void);

#ifdef SYSCLK_FREQ_8MHz_HSI
static void SetSysClockTo_8MHz_HSI(void);
#elif defined SYSCLK_FREQ_24MHZ_HSI
static void SetSysClockTo_24MHZ_HSI(void);
#elif defined SYSCLK_FREQ_48MHZ_HSI
static void SetSysClockTo_48MHZ_HSI(void);
#elif defined SYSCLK_FREQ_24MHz_HSI
static void SetSysClockTo_24MHz_HSI(void);
#elif defined SYSCLK_FREQ_48MHz_HSI
static void SetSysClockTo_48MHz_HSI(void);
#elif defined SYSCLK_FREQ_8MHz_HSE
static void SetSysClockTo_8MHz_HSE(void);
#elif defined SYSCLK_FREQ_24MHz_HSE
Expand Down Expand Up @@ -144,10 +145,10 @@ static void SetSysClock(void)
{
#ifdef SYSCLK_FREQ_8MHz_HSI
SetSysClockTo_8MHz_HSI();
#elif defined SYSCLK_FREQ_24MHZ_HSI
SetSysClockTo_24MHZ_HSI();
#elif defined SYSCLK_FREQ_48MHZ_HSI
SetSysClockTo_48MHZ_HSI();
#elif defined SYSCLK_FREQ_24MHz_HSI
SetSysClockTo_24MHz_HSI();
#elif defined SYSCLK_FREQ_48MHz_HSI
SetSysClockTo_48MHz_HSI();
#elif defined SYSCLK_FREQ_8MHz_HSE
SetSysClockTo_8MHz_HSE();
#elif defined SYSCLK_FREQ_24MHz_HSE
Expand Down Expand Up @@ -181,16 +182,16 @@ static void SetSysClockTo_8MHz_HSI(void)
RCC->CFGR0 |= (uint32_t)RCC_HPRE_DIV3;
}

#elif defined SYSCLK_FREQ_24MHZ_HSI
#elif defined SYSCLK_FREQ_24MHz_HSI

/*********************************************************************
* @fn SetSysClockTo_24MHZ_HSI
* @fn SetSysClockTo_24MHz_HSI
*
* @brief Sets System clock frequency to 24MHz and configure HCLK, PCLK2 and PCLK1 prescalers.
*
* @return none
*/
static void SetSysClockTo_24MHZ_HSI(void)
static void SetSysClockTo_24MHz_HSI(void)
{
/* Flash 0 wait state */
FLASH->ACTLR &= (uint32_t)((uint32_t)~FLASH_ACTLR_LATENCY);
Expand All @@ -201,16 +202,16 @@ static void SetSysClockTo_24MHZ_HSI(void)
}


#elif defined SYSCLK_FREQ_48MHZ_HSI
#elif defined SYSCLK_FREQ_48MHz_HSI

/*********************************************************************
* @fn SetSysClockTo_48MHZ_HSI
* @fn SetSysClockTo_48MHz_HSI
*
* @brief Sets System clock frequency to 48MHz and configure HCLK, PCLK2 and PCLK1 prescalers.
*
* @return none
*/
static void SetSysClockTo_48MHZ_HSI(void)
static void SetSysClockTo_48MHz_HSI(void)
{
/* Flash 0 wait state */
FLASH->ACTLR &= (uint32_t)((uint32_t)~FLASH_ACTLR_LATENCY);
Expand Down