diff --git a/builddefs/mcu_selection.mk b/builddefs/mcu_selection.mk index 0ea9630d598e..a289381c81a6 100644 --- a/builddefs/mcu_selection.mk +++ b/builddefs/mcu_selection.mk @@ -815,6 +815,102 @@ ifneq ($(findstring GD32VF103, $(MCU)),) USE_FPU ?= no endif +ifneq ($(findstring SN32F248F, $(MCU)),) + # Cortex version + MCU = cortex-m0 + + # ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7 + ARMV = 6 + + ## chip/board settings + # - the next two should match the directories in + # /os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES) + MCU_FAMILY = SN32 + MCU_SERIES = SN32F240 + + # Linker script to use + # - it should exist either in /os/common/ports/ARMCMx/compilers/GCC/ld/ + # or /ld/ + MCU_LDSCRIPT ?= SN32F240 + + # Startup code to use + # - it should exist in /os/common/startup/ARMCMx/compilers/GCC/mk/ + MCU_STARTUP ?= sn32f24x + + # Board: it should exist either in /os/hal/boards/, + # /boards/, or drivers/boards/ + BOARD ?= SN_SN32F240 + + USE_FPU ?= no + + # Bootloader address for SN32 DFU + SN32_BOOTLOADER_ADDRESS = 0x1FFF0301 +endif + +ifneq ($(findstring SN32F248BF, $(MCU)),) + # Cortex version + MCU = cortex-m0 + + # ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7 + ARMV = 6 + + ## chip/board settings + # - the next two should match the directories in + # /os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES) + MCU_FAMILY = SN32 + MCU_SERIES = SN32F240B + + # Linker script to use + # - it should exist either in /os/common/ports/ARMCMx/compilers/GCC/ld/ + # or /ld/ + MCU_LDSCRIPT ?= SN32F240B + + # Startup code to use + # - it should exist in /os/common/startup/ARMCMx/compilers/GCC/mk/ + MCU_STARTUP ?= sn32f24xb + + # Board: it should exist either in /os/hal/boards/, + # /boards/, or drivers/boards/ + BOARD ?= SN_SN32F240B + + USE_FPU ?= no + + # Bootloader address for SN32 DFU + SN32_BOOTLOADER_ADDRESS = 0x1FFF0301 +endif + +ifneq ($(findstring SN32F268F, $(MCU)),) + # Cortex version + MCU = cortex-m0 + + # ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7 + ARMV = 6 + + ## chip/board settings + # - the next two should match the directories in + # /os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES) + MCU_FAMILY = SN32 + MCU_SERIES = SN32F260 + + # Linker script to use + # - it should exist either in /os/common/ports/ARMCMx/compilers/GCC/ld/ + # or /ld/ + MCU_LDSCRIPT ?= SN32F260 + + # Startup code to use + # - it should exist in /os/common/startup/ARMCMx/compilers/GCC/mk/ + MCU_STARTUP ?= sn32f26x + + # Board: it should exist either in /os/hal/boards/, + # /boards/, or drivers/boards/ + BOARD ?= SN_SN32F260 + + USE_FPU ?= no + + # Bootloader address for SN32 DFU + SN32_BOOTLOADER_ADDRESS = 0x1FFF0009 +endif + ifneq (,$(filter $(MCU),at90usb162 atmega16u2 atmega32u2 atmega16u4 atmega32u4 at90usb646 at90usb647 at90usb1286 at90usb1287)) PROTOCOL = LUFA diff --git a/data/schemas/keyboard.jsonschema b/data/schemas/keyboard.jsonschema index bc07eaf5fbda..2f4bca129880 100644 --- a/data/schemas/keyboard.jsonschema +++ b/data/schemas/keyboard.jsonschema @@ -59,6 +59,9 @@ "MK64FX512", "MK66FX1M0", "RP2040", + "SN32F248F", + "SN32F248BF", + "SN32F268F", "STM32F042", "STM32F072", "STM32F103", @@ -155,7 +158,8 @@ "tinyuf2", "unknown", "usbasploader", - "wb32-dfu" + "wb32-dfu", + "sn32-dfu" ] }, "bootloader_instructions": { diff --git a/docs/compatible_microcontrollers.md b/docs/compatible_microcontrollers.md index cc9c0b7f92a2..5f988a38fec0 100644 --- a/docs/compatible_microcontrollers.md +++ b/docs/compatible_microcontrollers.md @@ -73,6 +73,12 @@ You can also use any ARM chip with USB that [ChibiOS](https://www.chibios.org) s For a detailed overview about the RP2040 support by QMK see the [dedicated RP2040 page](platformdev_rp2040.md). +### Sonix (SN32) + + * [SN32F24x](https://www.sonix.com.tw/article-en-998-21396) + * [SN32F24xB](https://www.sonix.com.tw/article-en-4336-30356) + * [SN32F26x](https://www.sonix.com.tw/article-en-998-24753) + ## Atmel ATSAM There is limited support for one of Atmel's ATSAM microcontrollers, that being the [ATSAMD51J18A](https://www.microchip.com/wwwproducts/en/ATSAMD51J18A) used by the [Massdrop keyboards](https://github.com/qmk/qmk_firmware/tree/master/keyboards/massdrop). However, it is not recommended to design a board with this microcontroller as the support is quite specialized to Massdrop hardware. diff --git a/keyboards/handwired/onekey/sn32/config.h b/keyboards/handwired/onekey/sn32/config.h new file mode 100644 index 000000000000..c73942c449c7 --- /dev/null +++ b/keyboards/handwired/onekey/sn32/config.h @@ -0,0 +1,6 @@ +// Copyright 2022 Jpe230 +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include "config_common.h" diff --git a/keyboards/handwired/onekey/sn32/info.json b/keyboards/handwired/onekey/sn32/info.json new file mode 100644 index 000000000000..3f09cabc6083 --- /dev/null +++ b/keyboards/handwired/onekey/sn32/info.json @@ -0,0 +1,9 @@ +{ + "keyboard_name": "Onekey SN32", + "processor": "SN32F248BF", + "bootloader": "sn32-dfu", + "matrix_pins": { + "cols": ["A8"], + "rows": ["D11"] + } +} diff --git a/keyboards/handwired/onekey/sn32/rules.mk b/keyboards/handwired/onekey/sn32/rules.mk new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/lib/python/qmk/constants.py b/lib/python/qmk/constants.py index 8a13029a8a8f..c34176021173 100644 --- a/lib/python/qmk/constants.py +++ b/lib/python/qmk/constants.py @@ -14,7 +14,7 @@ MAX_KEYBOARD_SUBFOLDERS = 5 # Supported processor types -CHIBIOS_PROCESSORS = 'cortex-m0', 'cortex-m0plus', 'cortex-m3', 'cortex-m4', 'MKL26Z64', 'MK20DX128', 'MK20DX256', 'MK64FX512', 'MK66FX1M0', 'RP2040', 'STM32F042', 'STM32F072', 'STM32F103', 'STM32F303', 'STM32F401', 'STM32F405', 'STM32F407', 'STM32F411', 'STM32F446', 'STM32G431', 'STM32G474', 'STM32L412', 'STM32L422', 'STM32L432', 'STM32L433', 'STM32L442', 'STM32L443', 'GD32VF103', 'WB32F3G71', 'WB32FQ95' +CHIBIOS_PROCESSORS = 'cortex-m0', 'cortex-m0plus', 'cortex-m3', 'cortex-m4', 'MKL26Z64', 'MK20DX128', 'MK20DX256', 'MK64FX512', 'MK66FX1M0', 'RP2040', 'STM32F042', 'STM32F072', 'STM32F103', 'STM32F303', 'STM32F401', 'STM32F405', 'STM32F407', 'STM32F411', 'STM32F446', 'STM32G431', 'STM32G474', 'STM32L412', 'STM32L422', 'STM32L432', 'STM32L433', 'STM32L442', 'STM32L443', 'GD32VF103', 'WB32F3G71', 'WB32FQ95', 'SN32F248F', 'SN32F248BF', 'SN32F268F' LUFA_PROCESSORS = 'at90usb162', 'atmega16u2', 'atmega32u2', 'atmega16u4', 'atmega32u4', 'at90usb646', 'at90usb647', 'at90usb1286', 'at90usb1287', None VUSB_PROCESSORS = 'atmega32a', 'atmega328p', 'atmega328', 'attiny85' @@ -45,6 +45,9 @@ "GD32VF103": "gd32v-dfu", "WB32F3G71": "wb32-dfu", "WB32FQ95": "wb32-dfu", + "SN32F248F": "sn32-dfu", + "SN32F248BF": "sn32-dfu", + "SN32F268F": "sn32-dfu", "atmega16u2": "atmel-dfu", "atmega32u2": "atmel-dfu", "atmega16u4": "atmel-dfu", diff --git a/platforms/chibios/boards/SN_SN32F240/board/board.mk b/platforms/chibios/boards/SN_SN32F240/board/board.mk new file mode 100644 index 000000000000..ee50903bf28f --- /dev/null +++ b/platforms/chibios/boards/SN_SN32F240/board/board.mk @@ -0,0 +1,12 @@ +# List of all the board related files. +BOARDSRC = $(CHIBIOS_CONTRIB)/os/hal/boards/SN_SN32F240/board.c + +# Required include directories +BOARDINC = $(CHIBIOS_CONTRIB)/os/hal/boards/SN_SN32F240 + +# Optimize for speed +OPT = 2 + +# Shared variables +ALLCSRC += $(BOARDSRC) +ALLINC += $(BOARDINC) \ No newline at end of file diff --git a/platforms/chibios/boards/SN_SN32F240/configs/chconf.h b/platforms/chibios/boards/SN_SN32F240/configs/chconf.h new file mode 100644 index 000000000000..f698a1885926 --- /dev/null +++ b/platforms/chibios/boards/SN_SN32F240/configs/chconf.h @@ -0,0 +1,27 @@ +/* Copyright 2020 QMK + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * This file was auto-generated by: + * `qmk chibios-confmigrate -i platforms/chibios/boards/SN_SN32F240/configs/chconf.h -r platforms/chibios/boards/common/configs/chconf.h` + */ + +#pragma once + +#define CH_CFG_ST_TIMEDELTA 0 + +#include_next + diff --git a/platforms/chibios/boards/SN_SN32F240/configs/mcuconf.h b/platforms/chibios/boards/SN_SN32F240/configs/mcuconf.h new file mode 100644 index 000000000000..a1ec5166b7a7 --- /dev/null +++ b/platforms/chibios/boards/SN_SN32F240/configs/mcuconf.h @@ -0,0 +1,68 @@ +/* + ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +#ifndef MCUCONF_H +#define MCUCONF_H + +/* + * SN32F24x drivers configuration. + * The following settings override the default settings present in + * the various device driver implementation headers. + * Note that the settings for each driver only have effect if the whole + * driver is enabled in halconf.h. + * + * IRQ priorities: + * 3...0 Lowest...Highest. + * + * DMA priorities: + * 0...3 Lowest...Highest. + */ + +#define SN32F24x_MCUCONF +#define PLATFORM_MCUCONF +/* + * HAL driver system settings. + */ +/* + * CT driver system settings. + */ +#define SN32_HAS_CT16B0 TRUE +#define SN32_HAS_CT16B1 TRUE + +/* + * SN driver system settings. + */ +#define SN32_HAS_GPIOA TRUE +#define SN32_HAS_GPIOB TRUE +#define SN32_HAS_GPIOC TRUE +#define SN32_HAS_GPIOD TRUE + +/* + * USB driver system settings. + */ +#define CRT1_AREAS_NUMBER 1 +#define PLATFORM_USB_USE_USB1 TRUE + +/* + * Timer driver system settings. + */ +#define SYS_CLOCK_SETUP 1 +#define SYS0_CLKCFG_VAL 0 +#define AHB_PRESCALAR 0x2 +#define CLKOUT_SEL_VAL 0x0 +#define CLKOUT_PRESCALAR 0x0 + +#endif /* MCUCONF_H */ diff --git a/platforms/chibios/boards/SN_SN32F240B/board/board.mk b/platforms/chibios/boards/SN_SN32F240B/board/board.mk new file mode 100644 index 000000000000..b3cf15dd678c --- /dev/null +++ b/platforms/chibios/boards/SN_SN32F240B/board/board.mk @@ -0,0 +1,16 @@ +# List of all the board related files. +BOARDSRC = $(CHIBIOS_CONTRIB)/os/hal/boards/SN_SN32F240B/board.c + +# Required include directories +BOARDINC = $(CHIBIOS_CONTRIB)/os/hal/boards/SN_SN32F240B + +# Optimize for speed +OPT = 2 +# Enter lower-power sleep mode when on the ChibiOS idle thread +OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE +# Shave some extra bytes +OPT_DEFS += -DCRT1_AREAS_NUMBER=1 + +# Shared variables +ALLCSRC += $(BOARDSRC) +ALLINC += $(BOARDINC) diff --git a/platforms/chibios/boards/SN_SN32F240B/configs/chconf.h b/platforms/chibios/boards/SN_SN32F240B/configs/chconf.h new file mode 100644 index 000000000000..e33f469b474c --- /dev/null +++ b/platforms/chibios/boards/SN_SN32F240B/configs/chconf.h @@ -0,0 +1,38 @@ +/* Copyright 2020 QMK + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * This file was auto-generated by: + * `qmk chibios-confmigrate -i platforms/chibios/boards/SN_SN32F240B/configs/chconf.h -r platforms/chibios/boards/common/configs/chconf.h` + */ + +#pragma once + +#define CH_CFG_ST_FREQUENCY 10000 + +#define CH_CFG_ST_TIMEDELTA 0 + +#include_next + +#undef CH_CFG_IDLE_ENTER_HOOK +#define CH_CFG_IDLE_ENTER_HOOK() { \ + SN_PMU->CTRL = 4; \ +} + +#undef CH_CFG_IDLE_LEAVE_HOOK +#define CH_CFG_IDLE_LEAVE_HOOK() { \ + SN_PMU->CTRL = 0; \ +} diff --git a/platforms/chibios/boards/SN_SN32F240B/configs/halconf.h b/platforms/chibios/boards/SN_SN32F240B/configs/halconf.h new file mode 100644 index 000000000000..47ebc32eaa82 --- /dev/null +++ b/platforms/chibios/boards/SN_SN32F240B/configs/halconf.h @@ -0,0 +1,27 @@ +/* Copyright 2020 QMK + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * This file was auto-generated by: + * `qmk chibios-confmigrate -i platforms/chibios/boards/SN_SN32F240B/configs/halconf.h -r platforms/chibios/boards/common/configs/halconf.h` + */ + +#pragma once + +#define HAL_USE_PWM TRUE + +#include_next + diff --git a/platforms/chibios/boards/SN_SN32F240B/configs/mcuconf.h b/platforms/chibios/boards/SN_SN32F240B/configs/mcuconf.h new file mode 100644 index 000000000000..f6f0e8d20e10 --- /dev/null +++ b/platforms/chibios/boards/SN_SN32F240B/configs/mcuconf.h @@ -0,0 +1,69 @@ +/* + ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +#ifndef MCUCONF_H +#define MCUCONF_H + +/* + * SN32F24xB drivers configuration. + * The following settings override the default settings present in + * the various device driver implementation headers. + * Note that the settings for each driver only have effect if the whole + * driver is enabled in halconf.h. + * + * IRQ priorities: + * 3...0 Lowest...Highest. + * + * DMA priorities: + * 0...3 Lowest...Highest. + */ + +#define SN32F24xB_MCUCONF +#define PLATFORM_MCUCONF +/* + * HAL driver system settings. + */ +/* + * CT driver system settings. + */ +#define SN32_HAS_CT16B0 TRUE +#define SN32_HAS_CT16B1 TRUE +/* + * PWM driver system settings. + */ +#define SN32_PWM_USE_CT16B1 TRUE +#define SN32_PWM_NO_RESET TRUE +/* + * SN driver system settings. + */ +#define SN32_HAS_GPIOA TRUE +#define SN32_HAS_GPIOB TRUE +#define SN32_HAS_GPIOC TRUE +#define SN32_HAS_GPIOD TRUE + +/* + * USB driver system settings. + */ +#define SN32_HAS_USB TRUE +#define SN32_USB_USE_USB1 TRUE + +/* + * System Clock settings. + */ +// Defaults are correct + + +#endif /* MCUCONF_H */ diff --git a/platforms/chibios/boards/SN_SN32F260/board/board.mk b/platforms/chibios/boards/SN_SN32F260/board/board.mk new file mode 100644 index 000000000000..0d7092f02d55 --- /dev/null +++ b/platforms/chibios/boards/SN_SN32F260/board/board.mk @@ -0,0 +1,22 @@ +# List of all the board related files. +BOARDSRC = $(CHIBIOS_CONTRIB)/os/hal/boards/SN_SN32F260/board.c + +# Required include directories +BOARDINC = $(CHIBIOS_CONTRIB)/os/hal/boards/SN_SN32F260 + +# Optimize for size +# OPT = s /set by default + +# Enter lower-power sleep mode when on the ChibiOS idle thread +OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE + +# Shave some extra bytes +OPT_DEFS += -DCRT1_AREAS_NUMBER=1 + +# Some options to reduce RAM usage +USE_LINK_GC = yes +LTO_ENABLE = yes + +# Shared variables +ALLCSRC += $(BOARDSRC) +ALLINC += $(BOARDINC) diff --git a/platforms/chibios/boards/SN_SN32F260/configs/chconf.h b/platforms/chibios/boards/SN_SN32F260/configs/chconf.h new file mode 100644 index 000000000000..7be313796820 --- /dev/null +++ b/platforms/chibios/boards/SN_SN32F260/configs/chconf.h @@ -0,0 +1,62 @@ +/* Copyright 2020 QMK + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* + * This file was auto-generated by: + * `qmk chibios-confmigrate -i platforms/chibios/boards/SN_SN32F260/configs/chconf.h -r platforms/chibios/boards/common/configs/chconf.h` + */ + +#pragma once + +#define CH_CFG_ST_FREQUENCY 10000 + +#define CH_CFG_ST_TIMEDELTA 0 + +#define CH_CFG_OPTIMIZE_SPEED FALSE + +#define CH_CFG_USE_TIMESTAMP FALSE + +#define CH_CFG_USE_SEMAPHORES FALSE + +#define CH_CFG_USE_MUTEXES FALSE + +#define CH_CFG_USE_CONDVARS_TIMEOUT FALSE + +#define CH_CFG_USE_MESSAGES TRUE + +#define CH_CFG_USE_MAILBOXES TRUE + +#define CH_CFG_USE_MEMCORE FALSE + +#include_next + +#undef CH_CFG_IDLE_ENTER_HOOK +#define CH_CFG_IDLE_ENTER_HOOK() { \ + SN_PMU->CTRL = 4; \ +} + +#undef CH_CFG_IDLE_LEAVE_HOOK +#define CH_CFG_IDLE_LEAVE_HOOK() { \ + SN_PMU->CTRL = 0; \ +} +#define PORT_IDLE_THREAD_STACK_SIZE 0 +#define PORT_INT_REQUIRED_STACK 0 + +/* can't call sleep without the idle thread, must override related functions */ +#if CH_CFG_NO_IDLE_THREAD == TRUE + #pragma weak chThdSleep + #pragma weak chThdSuspendTimeoutS +#endif diff --git a/platforms/chibios/boards/SN_SN32F260/configs/config.h b/platforms/chibios/boards/SN_SN32F260/configs/config.h new file mode 100644 index 000000000000..7d44b7a32a85 --- /dev/null +++ b/platforms/chibios/boards/SN_SN32F260/configs/config.h @@ -0,0 +1,20 @@ +/* Copyright 2022 QMK + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +#define RAW_IN_CAPACITY 1 +#define RAW_OUT_CAPACITY 1 diff --git a/platforms/chibios/boards/SN_SN32F260/configs/mcuconf.h b/platforms/chibios/boards/SN_SN32F260/configs/mcuconf.h new file mode 100644 index 000000000000..7bb383d3a6d7 --- /dev/null +++ b/platforms/chibios/boards/SN_SN32F260/configs/mcuconf.h @@ -0,0 +1,70 @@ +/* + ChibiOS - Copyright (C) 2006..2020 Giovanni Di Sirio + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +#ifndef MCUCONF_H +#define MCUCONF_H + +/* + * SN32F26x drivers configuration. + * The following settings override the default settings present in + * the various device driver implementation headers. + * Note that the settings for each driver only have effect if the whole + * driver is enabled in halconf.h. + * + * IRQ priorities: + * 3...0 Lowest...Highest. + * + * DMA priorities: + * 0...3 Lowest...Highest. + */ + +#define SN32F26x_MCUCONF +#define PLATFORM_MCUCONF + +/* + * HAL driver system settings. + */ +/* + * CT driver system settings. + */ +#define SN32_HAS_CT16B0 TRUE +#define SN32_HAS_CT16B1 TRUE +/* + * PWM driver system settings. + */ +#define SN32_PWM_USE_CT16B1 TRUE +#define SN32_PWM_NO_RESET TRUE +/* + * SN driver system settings. + */ +#define SN32_HAS_GPIOA TRUE +#define SN32_HAS_GPIOB TRUE +#define SN32_HAS_GPIOC TRUE +#define SN32_HAS_GPIOD TRUE + +/* + * USB driver system settings. + */ +#define SN32_HAS_USB TRUE +#define SN32_USB_USE_USB1 TRUE + +/* + * System Clock settings. + */ +// Defaults are correct + + +#endif /* MCUCONF_H */ diff --git a/platforms/chibios/bootloader.mk b/platforms/chibios/bootloader.mk index 0568d353219b..d862ad06a4e0 100644 --- a/platforms/chibios/bootloader.mk +++ b/platforms/chibios/bootloader.mk @@ -28,6 +28,7 @@ # wb32-dfu WB32 USB DFU in ROM # tinyuf2 TinyUF2 # rp2040 Raspberry Pi RP2040 +# sn32-dfu SN32 USB DFU in ROM # Current options for RISC-V: # gd32v-dfu GD32V USB DFU in ROM # @@ -112,6 +113,10 @@ ifeq ($(strip $(BOOTLOADER)), wb32-dfu) OPT_DEFS += -DBOOTLOADER_WB32_DFU BOOTLOADER_TYPE = wb32_dfu endif +ifeq ($(strip $(BOOTLOADER)), sn32-dfu) + OPT_DEFS += -DBOOTLOADER_SN32_DFU + BOOTLOADER_TYPE = sn32_dfu +endif ifeq ($(strip $(BOOTLOADER_TYPE)),) ifneq ($(strip $(BOOTLOADER)),) diff --git a/platforms/chibios/bootloaders/sn32_dfu.c b/platforms/chibios/bootloaders/sn32_dfu.c new file mode 100644 index 000000000000..daf9a4c0d30b --- /dev/null +++ b/platforms/chibios/bootloaders/sn32_dfu.c @@ -0,0 +1,52 @@ +/* Copyright 2022 QMK + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "bootloader.h" + +#include +#include +#include "wait.h" + +# define SYMVAL(sym) (uint32_t)(((uint8_t *)&(sym)) - ((uint8_t *)0)) +extern uint32_t __ram0_end__; +# define BOOTLOADER_MAGIC 0xDEADBEEF +# define MAGIC_ADDR (unsigned long *)(SYMVAL(__ram0_end__) - 4) + +__attribute__((weak)) void bootloader_jump(void) { + *MAGIC_ADDR = BOOTLOADER_MAGIC; // set magic flag => reset handler will jump into boot loader + // Wait for memory to be set before the reset + wait_us(1); + NVIC_SystemReset(); +} + +/** Enter bootloader mode if requested + */ +void enter_bootloader_mode_if_requested(void) { + unsigned long *check = MAGIC_ADDR; + if (*check == BOOTLOADER_MAGIC) { + *check = 0; + + void(*recovery)(void) = (void*)SN32_BOOTLOADER_ADDRESS; + recovery(); + + while (1) + ; + } +} + +__attribute__((weak)) void mcu_reset(void) { + NVIC_SystemReset(); +} diff --git a/platforms/chibios/chibios_config.h b/platforms/chibios/chibios_config.h index 4c8333f07bb3..341627468537 100644 --- a/platforms/chibios/chibios_config.h +++ b/platforms/chibios/chibios_config.h @@ -150,3 +150,7 @@ #ifndef SPI_MISO_FLAGS # define SPI_MISO_FLAGS PAL_MODE_ALTERNATE(SPI_MISO_PAL_MODE) | PAL_OUTPUT_TYPE_PUSHPULL | PAL_OUTPUT_SPEED_HIGHEST #endif + +#if defined(SN32F2) +# define CPU_CLOCK SN32_HCLK +#endif diff --git a/platforms/chibios/platform.mk b/platforms/chibios/platform.mk index b2a8ec89e138..0e0b03ca9bde 100644 --- a/platforms/chibios/platform.mk +++ b/platforms/chibios/platform.mk @@ -155,6 +155,10 @@ ifdef WB32_BOOTLOADER_ADDRESS OPT_DEFS += -DWB32_BOOTLOADER_ADDRESS=$(WB32_BOOTLOADER_ADDRESS) endif +ifdef SN32_BOOTLOADER_ADDRESS + OPT_DEFS += -DSN32_BOOTLOADER_ADDRESS=$(SN32_BOOTLOADER_ADDRESS) +endif + # Work out if we need to set up the include for the bootloader definitions ifneq ("$(wildcard $(KEYBOARD_PATH_5)/bootloader_defs.h)","") OPT_DEFS += -include $(KEYBOARD_PATH_5)/bootloader_defs.h