From d0fda78d971be1515ccf7fa847add701f2eb726e Mon Sep 17 00:00:00 2001 From: 21km43 <21km43@gmail.com> Date: Mon, 9 Sep 2024 23:03:29 +0900 Subject: [PATCH 01/15] add ch32x035 and ch32l103 support --- .../ports/ch32/Adafruit_TinyUSB_ch32.cpp | 25 ++++++++++++++++++- src/arduino/ports/ch32/tusb_config_ch32.h | 4 +++ src/common/tusb_mcu.h | 10 ++++++++ src/portable/wch/ch32_usbfs_reg.h | 4 +++ src/tusb_option.h | 4 ++- 5 files changed, 45 insertions(+), 2 deletions(-) diff --git a/src/arduino/ports/ch32/Adafruit_TinyUSB_ch32.cpp b/src/arduino/ports/ch32/Adafruit_TinyUSB_ch32.cpp index 03e4dcdf..f4e2d366 100644 --- a/src/arduino/ports/ch32/Adafruit_TinyUSB_ch32.cpp +++ b/src/arduino/ports/ch32/Adafruit_TinyUSB_ch32.cpp @@ -25,7 +25,7 @@ #include "tusb_option.h" #if CFG_TUD_ENABLED && \ - (defined(ARDUINO_ARCH_CH32) || defined(CH32V20x) || defined(CH32V30x)) + (defined(ARDUINO_ARCH_CH32) || defined(CH32V20x) || defined(CH32V30x) || defied(CH32X035) || defined(CH32L10x)) #include "Arduino.h" #include "arduino/Adafruit_USBD_Device.h" @@ -64,6 +64,9 @@ USBWakeUp_IRQHandler(void) { #if defined(CH32V10x) #define USBHDWakeUp_IRQHandler USBWakeUp_IRQHandler +#elif defined(CH32X035) || defined(CH32L10x) +#define USBHD_IRQHandler USBFS_IRQHandler +#define USBHDWakeUp_IRQHandler USBFSWakeUp_IRQHandler #endif __attribute__((interrupt("WCH-Interrupt-fast"))) void USBHD_IRQHandler(void) { @@ -114,6 +117,8 @@ void TinyUSB_Port_InitDevice(uint8_t rhport) { #define RCC_AHBPeriph_OTG_FS RCC_AHBPeriph_USBHD #endif +#if defined(CH32V20x) || defined(CH32V30x) || defined(CH32L10x) + uint8_t usb_div; switch (SystemCoreClock) { #if defined(CH32V20x) || defined(CH32V30x) @@ -133,6 +138,16 @@ void TinyUSB_Port_InitDevice(uint8_t rhport) { case 72000000: usb_div = RCC_USBCLKSource_PLLCLK_1Div5; break; +#elif defined(CH32L10x) + case 48000000: + usb_div = RCC_USBCLKSource_PLLCLK_Div1; + break; + case 72000000: + usb_div = RCC_USBCLKSource_PLLCLK_1Div5; + break; + case 96000000: + usb_div = RCC_USBCLKSource_PLLCLK_Div2; + break; #endif default: return; // unsupported @@ -144,11 +159,19 @@ void TinyUSB_Port_InitDevice(uint8_t rhport) { RCC_USBCLKConfig(usb_div); #endif +#endif + #if CFG_TUD_WCH_USBIP_FSDEV RCC_APB1PeriphClockCmd(RCC_APB1Periph_USB, ENABLE); #endif #if CFG_TUD_WCH_USBIP_USBFS +#if defined(CH32X035) +#define RCC_AHBPeriph_OTG_FS RCC_AHBPeriph_USBFS +#elif defined(CH32L10x) +#define RCC_AHBPeriph_OTG_FS RCC_HBPeriph_USBFS +#define RCC_AHBPeriphClockCmd RCC_HBPeriphClockCmd +#endif RCC_AHBPeriphClockCmd(RCC_AHBPeriph_OTG_FS, ENABLE); #endif #endif diff --git a/src/arduino/ports/ch32/tusb_config_ch32.h b/src/arduino/ports/ch32/tusb_config_ch32.h index 15915662..7cd68016 100644 --- a/src/arduino/ports/ch32/tusb_config_ch32.h +++ b/src/arduino/ports/ch32/tusb_config_ch32.h @@ -39,6 +39,10 @@ extern "C" { #define CFG_TUSB_MCU OPT_MCU_CH32V20X #elif defined(CH32V30x) #define CFG_TUSB_MCU OPT_MCU_CH32V307 +#elif defined(CH32X035) +#define CFG_TUSB_MCU OPT_MCU_CH32X035 +#elif defined(CH32L10x) +#define CFG_TUSB_MCU OPT_MCU_CH32L10X #endif #define CFG_TUSB_OS OPT_OS_NONE diff --git a/src/common/tusb_mcu.h b/src/common/tusb_mcu.h index a89d30c7..f8957f20 100644 --- a/src/common/tusb_mcu.h +++ b/src/common/tusb_mcu.h @@ -473,6 +473,16 @@ #define TUP_RHPORT_HIGHSPEED CFG_TUD_WCH_USBIP_USBHS #define TUP_DCD_ENDPOINT_MAX (CFG_TUD_WCH_USBIP_USBHS ? 16 : 8) +#elif TU_CHECK_MCU(OPT_MCU_CH32X035) || TU_CHECK_MCU(OPT_MCU_CH32L10X) + // x035 and l103 support USBFS only + #define TUP_USBIP_WCH_USBFS + + #if !defined(CFG_TUD_WCH_USBIP_USBFS) + #define CFG_TUD_WCH_USBIP_USBFS 1 + #endif + + #define TUP_DCD_ENDPOINT_MAX 8 + //--------------------------------------------------------------------+ // Analog Devices //--------------------------------------------------------------------+ diff --git a/src/portable/wch/ch32_usbfs_reg.h b/src/portable/wch/ch32_usbfs_reg.h index 68be64f5..06361c86 100644 --- a/src/portable/wch/ch32_usbfs_reg.h +++ b/src/portable/wch/ch32_usbfs_reg.h @@ -97,6 +97,10 @@ #elif CFG_TUSB_MCU == OPT_MCU_CH32V307 #include #define USBHD_IRQn OTG_FS_IRQn +#elif CFG_TUSB_MCU == OPT_MCU_CH32X035 + #include +#elif CFG_TUSB_MCU == OPT_MCU_CH32L10X + #include #endif #ifdef __GNUC__ diff --git a/src/tusb_option.h b/src/tusb_option.h index 42f1b6be..4f0b0f5d 100644 --- a/src/tusb_option.h +++ b/src/tusb_option.h @@ -181,8 +181,10 @@ // WCH #define OPT_MCU_CH32V307 2200 ///< WCH CH32V307 #define OPT_MCU_CH32F20X 2210 ///< WCH CH32F20x -#define OPT_MCU_CH32V20X 2220 ///< WCH CH32V20X +#define OPT_MCU_CH32V20X 2220 ///< WCH CH32V20x #define OPT_MCU_CH32V103 2230 ///< WCH CH32V103 +#define OPT_MCU_CH32X035 2240 ///< WCH CH32X035 +#define OPT_MCU_CH32L10X 2250 ///< WCH CH32L10x // NXP LPC MCX #define OPT_MCU_MCXN9 2300 ///< NXP MCX N9 Series From 9c842c58d30576051b0083e73e5531495b7f6bbe Mon Sep 17 00:00:00 2001 From: Koki Mizumoto <21km43@gmail.com> Date: Tue, 10 Sep 2024 13:15:56 +0900 Subject: [PATCH 02/15] typo fix Adafruit_TinyUSB_ch32.cpp --- src/arduino/ports/ch32/Adafruit_TinyUSB_ch32.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/arduino/ports/ch32/Adafruit_TinyUSB_ch32.cpp b/src/arduino/ports/ch32/Adafruit_TinyUSB_ch32.cpp index f4e2d366..a08b4b06 100644 --- a/src/arduino/ports/ch32/Adafruit_TinyUSB_ch32.cpp +++ b/src/arduino/ports/ch32/Adafruit_TinyUSB_ch32.cpp @@ -25,7 +25,7 @@ #include "tusb_option.h" #if CFG_TUD_ENABLED && \ - (defined(ARDUINO_ARCH_CH32) || defined(CH32V20x) || defined(CH32V30x) || defied(CH32X035) || defined(CH32L10x)) + (defined(ARDUINO_ARCH_CH32) || defined(CH32V20x) || defined(CH32V30x) || defined(CH32X035) || defined(CH32L10x)) #include "Arduino.h" #include "arduino/Adafruit_USBD_Device.h" From e8e501fa08ffbea7358de8a8770d26f1ba42a816 Mon Sep 17 00:00:00 2001 From: Koki Mizumoto <21km43@gmail.com> Date: Tue, 10 Sep 2024 13:29:52 +0900 Subject: [PATCH 03/15] typo fix in Adafruit_TinyUSB_ch32.cpp --- src/arduino/ports/ch32/Adafruit_TinyUSB_ch32.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/arduino/ports/ch32/Adafruit_TinyUSB_ch32.cpp b/src/arduino/ports/ch32/Adafruit_TinyUSB_ch32.cpp index a08b4b06..df5032bf 100644 --- a/src/arduino/ports/ch32/Adafruit_TinyUSB_ch32.cpp +++ b/src/arduino/ports/ch32/Adafruit_TinyUSB_ch32.cpp @@ -143,7 +143,7 @@ void TinyUSB_Port_InitDevice(uint8_t rhport) { usb_div = RCC_USBCLKSource_PLLCLK_Div1; break; case 72000000: - usb_div = RCC_USBCLKSource_PLLCLK_1Div5; + usb_div = RCC_USBCLKSource_PLLCLK_Div1_5; break; case 96000000: usb_div = RCC_USBCLKSource_PLLCLK_Div2; From be6aed7c5bc466f5aae52ea32e724c75323198d4 Mon Sep 17 00:00:00 2001 From: Koki Mizumoto <21km43@gmail.com> Date: Tue, 10 Sep 2024 13:44:35 +0900 Subject: [PATCH 04/15] add macro for ch32l103 --- src/portable/wch/ch32_usbfs_reg.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/portable/wch/ch32_usbfs_reg.h b/src/portable/wch/ch32_usbfs_reg.h index 06361c86..cf7357e7 100644 --- a/src/portable/wch/ch32_usbfs_reg.h +++ b/src/portable/wch/ch32_usbfs_reg.h @@ -97,10 +97,10 @@ #elif CFG_TUSB_MCU == OPT_MCU_CH32V307 #include #define USBHD_IRQn OTG_FS_IRQn -#elif CFG_TUSB_MCU == OPT_MCU_CH32X035 - #include #elif CFG_TUSB_MCU == OPT_MCU_CH32L10X #include + #define USBOTG_FS USBFSD + #define USBHD_IRQn USBFS_IRQn #endif #ifdef __GNUC__ From 84e21e8556fcbf8b9e29bef8edb0985760686b2a Mon Sep 17 00:00:00 2001 From: 21km43 <21km43@gmail.com> Date: Tue, 10 Sep 2024 13:43:43 +0900 Subject: [PATCH 05/15] remove ch32x035 --- src/arduino/ports/ch32/Adafruit_TinyUSB_ch32.cpp | 8 +++----- src/arduino/ports/ch32/tusb_config_ch32.h | 2 -- src/common/tusb_mcu.h | 2 +- src/tusb_option.h | 3 +-- 4 files changed, 5 insertions(+), 10 deletions(-) diff --git a/src/arduino/ports/ch32/Adafruit_TinyUSB_ch32.cpp b/src/arduino/ports/ch32/Adafruit_TinyUSB_ch32.cpp index df5032bf..eae0fad7 100644 --- a/src/arduino/ports/ch32/Adafruit_TinyUSB_ch32.cpp +++ b/src/arduino/ports/ch32/Adafruit_TinyUSB_ch32.cpp @@ -25,7 +25,7 @@ #include "tusb_option.h" #if CFG_TUD_ENABLED && \ - (defined(ARDUINO_ARCH_CH32) || defined(CH32V20x) || defined(CH32V30x) || defined(CH32X035) || defined(CH32L10x)) + (defined(ARDUINO_ARCH_CH32) || defined(CH32V20x) || defined(CH32V30x) || defined(CH32L10x)) #include "Arduino.h" #include "arduino/Adafruit_USBD_Device.h" @@ -64,7 +64,7 @@ USBWakeUp_IRQHandler(void) { #if defined(CH32V10x) #define USBHDWakeUp_IRQHandler USBWakeUp_IRQHandler -#elif defined(CH32X035) || defined(CH32L10x) +#elif defined(CH32L10x) #define USBHD_IRQHandler USBFS_IRQHandler #define USBHDWakeUp_IRQHandler USBFSWakeUp_IRQHandler #endif @@ -166,9 +166,7 @@ void TinyUSB_Port_InitDevice(uint8_t rhport) { #endif #if CFG_TUD_WCH_USBIP_USBFS -#if defined(CH32X035) -#define RCC_AHBPeriph_OTG_FS RCC_AHBPeriph_USBFS -#elif defined(CH32L10x) +#if defined(CH32L10x) #define RCC_AHBPeriph_OTG_FS RCC_HBPeriph_USBFS #define RCC_AHBPeriphClockCmd RCC_HBPeriphClockCmd #endif diff --git a/src/arduino/ports/ch32/tusb_config_ch32.h b/src/arduino/ports/ch32/tusb_config_ch32.h index 7cd68016..907f537f 100644 --- a/src/arduino/ports/ch32/tusb_config_ch32.h +++ b/src/arduino/ports/ch32/tusb_config_ch32.h @@ -39,8 +39,6 @@ extern "C" { #define CFG_TUSB_MCU OPT_MCU_CH32V20X #elif defined(CH32V30x) #define CFG_TUSB_MCU OPT_MCU_CH32V307 -#elif defined(CH32X035) -#define CFG_TUSB_MCU OPT_MCU_CH32X035 #elif defined(CH32L10x) #define CFG_TUSB_MCU OPT_MCU_CH32L10X #endif diff --git a/src/common/tusb_mcu.h b/src/common/tusb_mcu.h index f8957f20..cf65589a 100644 --- a/src/common/tusb_mcu.h +++ b/src/common/tusb_mcu.h @@ -473,7 +473,7 @@ #define TUP_RHPORT_HIGHSPEED CFG_TUD_WCH_USBIP_USBHS #define TUP_DCD_ENDPOINT_MAX (CFG_TUD_WCH_USBIP_USBHS ? 16 : 8) -#elif TU_CHECK_MCU(OPT_MCU_CH32X035) || TU_CHECK_MCU(OPT_MCU_CH32L10X) +#elif TU_CHECK_MCU(OPT_MCU_CH32L10X) // x035 and l103 support USBFS only #define TUP_USBIP_WCH_USBFS diff --git a/src/tusb_option.h b/src/tusb_option.h index 4f0b0f5d..da842a00 100644 --- a/src/tusb_option.h +++ b/src/tusb_option.h @@ -183,8 +183,7 @@ #define OPT_MCU_CH32F20X 2210 ///< WCH CH32F20x #define OPT_MCU_CH32V20X 2220 ///< WCH CH32V20x #define OPT_MCU_CH32V103 2230 ///< WCH CH32V103 -#define OPT_MCU_CH32X035 2240 ///< WCH CH32X035 -#define OPT_MCU_CH32L10X 2250 ///< WCH CH32L10x +#define OPT_MCU_CH32L10X 2240 ///< WCH CH32L10x // NXP LPC MCX #define OPT_MCU_MCXN9 2300 ///< NXP MCX N9 Series From 5ae850b97e32388da95b7c5f97b0758077af1546 Mon Sep 17 00:00:00 2001 From: 21km43 <21km43@gmail.com> Date: Tue, 10 Sep 2024 13:45:29 +0900 Subject: [PATCH 06/15] remove unused macro --- src/arduino/ports/ch32/Adafruit_TinyUSB_ch32.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/arduino/ports/ch32/Adafruit_TinyUSB_ch32.cpp b/src/arduino/ports/ch32/Adafruit_TinyUSB_ch32.cpp index eae0fad7..d1da1c32 100644 --- a/src/arduino/ports/ch32/Adafruit_TinyUSB_ch32.cpp +++ b/src/arduino/ports/ch32/Adafruit_TinyUSB_ch32.cpp @@ -117,8 +117,6 @@ void TinyUSB_Port_InitDevice(uint8_t rhport) { #define RCC_AHBPeriph_OTG_FS RCC_AHBPeriph_USBHD #endif -#if defined(CH32V20x) || defined(CH32V30x) || defined(CH32L10x) - uint8_t usb_div; switch (SystemCoreClock) { #if defined(CH32V20x) || defined(CH32V30x) @@ -159,8 +157,6 @@ void TinyUSB_Port_InitDevice(uint8_t rhport) { RCC_USBCLKConfig(usb_div); #endif -#endif - #if CFG_TUD_WCH_USBIP_FSDEV RCC_APB1PeriphClockCmd(RCC_APB1Periph_USB, ENABLE); #endif From 173e45240bf15498992dbb50b45bf3fef59f10ef Mon Sep 17 00:00:00 2001 From: Koki Mizumoto <21km43@gmail.com> Date: Thu, 12 Sep 2024 01:28:51 +0900 Subject: [PATCH 07/15] clang format --- src/arduino/ports/ch32/Adafruit_TinyUSB_ch32.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/arduino/ports/ch32/Adafruit_TinyUSB_ch32.cpp b/src/arduino/ports/ch32/Adafruit_TinyUSB_ch32.cpp index d1da1c32..b3060aca 100644 --- a/src/arduino/ports/ch32/Adafruit_TinyUSB_ch32.cpp +++ b/src/arduino/ports/ch32/Adafruit_TinyUSB_ch32.cpp @@ -24,8 +24,8 @@ #include "tusb_option.h" -#if CFG_TUD_ENABLED && \ - (defined(ARDUINO_ARCH_CH32) || defined(CH32V20x) || defined(CH32V30x) || defined(CH32L10x)) +#if CFG_TUD_ENABLED && (defined(ARDUINO_ARCH_CH32) || defined(CH32V20x) || \ + defined(CH32V30x) || defined(CH32L10x)) #include "Arduino.h" #include "arduino/Adafruit_USBD_Device.h" From 9c10fe81b674fd417c4acd4dfae550dafac41c58 Mon Sep 17 00:00:00 2001 From: Koki Mizumoto <21km43@gmail.com> Date: Thu, 12 Sep 2024 16:12:48 +0900 Subject: [PATCH 08/15] define fix --- src/arduino/ports/ch32/Adafruit_TinyUSB_ch32.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/arduino/ports/ch32/Adafruit_TinyUSB_ch32.cpp b/src/arduino/ports/ch32/Adafruit_TinyUSB_ch32.cpp index b3060aca..e1aa29b7 100644 --- a/src/arduino/ports/ch32/Adafruit_TinyUSB_ch32.cpp +++ b/src/arduino/ports/ch32/Adafruit_TinyUSB_ch32.cpp @@ -60,7 +60,7 @@ USBWakeUp_IRQHandler(void) { // USBFS #if CFG_TUD_WCH_USBIP_USBFS -#if defined(CH32V10x) || defined(CH32V20x) +#if defined(CH32V10x) || defined(CH32V20x) || defined(CH32L10x) #if defined(CH32V10x) #define USBHDWakeUp_IRQHandler USBWakeUp_IRQHandler @@ -115,6 +115,9 @@ void TinyUSB_Port_InitDevice(uint8_t rhport) { EXTEN->EXTEN_CTR &= ~EXTEN_USB_5V_SEL; #define RCC_AHBPeriph_OTG_FS RCC_AHBPeriph_USBHD +#elif defined(CH32L10x) +#define RCC_AHBPeriph_OTG_FS RCC_HBPeriph_USBFS +#define RCC_AHBPeriphClockCmd RCC_HBPeriphClockCmd #endif uint8_t usb_div; @@ -162,10 +165,6 @@ void TinyUSB_Port_InitDevice(uint8_t rhport) { #endif #if CFG_TUD_WCH_USBIP_USBFS -#if defined(CH32L10x) -#define RCC_AHBPeriph_OTG_FS RCC_HBPeriph_USBFS -#define RCC_AHBPeriphClockCmd RCC_HBPeriphClockCmd -#endif RCC_AHBPeriphClockCmd(RCC_AHBPeriph_OTG_FS, ENABLE); #endif #endif From 7fb912fe0446a481e57623b0d72d46bfd9c514a5 Mon Sep 17 00:00:00 2001 From: Koki Mizumoto <21km43@gmail.com> Date: Thu, 12 Sep 2024 20:00:45 +0900 Subject: [PATCH 09/15] usb_div size fix --- src/arduino/ports/ch32/Adafruit_TinyUSB_ch32.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/arduino/ports/ch32/Adafruit_TinyUSB_ch32.cpp b/src/arduino/ports/ch32/Adafruit_TinyUSB_ch32.cpp index e1aa29b7..80a87b90 100644 --- a/src/arduino/ports/ch32/Adafruit_TinyUSB_ch32.cpp +++ b/src/arduino/ports/ch32/Adafruit_TinyUSB_ch32.cpp @@ -120,7 +120,7 @@ void TinyUSB_Port_InitDevice(uint8_t rhport) { #define RCC_AHBPeriphClockCmd RCC_HBPeriphClockCmd #endif - uint8_t usb_div; + uint32_t usb_div; switch (SystemCoreClock) { #if defined(CH32V20x) || defined(CH32V30x) case 48000000: From e73bcf47f9460d755a1387f359c9310b93f30113 Mon Sep 17 00:00:00 2001 From: Koki Mizumoto <21km43@gmail.com> Date: Sun, 15 Sep 2024 18:42:43 +0900 Subject: [PATCH 10/15] add pragma warning --- src/arduino/ports/ch32/tusb_config_ch32.h | 3 ++- src/common/tusb_mcu.h | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/arduino/ports/ch32/tusb_config_ch32.h b/src/arduino/ports/ch32/tusb_config_ch32.h index 907f537f..5d85da86 100644 --- a/src/arduino/ports/ch32/tusb_config_ch32.h +++ b/src/arduino/ports/ch32/tusb_config_ch32.h @@ -34,13 +34,14 @@ extern "C" { //-------------------------------------------------------------------- #if defined(CH32V10x) #define CFG_TUSB_MCU OPT_MCU_CH32V103 -#warnning "CH32v103 is not working yet" +#warnning "CH32V103 is not working yet" #elif defined(CH32V20x) #define CFG_TUSB_MCU OPT_MCU_CH32V20X #elif defined(CH32V30x) #define CFG_TUSB_MCU OPT_MCU_CH32V307 #elif defined(CH32L10x) #define CFG_TUSB_MCU OPT_MCU_CH32L10X +#warnning "CH32L103 is not working yet" #endif #define CFG_TUSB_OS OPT_OS_NONE diff --git a/src/common/tusb_mcu.h b/src/common/tusb_mcu.h index cf65589a..afabae61 100644 --- a/src/common/tusb_mcu.h +++ b/src/common/tusb_mcu.h @@ -474,7 +474,7 @@ #define TUP_DCD_ENDPOINT_MAX (CFG_TUD_WCH_USBIP_USBHS ? 16 : 8) #elif TU_CHECK_MCU(OPT_MCU_CH32L10X) - // x035 and l103 support USBFS only + // l103 support USBFS only #define TUP_USBIP_WCH_USBFS #if !defined(CFG_TUD_WCH_USBIP_USBFS) From 05c213e8d0a6c10c46f7431c9f30607f001c7f93 Mon Sep 17 00:00:00 2001 From: Koki Mizumoto <21km43@gmail.com> Date: Sun, 15 Sep 2024 21:09:10 +0900 Subject: [PATCH 11/15] Typo tusb_config_ch32.h --- src/arduino/ports/ch32/tusb_config_ch32.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/arduino/ports/ch32/tusb_config_ch32.h b/src/arduino/ports/ch32/tusb_config_ch32.h index 5d85da86..9b41ebd8 100644 --- a/src/arduino/ports/ch32/tusb_config_ch32.h +++ b/src/arduino/ports/ch32/tusb_config_ch32.h @@ -34,14 +34,14 @@ extern "C" { //-------------------------------------------------------------------- #if defined(CH32V10x) #define CFG_TUSB_MCU OPT_MCU_CH32V103 -#warnning "CH32V103 is not working yet" +#warning "CH32V103 is not working yet" #elif defined(CH32V20x) #define CFG_TUSB_MCU OPT_MCU_CH32V20X #elif defined(CH32V30x) #define CFG_TUSB_MCU OPT_MCU_CH32V307 #elif defined(CH32L10x) #define CFG_TUSB_MCU OPT_MCU_CH32L10X -#warnning "CH32L103 is not working yet" +#warning "CH32L103 is not working yet" #endif #define CFG_TUSB_OS OPT_OS_NONE From 5360d1728eb103206559ebd566924bd3d4036b31 Mon Sep 17 00:00:00 2001 From: 21km43 <21km43@gmail.com> Date: Mon, 9 Sep 2024 23:03:29 +0900 Subject: [PATCH 12/15] add ch32x035 and ch32l103 support typo fix Adafruit_TinyUSB_ch32.cpp typo fix in Adafruit_TinyUSB_ch32.cpp add macro for ch32l103 remove ch32x035 remove unused macro clang format define fix usb_div size fix add pragma warning Typo tusb_config_ch32.h --- .../ports/ch32/Adafruit_TinyUSB_ch32.cpp | 24 +++++++++++++++---- src/arduino/ports/ch32/tusb_config_ch32.h | 5 +++- src/common/tusb_mcu.h | 10 ++++++++ src/portable/wch/ch32_usbfs_reg.h | 4 ++++ src/tusb_option.h | 3 ++- 5 files changed, 40 insertions(+), 6 deletions(-) diff --git a/src/arduino/ports/ch32/Adafruit_TinyUSB_ch32.cpp b/src/arduino/ports/ch32/Adafruit_TinyUSB_ch32.cpp index 03e4dcdf..80a87b90 100644 --- a/src/arduino/ports/ch32/Adafruit_TinyUSB_ch32.cpp +++ b/src/arduino/ports/ch32/Adafruit_TinyUSB_ch32.cpp @@ -24,8 +24,8 @@ #include "tusb_option.h" -#if CFG_TUD_ENABLED && \ - (defined(ARDUINO_ARCH_CH32) || defined(CH32V20x) || defined(CH32V30x)) +#if CFG_TUD_ENABLED && (defined(ARDUINO_ARCH_CH32) || defined(CH32V20x) || \ + defined(CH32V30x) || defined(CH32L10x)) #include "Arduino.h" #include "arduino/Adafruit_USBD_Device.h" @@ -60,10 +60,13 @@ USBWakeUp_IRQHandler(void) { // USBFS #if CFG_TUD_WCH_USBIP_USBFS -#if defined(CH32V10x) || defined(CH32V20x) +#if defined(CH32V10x) || defined(CH32V20x) || defined(CH32L10x) #if defined(CH32V10x) #define USBHDWakeUp_IRQHandler USBWakeUp_IRQHandler +#elif defined(CH32L10x) +#define USBHD_IRQHandler USBFS_IRQHandler +#define USBHDWakeUp_IRQHandler USBFSWakeUp_IRQHandler #endif __attribute__((interrupt("WCH-Interrupt-fast"))) void USBHD_IRQHandler(void) { @@ -112,9 +115,12 @@ void TinyUSB_Port_InitDevice(uint8_t rhport) { EXTEN->EXTEN_CTR &= ~EXTEN_USB_5V_SEL; #define RCC_AHBPeriph_OTG_FS RCC_AHBPeriph_USBHD +#elif defined(CH32L10x) +#define RCC_AHBPeriph_OTG_FS RCC_HBPeriph_USBFS +#define RCC_AHBPeriphClockCmd RCC_HBPeriphClockCmd #endif - uint8_t usb_div; + uint32_t usb_div; switch (SystemCoreClock) { #if defined(CH32V20x) || defined(CH32V30x) case 48000000: @@ -133,6 +139,16 @@ void TinyUSB_Port_InitDevice(uint8_t rhport) { case 72000000: usb_div = RCC_USBCLKSource_PLLCLK_1Div5; break; +#elif defined(CH32L10x) + case 48000000: + usb_div = RCC_USBCLKSource_PLLCLK_Div1; + break; + case 72000000: + usb_div = RCC_USBCLKSource_PLLCLK_Div1_5; + break; + case 96000000: + usb_div = RCC_USBCLKSource_PLLCLK_Div2; + break; #endif default: return; // unsupported diff --git a/src/arduino/ports/ch32/tusb_config_ch32.h b/src/arduino/ports/ch32/tusb_config_ch32.h index 15915662..9b41ebd8 100644 --- a/src/arduino/ports/ch32/tusb_config_ch32.h +++ b/src/arduino/ports/ch32/tusb_config_ch32.h @@ -34,11 +34,14 @@ extern "C" { //-------------------------------------------------------------------- #if defined(CH32V10x) #define CFG_TUSB_MCU OPT_MCU_CH32V103 -#warnning "CH32v103 is not working yet" +#warning "CH32V103 is not working yet" #elif defined(CH32V20x) #define CFG_TUSB_MCU OPT_MCU_CH32V20X #elif defined(CH32V30x) #define CFG_TUSB_MCU OPT_MCU_CH32V307 +#elif defined(CH32L10x) +#define CFG_TUSB_MCU OPT_MCU_CH32L10X +#warning "CH32L103 is not working yet" #endif #define CFG_TUSB_OS OPT_OS_NONE diff --git a/src/common/tusb_mcu.h b/src/common/tusb_mcu.h index a89d30c7..afabae61 100644 --- a/src/common/tusb_mcu.h +++ b/src/common/tusb_mcu.h @@ -473,6 +473,16 @@ #define TUP_RHPORT_HIGHSPEED CFG_TUD_WCH_USBIP_USBHS #define TUP_DCD_ENDPOINT_MAX (CFG_TUD_WCH_USBIP_USBHS ? 16 : 8) +#elif TU_CHECK_MCU(OPT_MCU_CH32L10X) + // l103 support USBFS only + #define TUP_USBIP_WCH_USBFS + + #if !defined(CFG_TUD_WCH_USBIP_USBFS) + #define CFG_TUD_WCH_USBIP_USBFS 1 + #endif + + #define TUP_DCD_ENDPOINT_MAX 8 + //--------------------------------------------------------------------+ // Analog Devices //--------------------------------------------------------------------+ diff --git a/src/portable/wch/ch32_usbfs_reg.h b/src/portable/wch/ch32_usbfs_reg.h index 68be64f5..cf7357e7 100644 --- a/src/portable/wch/ch32_usbfs_reg.h +++ b/src/portable/wch/ch32_usbfs_reg.h @@ -97,6 +97,10 @@ #elif CFG_TUSB_MCU == OPT_MCU_CH32V307 #include #define USBHD_IRQn OTG_FS_IRQn +#elif CFG_TUSB_MCU == OPT_MCU_CH32L10X + #include + #define USBOTG_FS USBFSD + #define USBHD_IRQn USBFS_IRQn #endif #ifdef __GNUC__ diff --git a/src/tusb_option.h b/src/tusb_option.h index 42f1b6be..da842a00 100644 --- a/src/tusb_option.h +++ b/src/tusb_option.h @@ -181,8 +181,9 @@ // WCH #define OPT_MCU_CH32V307 2200 ///< WCH CH32V307 #define OPT_MCU_CH32F20X 2210 ///< WCH CH32F20x -#define OPT_MCU_CH32V20X 2220 ///< WCH CH32V20X +#define OPT_MCU_CH32V20X 2220 ///< WCH CH32V20x #define OPT_MCU_CH32V103 2230 ///< WCH CH32V103 +#define OPT_MCU_CH32L10X 2240 ///< WCH CH32L10x // NXP LPC MCX #define OPT_MCU_MCXN9 2300 ///< NXP MCX N9 Series From ddf059ad32fdb6dbc7192130f67cc35fa674d162 Mon Sep 17 00:00:00 2001 From: Koki Mizumoto <21km43@gmail.com> Date: Wed, 25 Sep 2024 20:42:38 +0900 Subject: [PATCH 13/15] ch32x035 --- src/arduino/ports/ch32/Adafruit_TinyUSB_ch32.cpp | 12 +++++++++--- src/arduino/ports/ch32/tusb_config_ch32.h | 2 ++ src/common/tusb_mcu.h | 4 ++-- src/portable/wch/ch32_usbfs_reg.h | 5 +++++ src/tusb_option.h | 3 ++- 5 files changed, 20 insertions(+), 6 deletions(-) diff --git a/src/arduino/ports/ch32/Adafruit_TinyUSB_ch32.cpp b/src/arduino/ports/ch32/Adafruit_TinyUSB_ch32.cpp index 80a87b90..bd31f942 100644 --- a/src/arduino/ports/ch32/Adafruit_TinyUSB_ch32.cpp +++ b/src/arduino/ports/ch32/Adafruit_TinyUSB_ch32.cpp @@ -25,7 +25,8 @@ #include "tusb_option.h" #if CFG_TUD_ENABLED && (defined(ARDUINO_ARCH_CH32) || defined(CH32V20x) || \ - defined(CH32V30x) || defined(CH32L10x)) + defined(CH32V30x) || defined(CH32X035) || \ + defined(CH32L10x)) #include "Arduino.h" #include "arduino/Adafruit_USBD_Device.h" @@ -64,7 +65,7 @@ USBWakeUp_IRQHandler(void) { #if defined(CH32V10x) #define USBHDWakeUp_IRQHandler USBWakeUp_IRQHandler -#elif defined(CH32L10x) +#elif defined(CH32X035) || defined(CH32L10x) #define USBHD_IRQHandler USBFS_IRQHandler #define USBHDWakeUp_IRQHandler USBFSWakeUp_IRQHandler #endif @@ -115,6 +116,8 @@ void TinyUSB_Port_InitDevice(uint8_t rhport) { EXTEN->EXTEN_CTR &= ~EXTEN_USB_5V_SEL; #define RCC_AHBPeriph_OTG_FS RCC_AHBPeriph_USBHD +#elif defined(CH32X035) +#define RCC_AHBPeriph_OTG_FS RCC_AHBPeriph_USBFS #elif defined(CH32L10x) #define RCC_AHBPeriph_OTG_FS RCC_HBPeriph_USBFS #define RCC_AHBPeriphClockCmd RCC_HBPeriphClockCmd @@ -139,6 +142,9 @@ void TinyUSB_Port_InitDevice(uint8_t rhport) { case 72000000: usb_div = RCC_USBCLKSource_PLLCLK_1Div5; break; +#elif defined(CH32X035) + case 48000000: + break; #elif defined(CH32L10x) case 48000000: usb_div = RCC_USBCLKSource_PLLCLK_Div1; @@ -156,7 +162,7 @@ void TinyUSB_Port_InitDevice(uint8_t rhport) { #if defined(CH32V30x) RCC_OTGFSCLKConfig(usb_div); -#else +#else !defined(CH32X035) RCC_USBCLKConfig(usb_div); #endif diff --git a/src/arduino/ports/ch32/tusb_config_ch32.h b/src/arduino/ports/ch32/tusb_config_ch32.h index 9b41ebd8..d56d0367 100644 --- a/src/arduino/ports/ch32/tusb_config_ch32.h +++ b/src/arduino/ports/ch32/tusb_config_ch32.h @@ -39,6 +39,8 @@ extern "C" { #define CFG_TUSB_MCU OPT_MCU_CH32V20X #elif defined(CH32V30x) #define CFG_TUSB_MCU OPT_MCU_CH32V307 +#elif defined(CH32X035) +#define CFG_TUSB_MCU OPT_MCU_CH32X035 #elif defined(CH32L10x) #define CFG_TUSB_MCU OPT_MCU_CH32L10X #warning "CH32L103 is not working yet" diff --git a/src/common/tusb_mcu.h b/src/common/tusb_mcu.h index afabae61..f8957f20 100644 --- a/src/common/tusb_mcu.h +++ b/src/common/tusb_mcu.h @@ -473,8 +473,8 @@ #define TUP_RHPORT_HIGHSPEED CFG_TUD_WCH_USBIP_USBHS #define TUP_DCD_ENDPOINT_MAX (CFG_TUD_WCH_USBIP_USBHS ? 16 : 8) -#elif TU_CHECK_MCU(OPT_MCU_CH32L10X) - // l103 support USBFS only +#elif TU_CHECK_MCU(OPT_MCU_CH32X035) || TU_CHECK_MCU(OPT_MCU_CH32L10X) + // x035 and l103 support USBFS only #define TUP_USBIP_WCH_USBFS #if !defined(CFG_TUD_WCH_USBIP_USBFS) diff --git a/src/portable/wch/ch32_usbfs_reg.h b/src/portable/wch/ch32_usbfs_reg.h index cf7357e7..7f9aac9f 100644 --- a/src/portable/wch/ch32_usbfs_reg.h +++ b/src/portable/wch/ch32_usbfs_reg.h @@ -97,6 +97,11 @@ #elif CFG_TUSB_MCU == OPT_MCU_CH32V307 #include #define USBHD_IRQn OTG_FS_IRQn +#elif CFG_TUSB_MCU == OPT_MCU_CH32X035 + #include + #define USBOTG_FS USBFSD + #define USBHD_IRQn USBFS_IRQn +#endif #elif CFG_TUSB_MCU == OPT_MCU_CH32L10X #include #define USBOTG_FS USBFSD diff --git a/src/tusb_option.h b/src/tusb_option.h index da842a00..4f0b0f5d 100644 --- a/src/tusb_option.h +++ b/src/tusb_option.h @@ -183,7 +183,8 @@ #define OPT_MCU_CH32F20X 2210 ///< WCH CH32F20x #define OPT_MCU_CH32V20X 2220 ///< WCH CH32V20x #define OPT_MCU_CH32V103 2230 ///< WCH CH32V103 -#define OPT_MCU_CH32L10X 2240 ///< WCH CH32L10x +#define OPT_MCU_CH32X035 2240 ///< WCH CH32X035 +#define OPT_MCU_CH32L10X 2250 ///< WCH CH32L10x // NXP LPC MCX #define OPT_MCU_MCXN9 2300 ///< NXP MCX N9 Series From f54331b636f169046dc2176eb329df5aec12302b Mon Sep 17 00:00:00 2001 From: Koki Mizumoto <21km43@gmail.com> Date: Wed, 25 Sep 2024 20:46:03 +0900 Subject: [PATCH 14/15] clang --- src/arduino/ports/ch32/Adafruit_TinyUSB_ch32.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/arduino/ports/ch32/Adafruit_TinyUSB_ch32.cpp b/src/arduino/ports/ch32/Adafruit_TinyUSB_ch32.cpp index bd31f942..8e5179c5 100644 --- a/src/arduino/ports/ch32/Adafruit_TinyUSB_ch32.cpp +++ b/src/arduino/ports/ch32/Adafruit_TinyUSB_ch32.cpp @@ -24,9 +24,9 @@ #include "tusb_option.h" -#if CFG_TUD_ENABLED && (defined(ARDUINO_ARCH_CH32) || defined(CH32V20x) || \ - defined(CH32V30x) || defined(CH32X035) || \ - defined(CH32L10x)) +#if CFG_TUD_ENABLED && \ + (defined(ARDUINO_ARCH_CH32) || defined(CH32V20x) || defined(CH32V30x) || \ + defined(CH32X035) || defined(CH32L10x)) #include "Arduino.h" #include "arduino/Adafruit_USBD_Device.h" From ddfd21daa94f66783dd6d1b93ec39b82af1bc29a Mon Sep 17 00:00:00 2001 From: Koki Mizumoto <21km43@gmail.com> Date: Thu, 26 Sep 2024 16:18:49 +0900 Subject: [PATCH 15/15] typo fix --- src/arduino/ports/ch32/Adafruit_TinyUSB_ch32.cpp | 2 +- src/portable/wch/ch32_usbfs_reg.h | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/arduino/ports/ch32/Adafruit_TinyUSB_ch32.cpp b/src/arduino/ports/ch32/Adafruit_TinyUSB_ch32.cpp index 8e5179c5..4530fee9 100644 --- a/src/arduino/ports/ch32/Adafruit_TinyUSB_ch32.cpp +++ b/src/arduino/ports/ch32/Adafruit_TinyUSB_ch32.cpp @@ -162,7 +162,7 @@ void TinyUSB_Port_InitDevice(uint8_t rhport) { #if defined(CH32V30x) RCC_OTGFSCLKConfig(usb_div); -#else !defined(CH32X035) +#elif !defined(CH32X035) RCC_USBCLKConfig(usb_div); #endif diff --git a/src/portable/wch/ch32_usbfs_reg.h b/src/portable/wch/ch32_usbfs_reg.h index 7f9aac9f..589634ed 100644 --- a/src/portable/wch/ch32_usbfs_reg.h +++ b/src/portable/wch/ch32_usbfs_reg.h @@ -101,7 +101,6 @@ #include #define USBOTG_FS USBFSD #define USBHD_IRQn USBFS_IRQn -#endif #elif CFG_TUSB_MCU == OPT_MCU_CH32L10X #include #define USBOTG_FS USBFSD