diff options
Diffstat (limited to 'tmk_core/common')
| -rw-r--r-- | tmk_core/common/chibios/bootloader.c | 22 | ||||
| -rw-r--r-- | tmk_core/common/chibios/chibios_config.h | 19 | ||||
| -rw-r--r-- | tmk_core/common/chibios/eeprom_stm32_defs.h | 6 | ||||
| -rw-r--r-- | tmk_core/common/chibios/flash_stm32.c | 5 | ||||
| -rw-r--r-- | tmk_core/common/chibios/gd32v_compatibility.h | 120 | ||||
| -rw-r--r-- | tmk_core/common/chibios/syscall-fallbacks.c | 6 |
6 files changed, 176 insertions, 2 deletions
diff --git a/tmk_core/common/chibios/bootloader.c b/tmk_core/common/chibios/bootloader.c index f9514ee5f..5cadadeee 100644 --- a/tmk_core/common/chibios/bootloader.c +++ b/tmk_core/common/chibios/bootloader.c | |||
| @@ -95,6 +95,28 @@ void enter_bootloader_mode_if_requested(void) { | |||
| 95 | } | 95 | } |
| 96 | } | 96 | } |
| 97 | 97 | ||
| 98 | #elif defined(GD32VF103) | ||
| 99 | |||
| 100 | # define DBGMCU_KEY_UNLOCK 0x4B5A6978 | ||
| 101 | # define DBGMCU_CMD_RESET 0x1 | ||
| 102 | |||
| 103 | __IO uint32_t *DBGMCU_KEY = (uint32_t *)DBGMCU_BASE + 0x0CU; | ||
| 104 | __IO uint32_t *DBGMCU_CMD = (uint32_t *)DBGMCU_BASE + 0x08U; | ||
| 105 | |||
| 106 | __attribute__((weak)) void bootloader_jump(void) { | ||
| 107 | /* The MTIMER unit of the GD32VF103 doesn't have the MSFRST | ||
| 108 | * register to generate a software reset request. | ||
| 109 | * BUT instead two undocumented registers in the debug peripheral | ||
| 110 | * that allow issueing a software reset. WHO would need the MSFRST | ||
| 111 | * register anyway? Source: | ||
| 112 | * https://github.com/esmil/gd32vf103inator/blob/master/include/gd32vf103/dbg.h */ | ||
| 113 | *DBGMCU_KEY = DBGMCU_KEY_UNLOCK; | ||
| 114 | *DBGMCU_CMD = DBGMCU_CMD_RESET; | ||
| 115 | } | ||
| 116 | |||
| 117 | void enter_bootloader_mode_if_requested(void) { /* Jumping to bootloader is not possible from user code. */ | ||
| 118 | } | ||
| 119 | |||
| 98 | #elif defined(KL2x) || defined(K20x) || defined(MK66F18) || defined(MIMXRT1062) // STM32_BOOTLOADER_DUAL_BANK // STM32_BOOTLOADER_ADDRESS | 120 | #elif defined(KL2x) || defined(K20x) || defined(MK66F18) || defined(MIMXRT1062) // STM32_BOOTLOADER_DUAL_BANK // STM32_BOOTLOADER_ADDRESS |
| 99 | /* Kinetis */ | 121 | /* Kinetis */ |
| 100 | 122 | ||
diff --git a/tmk_core/common/chibios/chibios_config.h b/tmk_core/common/chibios/chibios_config.h index f06594802..ad2f808a9 100644 --- a/tmk_core/common/chibios/chibios_config.h +++ b/tmk_core/common/chibios/chibios_config.h | |||
| @@ -39,6 +39,25 @@ | |||
| 39 | # endif | 39 | # endif |
| 40 | #endif | 40 | #endif |
| 41 | 41 | ||
| 42 | // GD32 compatibility | ||
| 43 | #if defined(MCU_GD32V) | ||
| 44 | # define CPU_CLOCK GD32_SYSCLK | ||
| 45 | |||
| 46 | # if defined(GD32VF103) | ||
| 47 | # define USE_GPIOV1 | ||
| 48 | # define USE_I2CV1 | ||
| 49 | # define PAL_MODE_ALTERNATE_OPENDRAIN PAL_MODE_GD32_ALTERNATE_OPENDRAIN | ||
| 50 | # define PAL_MODE_ALTERNATE_PUSHPULL PAL_MODE_GD32_ALTERNATE_PUSHPULL | ||
| 51 | # endif | ||
| 52 | #endif | ||
| 53 | |||
| 54 | #if defined(GD32VF103) | ||
| 55 | /* This chip has the same API as STM32F103, but uses different names for literally the same thing. | ||
| 56 | * As of 4.7.2021 QMK is tailored to use STM32 defines/names, for compatibility sake | ||
| 57 | * we just redefine the GD32 names. */ | ||
| 58 | # include "gd32v_compatibility.h" | ||
| 59 | #endif | ||
| 60 | |||
| 42 | // teensy compatibility | 61 | // teensy compatibility |
| 43 | #if defined(MCU_KINETIS) | 62 | #if defined(MCU_KINETIS) |
| 44 | # define CPU_CLOCK KINETIS_SYSCLK_FREQUENCY | 63 | # define CPU_CLOCK KINETIS_SYSCLK_FREQUENCY |
diff --git a/tmk_core/common/chibios/eeprom_stm32_defs.h b/tmk_core/common/chibios/eeprom_stm32_defs.h index 349979626..66904f247 100644 --- a/tmk_core/common/chibios/eeprom_stm32_defs.h +++ b/tmk_core/common/chibios/eeprom_stm32_defs.h | |||
| @@ -18,7 +18,7 @@ | |||
| 18 | #include <hal.h> | 18 | #include <hal.h> |
| 19 | 19 | ||
| 20 | #if !defined(FEE_PAGE_SIZE) || !defined(FEE_PAGE_COUNT) | 20 | #if !defined(FEE_PAGE_SIZE) || !defined(FEE_PAGE_COUNT) |
| 21 | # if defined(STM32F103xB) || defined(STM32F042x6) | 21 | # if defined(STM32F103xB) || defined(STM32F042x6) || defined(GD32VF103C8) || defined(GD32VF103CB) |
| 22 | # ifndef FEE_PAGE_SIZE | 22 | # ifndef FEE_PAGE_SIZE |
| 23 | # define FEE_PAGE_SIZE 0x400 // Page size = 1KByte | 23 | # define FEE_PAGE_SIZE 0x400 // Page size = 1KByte |
| 24 | # endif | 24 | # endif |
| @@ -45,7 +45,9 @@ | |||
| 45 | #if !defined(FEE_MCU_FLASH_SIZE) | 45 | #if !defined(FEE_MCU_FLASH_SIZE) |
| 46 | # if defined(STM32F042x6) | 46 | # if defined(STM32F042x6) |
| 47 | # define FEE_MCU_FLASH_SIZE 32 // Size in Kb | 47 | # define FEE_MCU_FLASH_SIZE 32 // Size in Kb |
| 48 | # elif defined(STM32F103xB) || defined(STM32F072xB) || defined(STM32F070xB) | 48 | # elif defined(GD32VF103C8) |
| 49 | # define FEE_MCU_FLASH_SIZE 64 // Size in Kb | ||
| 50 | # elif defined(STM32F103xB) || defined(STM32F072xB) || defined(STM32F070xB) || defined(GD32VF103CB) | ||
| 49 | # define FEE_MCU_FLASH_SIZE 128 // Size in Kb | 51 | # define FEE_MCU_FLASH_SIZE 128 // Size in Kb |
| 50 | # elif defined(STM32F303xC) || defined(STM32F401xC) | 52 | # elif defined(STM32F303xC) || defined(STM32F401xC) |
| 51 | # define FEE_MCU_FLASH_SIZE 256 // Size in Kb | 53 | # define FEE_MCU_FLASH_SIZE 256 // Size in Kb |
diff --git a/tmk_core/common/chibios/flash_stm32.c b/tmk_core/common/chibios/flash_stm32.c index 35fb0eebd..72c41b8b7 100644 --- a/tmk_core/common/chibios/flash_stm32.c +++ b/tmk_core/common/chibios/flash_stm32.c | |||
| @@ -23,6 +23,11 @@ | |||
| 23 | # define FLASH_SR_WRPERR FLASH_SR_WRPRTERR | 23 | # define FLASH_SR_WRPERR FLASH_SR_WRPRTERR |
| 24 | #endif | 24 | #endif |
| 25 | 25 | ||
| 26 | #if defined(MCU_GD32V) | ||
| 27 | /* GigaDevice GD32VF103 is a STM32F103 clone at heart. */ | ||
| 28 | # include "gd32v_compatibility.h" | ||
| 29 | #endif | ||
| 30 | |||
| 26 | #if defined(STM32F4XX) | 31 | #if defined(STM32F4XX) |
| 27 | # define FLASH_SR_PGERR (FLASH_SR_PGSERR | FLASH_SR_PGPERR | FLASH_SR_PGAERR) | 32 | # define FLASH_SR_PGERR (FLASH_SR_PGSERR | FLASH_SR_PGPERR | FLASH_SR_PGAERR) |
| 28 | 33 | ||
diff --git a/tmk_core/common/chibios/gd32v_compatibility.h b/tmk_core/common/chibios/gd32v_compatibility.h new file mode 100644 index 000000000..f4dcfd8c5 --- /dev/null +++ b/tmk_core/common/chibios/gd32v_compatibility.h | |||
| @@ -0,0 +1,120 @@ | |||
| 1 | /* Copyright 2021 QMK | ||
| 2 | * | ||
| 3 | * This program is free software: you can redistribute it and/or modify | ||
| 4 | * it under the terms of the GNU General Public License as published by | ||
| 5 | * the Free Software Foundation, either version 2 of the License, or | ||
| 6 | * (at your option) any later version. | ||
| 7 | * | ||
| 8 | * This program is distributed in the hope that it will be useful, | ||
| 9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 11 | * GNU General Public License for more details. | ||
| 12 | * | ||
| 13 | * You should have received a copy of the GNU General Public License | ||
| 14 | * along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
| 15 | */ | ||
| 16 | |||
| 17 | #pragma once | ||
| 18 | |||
| 19 | /* GD32VF103 has the same API as STM32F103, but uses different names for literally the same thing. | ||
| 20 | * As of 23.7.2021 QMK is tailored to use STM32 defines/names, for compatibility sake | ||
| 21 | * we just redefine the GD32 names. */ | ||
| 22 | |||
| 23 | /* Close your eyes kids. */ | ||
| 24 | #define MCU_STM32 | ||
| 25 | |||
| 26 | /* AFIO redefines */ | ||
| 27 | #define MAPR PCF0 | ||
| 28 | #define AFIO_MAPR_USART1_REMAP AFIO_PCF0_USART0_REMAP | ||
| 29 | #define AFIO_MAPR_USART2_REMAP AFIO_PCF0_USART1_REMAP | ||
| 30 | #define AFIO_MAPR_USART3_REMAP_PARTIALREMAP AFIO_PCF0_USART2_REMAP_PARTIALREMAP | ||
| 31 | #define AFIO_MAPR_USART3_REMAP_FULLREMAP AFIO_PCF0_USART2_REMAP_FULLREMAP | ||
| 32 | |||
| 33 | /* DMA redefines. */ | ||
| 34 | #define STM32_DMA_STREAM(stream) GD32_DMA_STREAM(stream) | ||
| 35 | #define STM32_DMA_STREAM_ID(peripheral, channel) GD32_DMA_STREAM_ID(peripheral - 1, channel - 1) | ||
| 36 | #define STM32_DMA_CR_DIR_M2P GD32_DMA_CTL_DIR_M2P | ||
| 37 | #define STM32_DMA_CR_PSIZE_WORD GD32_DMA_CTL_PWIDTH_WORD | ||
| 38 | #define STM32_DMA_CR_MSIZE_WORD GD32_DMA_CTL_MWIDTH_WORD | ||
| 39 | #define STM32_DMA_CR_MINC GD32_DMA_CTL_MNAGA | ||
| 40 | #define STM32_DMA_CR_CIRC GD32_DMA_CTL_CMEN | ||
| 41 | #define STM32_DMA_CR_PL GD32_DMA_CTL_PRIO | ||
| 42 | #define STM32_DMA_CR_CHSEL GD32_DMA_CTL_CHSEL | ||
| 43 | #define cr1 ctl0 | ||
| 44 | #define cr2 ctl1 | ||
| 45 | #define cr3 ctl2 | ||
| 46 | #define dier dmainten | ||
| 47 | |||
| 48 | /* ADC redefines */ | ||
| 49 | #if HAL_USE_ADC | ||
| 50 | # define STM32_ADC_USE_ADC1 GD32_ADC_USE_ADC0 | ||
| 51 | |||
| 52 | # define smpr1 sampt0 | ||
| 53 | # define smpr2 sampt1 | ||
| 54 | # define sqr1 rsq0 | ||
| 55 | # define sqr2 rsq1 | ||
| 56 | # define sqr3 rsq2 | ||
| 57 | |||
| 58 | # define ADC_SMPR2_SMP_AN0 ADC_SAMPT1_SMP_SPT0 | ||
| 59 | # define ADC_SMPR2_SMP_AN1 ADC_SAMPT1_SMP_SPT1 | ||
| 60 | # define ADC_SMPR2_SMP_AN2 ADC_SAMPT1_SMP_SPT2 | ||
| 61 | # define ADC_SMPR2_SMP_AN3 ADC_SAMPT1_SMP_SPT3 | ||
| 62 | # define ADC_SMPR2_SMP_AN4 ADC_SAMPT1_SMP_SPT4 | ||
| 63 | # define ADC_SMPR2_SMP_AN5 ADC_SAMPT1_SMP_SPT5 | ||
| 64 | # define ADC_SMPR2_SMP_AN6 ADC_SAMPT1_SMP_SPT6 | ||
| 65 | # define ADC_SMPR2_SMP_AN7 ADC_SAMPT1_SMP_SPT7 | ||
| 66 | # define ADC_SMPR2_SMP_AN8 ADC_SAMPT1_SMP_SPT8 | ||
| 67 | # define ADC_SMPR2_SMP_AN9 ADC_SAMPT1_SMP_SPT9 | ||
| 68 | |||
| 69 | # define ADC_SMPR1_SMP_AN10 ADC_SAMPT0_SMP_SPT10 | ||
| 70 | # define ADC_SMPR1_SMP_AN11 ADC_SAMPT0_SMP_SPT11 | ||
| 71 | # define ADC_SMPR1_SMP_AN12 ADC_SAMPT0_SMP_SPT12 | ||
| 72 | # define ADC_SMPR1_SMP_AN13 ADC_SAMPT0_SMP_SPT13 | ||
| 73 | # define ADC_SMPR1_SMP_AN14 ADC_SAMPT0_SMP_SPT14 | ||
| 74 | # define ADC_SMPR1_SMP_AN15 ADC_SAMPT0_SMP_SPT15 | ||
| 75 | |||
| 76 | # define ADC_SQR3_SQ1_N ADC_RSQ2_RSQ1_N | ||
| 77 | #endif | ||
| 78 | |||
| 79 | /* FLASH redefines */ | ||
| 80 | #if defined(EEPROM_ENABLE) | ||
| 81 | # define SR STAT | ||
| 82 | # define FLASH_SR_BSY FLASH_STAT_BUSY | ||
| 83 | # define FLASH_SR_PGERR FLASH_STAT_PGERR | ||
| 84 | # define FLASH_SR_EOP FLASH_STAT_ENDF | ||
| 85 | # define FLASH_SR_WRPRTERR FLASH_STAT_WPERR | ||
| 86 | # define FLASH_SR_WRPERR FLASH_SR_WRPRTERR | ||
| 87 | # define FLASH_OBR_OPTERR FLASH_OBSTAT_OBERR | ||
| 88 | # define AR ADDR | ||
| 89 | # define CR CTL | ||
| 90 | # define FLASH_CR_PER FLASH_CTL_PER | ||
| 91 | # define FLASH_CR_STRT FLASH_CTL_START | ||
| 92 | # define FLASH_CR_LOCK FLASH_CTL_LK | ||
| 93 | # define FLASH_CR_PG FLASH_CTL_PG | ||
| 94 | # define KEYR KEY | ||
| 95 | #endif | ||
| 96 | |||
| 97 | /* Serial USART redefines. */ | ||
| 98 | #if HAL_USE_SERIAL | ||
| 99 | # if !defined(SERIAL_USART_CR1) | ||
| 100 | # define SERIAL_USART_CR1 (USART_CTL0_PCEN | USART_CTL0_PM | USART_CTL0_WL) // parity enable, odd parity, 9 bit length | ||
| 101 | # endif | ||
| 102 | # if !defined(SERIAL_USART_CR2) | ||
| 103 | # define SERIAL_USART_CR2 (USART_CTL1_STB_1) // 2 stop bits | ||
| 104 | # endif | ||
| 105 | # if !defined(SERIAL_USART_CR3) | ||
| 106 | # define SERIAL_USART_CR3 0x0 | ||
| 107 | # endif | ||
| 108 | # define USART_CR3_HDSEL USART_CTL2_HDEN | ||
| 109 | # define CCR CHCV | ||
| 110 | #endif | ||
| 111 | |||
| 112 | /* SPI redefines. */ | ||
| 113 | #if HAL_USE_SPI | ||
| 114 | # define SPI_CR1_LSBFIRST SPI_CTL0_LF | ||
| 115 | # define SPI_CR1_CPHA SPI_CTL0_CKPH | ||
| 116 | # define SPI_CR1_CPOL SPI_CTL0_CKPL | ||
| 117 | # define SPI_CR1_BR_0 SPI_CTL0_PSC_0 | ||
| 118 | # define SPI_CR1_BR_1 SPI_CTL0_PSC_1 | ||
| 119 | # define SPI_CR1_BR_2 SPI_CTL0_PSC_2 | ||
| 120 | #endif | ||
diff --git a/tmk_core/common/chibios/syscall-fallbacks.c b/tmk_core/common/chibios/syscall-fallbacks.c index 739017ae1..4569879c7 100644 --- a/tmk_core/common/chibios/syscall-fallbacks.c +++ b/tmk_core/common/chibios/syscall-fallbacks.c | |||
| @@ -18,6 +18,12 @@ | |||
| 18 | #include <sys/stat.h> | 18 | #include <sys/stat.h> |
| 19 | #include <sys/types.h> | 19 | #include <sys/types.h> |
| 20 | 20 | ||
| 21 | /* To compile the ChibiOS syscall stubs with picolibc | ||
| 22 | * the _reent struct has to be defined. */ | ||
| 23 | #if defined(USE_PICOLIBC) | ||
| 24 | struct _reent; | ||
| 25 | #endif | ||
| 26 | |||
| 21 | #pragma GCC diagnostic ignored "-Wmissing-prototypes" | 27 | #pragma GCC diagnostic ignored "-Wmissing-prototypes" |
| 22 | 28 | ||
| 23 | __attribute__((weak, used)) int _open_r(struct _reent *r, const char *path, int flag, int m) { | 29 | __attribute__((weak, used)) int _open_r(struct _reent *r, const char *path, int flag, int m) { |
