From 8e8091fe07cd9455de589bfb36656b1f9107ceb1 Mon Sep 17 00:00:00 2001 From: cnlohr <lohr85@gmail.com> Date: Thu, 15 Feb 2024 15:03:33 -0800 Subject: [PATCH] * Add debugprintf and unify makefiles --- ch32v003fun/ch32v003fun.h | 16 +- ch32v003fun/ch32v003fun.mk | 139 +++++++++++++++--- ch32v003fun/ch32v10xfun.mk | 34 ----- ch32v003fun/ch32v20xfun.mk | 62 -------- ch32v003fun/ch32v30xfun.mk | 47 ------ examples_v20x/debugprintfdemo/Makefile | 10 ++ .../debugprintfdemo/debugprintfdemo.c | 46 ++++++ examples_v20x/debugprintfdemo/funconfig.h | 9 ++ 8 files changed, 194 insertions(+), 169 deletions(-) delete mode 100644 ch32v003fun/ch32v10xfun.mk delete mode 100644 ch32v003fun/ch32v20xfun.mk delete mode 100644 ch32v003fun/ch32v30xfun.mk create mode 100644 examples_v20x/debugprintfdemo/Makefile create mode 100644 examples_v20x/debugprintfdemo/debugprintfdemo.c create mode 100644 examples_v20x/debugprintfdemo/funconfig.h diff --git a/ch32v003fun/ch32v003fun.h b/ch32v003fun/ch32v003fun.h index ca69c05..aecc9d8 100644 --- a/ch32v003fun/ch32v003fun.h +++ b/ch32v003fun/ch32v003fun.h @@ -59,6 +59,13 @@ #define FUNCONF_DEBUGPRINTF_TIMEOUT 160000 // Arbitrary time units */ +// Sanity check for when porting old code. +#if defined(CH32V10x) || defined(CH32V20x) || defined(CH32V30x) + #if defined(CH32V003) + #error Cannot define CH32V003 and another arch. + #endif +#endif + #if !defined(FUNCONF_USE_DEBUGPRINTF) && !defined(FUNCONF_USE_UARTPRINTF) #define FUNCONF_USE_DEBUGPRINTF 1 #endif @@ -12361,8 +12368,13 @@ void DefaultIRQHandler( void ) __attribute__((section(".text.vector_handler"))) #endif // For debug writing to the debug interface. -#define DMDATA0 ((volatile uint32_t*)0xe00000f4) -#define DMDATA1 ((volatile uint32_t*)0xe00000f8) +#if defined(CH32V003) + #define DMDATA0 ((volatile uint32_t*)0xe00000f4) + #define DMDATA1 ((volatile uint32_t*)0xe00000f8) +#else + #define DMDATA0 ((volatile uint32_t*)0xe0000380) + #define DMDATA1 ((volatile uint32_t*)0xe0000384) +#endif #endif diff --git a/ch32v003fun/ch32v003fun.mk b/ch32v003fun/ch32v003fun.mk index a29c248..4de9c19 100644 --- a/ch32v003fun/ch32v003fun.mk +++ b/ch32v003fun/ch32v003fun.mk @@ -17,45 +17,136 @@ MINICHLINK?=$(CH32V003FUN)/../minichlink WRITE_SECTION?=flash SYSTEM_C?=$(CH32V003FUN)/ch32v003fun.c -ifeq ($(TARGET_MCU),CH32V003) - CFLAGS+= \ - -g -Os -flto -ffunction-sections -fdata-sections \ - -static-libgcc \ - -march=rv32ec \ - -mabi=ilp32e \ - -I/usr/include/newlib \ - -I$(CH32V003FUN)/../extralibs \ - -I$(CH32V003FUN) \ - -nostdlib \ - -DCH32V003=1 \ - -I. -Wall +CFLAGS?=-g -Os -flto -ffunction-sections -fdata-sections +ifeq ($(TARGET_MCU),CH32V003) + CFLAGS_ARCH+=-march=rv32ec -mabi=ilp32e -DCH32V003=1 GENERATED_LD_FILE?=$(CH32V003FUN)/generated_ch32v003.ld TARGET_MCU_LD:=0 LINKER_SCRIPT?=$(GENERATED_LD_FILE) LDFLAGS+=-L$(CH32V003FUN)/../misc -lgcc else - ifeq ($(findstring CH32V10,$(TARGET_MCU)),CH32V10) - include $(CH32V003FUN)/ch32v10xfun.mk - else ifeq ($(findstring CH32V20,$(TARGET_MCU)),CH32V20) - include $(CH32V003FUN)/ch32v20xfun.mk - else ifeq ($(findstring CH32V30,$(TARGET_MCU)),CH32V30) - include $(CH32V003FUN)/ch32v30xfun.mk + MCU_PACKAGE?=1 + + ifeq ($(findstring CH32V10,$(TARGET_MCU)),CH32V10) # CH32V103 + TARGET_MCU_PACKAGE?=CH32V103R8T6 + CFLAGS_ARCH+= -march=rv32imac \ + -mabi=ilp32 \ + -fmessage-length=0 \ + -msmall-data-limit=8 \ + -mno-save-restore \ + -DCH32V10x=1 + + # MCU Flash/RAM split + ifeq ($(findstring R8, $(TARGET_MCU_PACKAGE)), R8) + MCU_PACKAGE:=1 + else ifeq ($(findstring C8, $(TARGET_MCU_PACKAGE)), C8) + MCU_PACKAGE:=1 + else ifeq ($(findstring C6, $(TARGET_MCU_PACKAGE)), C6) + MCU_PACKAGE:=2 + endif + + TARGET_MCU_LD:=1 + else ifeq ($(findstring CH32V20,$(TARGET_MCU)),CH32V20) # CH32V203 + TARGET_MCU_PACKAGE?=CH32V203F8P6 + CFLAGS_ARCH+= -march=rv32imac \ + -mabi=ilp32 \ + -fmessage-length=0 \ + -msmall-data-limit=8 \ + -mno-save-restore \ + -DCH32V20x=1 + + # MCU Flash/RAM split + ifeq ($(findstring F8, $(TARGET_MCU_PACKAGE)), F8) + MCU_PACKAGE:=1 + else ifeq ($(findstring G8, $(TARGET_MCU_PACKAGE)), G8) + MCU_PACKAGE:=1 + else ifeq ($(findstring K8, $(TARGET_MCU_PACKAGE)), K8) + MCU_PACKAGE:=1 + else ifeq ($(findstring C8, $(TARGET_MCU_PACKAGE)), C8) + MCU_PACKAGE:=1 + else ifeq ($(findstring F6, $(TARGET_MCU_PACKAGE)), F6) + MCU_PACKAGE:=2 + else ifeq ($(findstring G6, $(TARGET_MCU_PACKAGE)), G6) + MCU_PACKAGE:=2 + else ifeq ($(findstring K6, $(TARGET_MCU_PACKAGE)), K6) + MCU_PACKAGE:=2 + else ifeq ($(findstring C6, $(TARGET_MCU_PACKAGE)), C6) + MCU_PACKAGE:=2 + else ifeq ($(findstring RB, $(TARGET_MCU_PACKAGE)), RB) + MCU_PACKAGE:=3 + else ifeq ($(findstring GB, $(TARGET_MCU_PACKAGE)), GB) + MCU_PACKAGE:=3 + else ifeq ($(findstring CB, $(TARGET_MCU_PACKAGE)), CB) + MCU_PACKAGE:=3 + else ifeq ($(findstring WB, $(TARGET_MCU_PACKAGE)), WB) + MCU_PACKAGE:=3 + endif + + # Package + ifeq ($(findstring 203RB, $(TARGET_MCU_PACKAGE)), 203RB) + CFLAGS+=-DCH32V20x_D8 + else ifeq ($(findstring 208, $(TARGET_MCU_PACKAGE)), 208) + CFLAGS+=-DCH32V20x_D8W + else + CFLAGS+=-DCH32V20x_D6 + endif + + TARGET_MCU_LD:=2 + else ifeq ($(findstring CH32V30,$(TARGET_MCU)),CH32V30) #CH32V307 + TARGET_MCU_PACKAGE?=CH32V307VCT6 + MCU_PACKAGE?=1 + + CFLAGS_ARCH+= -march=rv32imafc \ + -mabi=ilp32f \ + -msmall-data-limit=8 \ + -mno-save-restore \ + -fmessage-length=0 \ + -DCH32V30x=1 + + # MCU Flash/RAM split + ifeq ($(findstring RC, $(TARGET_MCU_PACKAGE)), RC) + MCU_PACKAGE:=1 + else ifeq ($(findstring VC, $(TARGET_MCU_PACKAGE)), VC) + MCU_PACKAGE:=1 + else ifeq ($(findstring WC, $(TARGET_MCU_PACKAGE)), WC) + MCU_PACKAGE:=1 + else ifeq ($(findstring CB, $(TARGET_MCU_PACKAGE)), CB) + MCU_PACKAGE:=2 + else ifeq ($(findstring FB, $(TARGET_MCU_PACKAGE)), FB) + MCU_PACKAGE:=2 + else ifeq ($(findstring RB, $(TARGET_MCU_PACKAGE)), RB) + MCU_PACKAGE:=2 + endif + + # Package + ifeq ($(findstring 303, $(TARGET_MCU_PACKAGE)), 303) + CFLAGS+=-DCH32V30x_D8 + else + CFLAGS+=-DCH32V30x_D8C + endif + + TARGET_MCU_LD:=3 else $(error Unknown MCU $(TARGET_MCU)) endif + + LDFLAGS+=-lgcc + GENERATED_LD_FILE:=$(CH32V003FUN)/generated_$(TARGET_MCU_PACKAGE).ld + LINKER_SCRIPT:=$(GENERATED_LD_FILE) endif -CFLAGS+= $(EXTRA_CFLAGS) +CFLAGS+= \ + $(CFLAGS_ARCH) -static-libgcc \ + -I/usr/include/newlib \ + -I$(CH32V003FUN)/../extralibs \ + -I$(CH32V003FUN) \ + -nostdlib \ + -I. -Wall $(EXTRA_CFLAGS) LDFLAGS+=-T $(LINKER_SCRIPT) -Wl,--gc-sections - -ifeq ($(TARGET_MCU), CH32V003) - FILES_TO_COMPILE:=$(SYSTEM_C) $(TARGET).$(TARGET_EXT) $(ADDITIONAL_C_FILES) -endif - $(TARGET).bin : $(TARGET).elf $(PREFIX)-size $^ $(PREFIX)-objdump -S $^ > $(TARGET).lst diff --git a/ch32v003fun/ch32v10xfun.mk b/ch32v003fun/ch32v10xfun.mk deleted file mode 100644 index 94bf13b..0000000 --- a/ch32v003fun/ch32v10xfun.mk +++ /dev/null @@ -1,34 +0,0 @@ -TARGET_MCU_PACKAGE?=CH32V103R8T6 -MCU_PACKAGE?=1 - -CFLAGS+= \ - -g -Os -flto -ffunction-sections -fdata-sections \ - -static-libgcc \ - -march=rv32imac \ - -mabi=ilp32 \ - -msmall-data-limit=8 \ - -mno-save-restore \ - -fmessage-length=0 \ - -fsigned-char \ - -I/usr/include/newlib \ - -I$(CH32V003FUN) \ - -nostdlib \ - -DCH32V10x=1 \ - -I. -Wall - -# MCU Flash/RAM split -ifeq ($(findstring R8, $(TARGET_MCU_PACKAGE)), R8) - MCU_PACKAGE:=1 -else ifeq ($(findstring C8, $(TARGET_MCU_PACKAGE)), C8) - MCU_PACKAGE:=1 -else ifeq ($(findstring C6, $(TARGET_MCU_PACKAGE)), C6) - MCU_PACKAGE:=2 -endif - -TARGET_MCU_LD:=1 -LDFLAGS+=-lgcc - -GENERATED_LD_FILE:=$(CH32V003FUN)/generated_$(TARGET_MCU_PACKAGE).ld -LINKER_SCRIPT:=$(GENERATED_LD_FILE) -FILES_TO_COMPILE:=$(SYSTEM_C) $(TARGET).$(TARGET_EXT) $(ADDITIONAL_C_FILES) - diff --git a/ch32v003fun/ch32v20xfun.mk b/ch32v003fun/ch32v20xfun.mk deleted file mode 100644 index 012dcc9..0000000 --- a/ch32v003fun/ch32v20xfun.mk +++ /dev/null @@ -1,62 +0,0 @@ -TARGET_MCU_PACKAGE?=CH32V203F8P6 -MCU_PACKAGE?=1 - -CFLAGS+= \ - -g -Os -flto -ffunction-sections -fdata-sections \ - -static-libgcc \ - -march=rv32imac \ - -mabi=ilp32 \ - -msmall-data-limit=8 \ - -mno-save-restore \ - -fmessage-length=0 \ - -fsigned-char \ - -I/usr/include/newlib \ - -I$(CH32V003FUN) \ - -nostdlib \ - -DCH32V20x=1 \ - -I. -Wall - -# MCU Flash/RAM split -ifeq ($(findstring F8, $(TARGET_MCU_PACKAGE)), F8) - MCU_PACKAGE:=1 -else ifeq ($(findstring G8, $(TARGET_MCU_PACKAGE)), G8) - MCU_PACKAGE:=1 -else ifeq ($(findstring K8, $(TARGET_MCU_PACKAGE)), K8) - MCU_PACKAGE:=1 -else ifeq ($(findstring C8, $(TARGET_MCU_PACKAGE)), C8) - MCU_PACKAGE:=1 -else ifeq ($(findstring F6, $(TARGET_MCU_PACKAGE)), F6) - MCU_PACKAGE:=2 -else ifeq ($(findstring G6, $(TARGET_MCU_PACKAGE)), G6) - MCU_PACKAGE:=2 -else ifeq ($(findstring K6, $(TARGET_MCU_PACKAGE)), K6) - MCU_PACKAGE:=2 -else ifeq ($(findstring C6, $(TARGET_MCU_PACKAGE)), C6) - MCU_PACKAGE:=2 -else ifeq ($(findstring RB, $(TARGET_MCU_PACKAGE)), RB) - MCU_PACKAGE:=3 -else ifeq ($(findstring GB, $(TARGET_MCU_PACKAGE)), GB) - MCU_PACKAGE:=3 -else ifeq ($(findstring CB, $(TARGET_MCU_PACKAGE)), CB) - MCU_PACKAGE:=3 -else ifeq ($(findstring WB, $(TARGET_MCU_PACKAGE)), WB) - MCU_PACKAGE:=3 -endif - -# Package -ifeq ($(findstring 203RB, $(TARGET_MCU_PACKAGE)), 203RB) - CFLAGS+=-DCH32V20x_D8 -else ifeq ($(findstring 208, $(TARGET_MCU_PACKAGE)), 208) - CFLAGS+=-DCH32V20x_D8W -else - CFLAGS+=-DCH32V20x_D6 -endif - -TARGET_MCU_LD:=2 -LDFLAGS+=-lgcc - -GENERATED_LD_FILE:=$(CH32V003FUN)/generated_$(TARGET_MCU_PACKAGE).ld -LINKER_SCRIPT:=$(GENERATED_LD_FILE) -FILES_TO_COMPILE:=$(SYSTEM_C) $(TARGET).$(TARGET_EXT) $(ADDITIONAL_C_FILES) - - diff --git a/ch32v003fun/ch32v30xfun.mk b/ch32v003fun/ch32v30xfun.mk deleted file mode 100644 index eeab434..0000000 --- a/ch32v003fun/ch32v30xfun.mk +++ /dev/null @@ -1,47 +0,0 @@ -TARGET_MCU_PACKAGE?=CH32V307VCT6 -MCU_PACKAGE?=1 - -CFLAGS+= \ - -g -Os -flto -ffunction-sections -fdata-sections \ - -static-libgcc \ - -march=rv32imafc \ - -mabi=ilp32f \ - -msmall-data-limit=8 \ - -mno-save-restore \ - -fmessage-length=0 \ - -fsigned-char \ - -I/usr/include/newlib \ - -I$(CH32V003FUN) \ - -nostdlib \ - -DCH32V30x=1 \ - -I. -Wall - -# MCU Flash/RAM split -ifeq ($(findstring RC, $(TARGET_MCU_PACKAGE)), RC) - MCU_PACKAGE:=1 -else ifeq ($(findstring VC, $(TARGET_MCU_PACKAGE)), VC) - MCU_PACKAGE:=1 -else ifeq ($(findstring WC, $(TARGET_MCU_PACKAGE)), WC) - MCU_PACKAGE:=1 -else ifeq ($(findstring CB, $(TARGET_MCU_PACKAGE)), CB) - MCU_PACKAGE:=2 -else ifeq ($(findstring FB, $(TARGET_MCU_PACKAGE)), FB) - MCU_PACKAGE:=2 -else ifeq ($(findstring RB, $(TARGET_MCU_PACKAGE)), RB) - MCU_PACKAGE:=2 -endif - -# Package -ifeq ($(findstring 303, $(TARGET_MCU_PACKAGE)), 303) - CFLAGS+=-DCH32V30x_D8 -else - CFLAGS+=-DCH32V30x_D8C -endif - -TARGET_MCU_LD:=3 -LDFLAGS+=-lgcc - -GENERATED_LD_FILE:=$(CH32V003FUN)/generated_$(TARGET_MCU_PACKAGE).ld -LINKER_SCRIPT:=$(GENERATED_LD_FILE) -FILES_TO_COMPILE:=$(SYSTEM_C) $(TARGET).$(TARGET_EXT) $(ADDITIONAL_C_FILES) - diff --git a/examples_v20x/debugprintfdemo/Makefile b/examples_v20x/debugprintfdemo/Makefile new file mode 100644 index 0000000..555e458 --- /dev/null +++ b/examples_v20x/debugprintfdemo/Makefile @@ -0,0 +1,10 @@ +all : flash + +TARGET:=debugprintfdemo +TARGET_MCU:=CH32V203 + +include ../../ch32v003fun/ch32v003fun.mk + +flash : cv_flash +clean : cv_clean + diff --git a/examples_v20x/debugprintfdemo/debugprintfdemo.c b/examples_v20x/debugprintfdemo/debugprintfdemo.c new file mode 100644 index 0000000..c004008 --- /dev/null +++ b/examples_v20x/debugprintfdemo/debugprintfdemo.c @@ -0,0 +1,46 @@ +/* Small example showing how to use the SWIO programming pin to + do printf through the debug interface */ + +#include "ch32v003fun.h" +#include <stdio.h> + +uint32_t count; + +int last = 0; +void handle_debug_input( int numbytes, uint8_t * data ) +{ + last = data[0]; + count += numbytes; +} + +int main() +{ + SystemInit(); + + // Enable GPIOs + RCC->APB2PCENR |= RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOC; + + // GPIO D0 Push-Pull + GPIOD->CFGLR &= ~(0xf<<(4*0)); + GPIOD->CFGLR |= (GPIO_Speed_10MHz | GPIO_CNF_OUT_PP)<<(4*0); + + // GPIO C0 Push-Pull + GPIOC->CFGLR &= ~(0xf<<(4*0)); + GPIOC->CFGLR |= (GPIO_Speed_10MHz | GPIO_CNF_OUT_PP)<<(4*0); + + while(1) + { + GPIOD->BSHR = 1; // Turn on GPIOs + GPIOC->BSHR = 1; + printf( "+%lu\n", count++ ); + Delay_Ms(100); + int i; + for( i = 0; i < 10000; i++ ) + poll_input(); + GPIOD->BSHR = (1<<16); // Turn off GPIODs + GPIOC->BSHR = (1<<16); + printf( "-%lu[%c]\n", count++, last ); + Delay_Ms(100); + } +} + diff --git a/examples_v20x/debugprintfdemo/funconfig.h b/examples_v20x/debugprintfdemo/funconfig.h new file mode 100644 index 0000000..a8a70b3 --- /dev/null +++ b/examples_v20x/debugprintfdemo/funconfig.h @@ -0,0 +1,9 @@ +#ifndef _FUNCONFIG_H +#define _FUNCONFIG_H + +// Though this should be on by default we can extra force it on. +#define FUNCONF_USE_DEBUGPRINTF 1 +#define FUNCONF_DEBUGPRINTF_TIMEOUT (1<<31) // Wait for a very very long time. + +#endif + -- GitLab