diff --git a/ch32v003fun/ch32v003fun.h b/ch32v003fun/ch32v003fun.h index ca69c05f735ed29d81dabaa0bce5c49887cd48d3..aecc9d880fa5fcb230eedca872a65c8782b6d4fd 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 a29c248a3af52f50b87e299658c1689d44748bec..4de9c1966b7ef3661fc325d1d54054c6f76369b8 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 94bf13ba296e789aa9492952590fe5a7033b2c2d..0000000000000000000000000000000000000000 --- 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 012dcc995bb43bbd756b595f8011cbac4bc4c5e9..0000000000000000000000000000000000000000 --- 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 eeab434437716f73af44ede973594b2e187942f5..0000000000000000000000000000000000000000 --- 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 0000000000000000000000000000000000000000..555e4588a3165fc5b0c3d665712a9b961d788314 --- /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 0000000000000000000000000000000000000000..c004008338ed6ee2f68892407a63f1b8c9602e47 --- /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 0000000000000000000000000000000000000000..a8a70b30cc8ba3115935c2140704b1a6ab83ebd2 --- /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 +