diff --git a/Documentation/platforms/arm/stm32c5/boards/nucleo-c562re/index.rst b/Documentation/platforms/arm/stm32c5/boards/nucleo-c562re/index.rst new file mode 100644 index 00000000000..9ddf47a9c7d --- /dev/null +++ b/Documentation/platforms/arm/stm32c5/boards/nucleo-c562re/index.rst @@ -0,0 +1,32 @@ +================= +ST NUCLEO-C562RE +================= + +.. tags:: chip:stm32, chip:stm32c5, chip:stm32c562 + +The `NUCLEO-C562RE `_ +is an STM32 Nucleo-64 board featuring an STM32C562RE microcontroller with +512 KiB of Flash and 128 KiB of SRAM. The board includes an ST-LINK-V3EC +debugger and programmer with a virtual COM port. + +Clocking +======== + +NuttX uses the board's 24 MHz HSE oscillator as the PSI reference and runs the +CPU, AHB, and APB buses at 144 MHz. The board also has a 32.768 kHz LSE +oscillator. + +Configurations +============== + +nsh +--- + +Configures a small internal-flash NuttShell image with USART2 as the serial +console and the green status LED enabled. + +jumbo +----- + +Enables a broader set of NuttX features for additional build and runtime +coverage. diff --git a/boards/Kconfig b/boards/Kconfig index 132459811f9..4b633217d0f 100644 --- a/boards/Kconfig +++ b/boards/Kconfig @@ -3328,6 +3328,17 @@ config ARCH_BOARD_NUCLEO_U3C5ZI_Q a Cortex-M33 MCU running at up to 96 MHz with 2 MiB Flash and 640 KiB SRAM. +config ARCH_BOARD_NUCLEO_C562RE + bool "STMicro NUCLEO-C562RE board" + depends on ARCH_CHIP_STM32C562RE + select ARCH_HAVE_LEDS + select ARCH_HAVE_BUTTONS + select ARCH_HAVE_IRQBUTTONS + ---help--- + STMicro NUCLEO-C562RE development board featuring the STM32C562RE, + a Cortex-M33 MCU running at up to 144 MHz with 512 KiB Flash and + 128 KiB SRAM. + config ARCH_BOARD_STM32L476VG_DISCO bool "STMicro STM32L476VG -Discovery board" depends on ARCH_CHIP_STM32L476RG @@ -4195,6 +4206,7 @@ config ARCH_BOARD default "nucleo-n657x0-q" if ARCH_BOARD_NUCLEO_N657X0_Q default "nucleo-u5a5zj-q" if ARCH_BOARD_NUCLEO_U5A5ZJ_Q default "nucleo-u3c5zi-q" if ARCH_BOARD_NUCLEO_U3C5ZI_Q + default "nucleo-c562re" if ARCH_BOARD_NUCLEO_C562RE default "stm32l476vg-disco" if ARCH_BOARD_STM32L476VG_DISCO default "stm32l476-mdk" if ARCH_BOARD_STM32L476_MDK default "stm32l4r9ai-disco" if ARCH_BOARD_STM32L4R9AI_DISCO @@ -5485,7 +5497,7 @@ endif if ARCH_CHIP_SAMV7 source "boards/arm/samv7/common/Kconfig" endif -if ARCH_CHIP_STM32C0 || ARCH_CHIP_STM32F0 || ARCH_CHIP_STM32F1 || ARCH_CHIP_STM32F2 || ARCH_CHIP_STM32F3 || ARCH_CHIP_STM32F4 || ARCH_CHIP_STM32F7 || ARCH_CHIP_STM32G0 || ARCH_CHIP_STM32G4 || ARCH_CHIP_STM32L0 || ARCH_CHIP_STM32L1 || ARCH_CHIP_STM32H7 || ARCH_CHIP_STM32H5 || ARCH_CHIP_STM32L5 || ARCH_CHIP_STM32U0 || ARCH_CHIP_STM32U3 || ARCH_CHIP_STM32U5 || ARCH_CHIP_STM32WB || ARCH_CHIP_STM32WL5 || ARCH_CHIP_STM32N6 +if ARCH_CHIP_STM32C0 || ARCH_CHIP_STM32C5 || ARCH_CHIP_STM32F0 || ARCH_CHIP_STM32F1 || ARCH_CHIP_STM32F2 || ARCH_CHIP_STM32F3 || ARCH_CHIP_STM32F4 || ARCH_CHIP_STM32F7 || ARCH_CHIP_STM32G0 || ARCH_CHIP_STM32G4 || ARCH_CHIP_STM32L0 || ARCH_CHIP_STM32L1 || ARCH_CHIP_STM32H7 || ARCH_CHIP_STM32H5 || ARCH_CHIP_STM32L5 || ARCH_CHIP_STM32U0 || ARCH_CHIP_STM32U3 || ARCH_CHIP_STM32U5 || ARCH_CHIP_STM32WB || ARCH_CHIP_STM32WL5 || ARCH_CHIP_STM32N6 source "boards/arm/common/stm32/Kconfig" endif if ARCH_CHIP_RP2040 diff --git a/boards/arm/stm32c5/common/CMakeLists.txt b/boards/arm/stm32c5/common/CMakeLists.txt new file mode 100644 index 00000000000..7cde8fffa1d --- /dev/null +++ b/boards/arm/stm32c5/common/CMakeLists.txt @@ -0,0 +1,25 @@ +# ############################################################################## +# boards/arm/stm32c5/common/CMakeLists.txt +# +# SPDX-License-Identifier: Apache-2.0 +# +# Licensed to the Apache Software Foundation (ASF) under one or more contributor +# license agreements. See the NOTICE file distributed with this work for +# additional information regarding copyright ownership. The ASF licenses this +# file to you 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. +# +# ############################################################################## + +if(CONFIG_ARCH_BOARD_COMMON) + add_subdirectory(${NUTTX_DIR}/boards/arm/common/stm32 stm32_common) +endif() diff --git a/boards/arm/stm32c5/common/Makefile b/boards/arm/stm32c5/common/Makefile new file mode 100644 index 00000000000..07c1291ba46 --- /dev/null +++ b/boards/arm/stm32c5/common/Makefile @@ -0,0 +1,38 @@ +############################################################################# +# boards/arm/stm32c5/common/Makefile +# +# SPDX-License-Identifier: Apache-2.0 +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. The +# ASF licenses this file to you 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. +# +############################################################################# + +include $(TOPDIR)/Make.defs + +STM32_BOARD_COMMON_DIR := $(TOPDIR)$(DELIM)boards$(DELIM)arm$(DELIM)common$(DELIM)stm32 +STM32_COMMON_SRCDIR := $(TOPDIR)$(DELIM)arch$(DELIM)$(CONFIG_ARCH)$(DELIM)src$(DELIM)common$(DELIM)stm32 + +include board/Make.defs +include $(STM32_BOARD_COMMON_DIR)$(DELIM)src$(DELIM)Make.defs + +DEPPATH += --dep-path board + +include $(TOPDIR)/boards/Board.mk + +ARCHSRCDIR = $(TOPDIR)$(DELIM)arch$(DELIM)$(CONFIG_ARCH)$(DELIM)src +BOARDDIR = $(ARCHSRCDIR)$(DELIM)board +CFLAGS += ${INCDIR_PREFIX}$(BOARDDIR)$(DELIM)include +CFLAGS += ${INCDIR_PREFIX}$(STM32_COMMON_SRCDIR) diff --git a/boards/arm/stm32c5/nucleo-c562re/CMakeLists.txt b/boards/arm/stm32c5/nucleo-c562re/CMakeLists.txt new file mode 100644 index 00000000000..60eb0450dc8 --- /dev/null +++ b/boards/arm/stm32c5/nucleo-c562re/CMakeLists.txt @@ -0,0 +1,23 @@ +# ############################################################################## +# boards/arm/stm32c5/nucleo-c562re/CMakeLists.txt +# +# SPDX-License-Identifier: Apache-2.0 +# +# Licensed to the Apache Software Foundation (ASF) under one or more contributor +# license agreements. See the NOTICE file distributed with this work for +# additional information regarding copyright ownership. The ASF licenses this +# file to you 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. +# +# ############################################################################## + +add_subdirectory(src) diff --git a/boards/arm/stm32c5/nucleo-c562re/configs/jumbo/defconfig b/boards/arm/stm32c5/nucleo-c562re/configs/jumbo/defconfig new file mode 100644 index 00000000000..2577054322e --- /dev/null +++ b/boards/arm/stm32c5/nucleo-c562re/configs/jumbo/defconfig @@ -0,0 +1,72 @@ +# +# This file is autogenerated: PLEASE DO NOT EDIT IT. +# +# You can use "make menuconfig" to make any modifications to the installed .config file. +# You can then do "make savedefconfig" to generate a new defconfig file that includes your +# modifications. +# +CONFIG_ARCH="arm" +CONFIG_ARCH_BOARD="nucleo-c562re" +CONFIG_ARCH_BOARD_NUCLEO_C562RE=y +CONFIG_ARCH_BUTTONS=y +CONFIG_ARCH_CHIP="stm32c5" +CONFIG_ARCH_CHIP_STM32=y +CONFIG_ARCH_CHIP_STM32C562RE=y +CONFIG_ARCH_CHIP_STM32C5=y +CONFIG_ARCH_INTERRUPTSTACK=2048 +CONFIG_ARCH_IRQBUTTONS=y +CONFIG_ARCH_STACKDUMP=y +CONFIG_BOARD_LOOPSPERMSEC=7200 +CONFIG_BUILTIN=y +CONFIG_DEBUG_FEATURES=y +CONFIG_DEBUG_FULLOPT=y +CONFIG_DEBUG_SYMBOLS=y +CONFIG_EXAMPLES_BUTTONS=y +CONFIG_EXAMPLES_BUTTONS_NAME0="B1" +CONFIG_EXAMPLES_BUTTONS_NAMES=y +CONFIG_EXAMPLES_BUTTONS_QTD=1 +CONFIG_EXAMPLES_HELLO=y +CONFIG_FS_PROCFS=y +CONFIG_FS_PROCFS_REGISTER=y +CONFIG_FS_TMPFS=y +CONFIG_HAVE_CXX=y +CONFIG_HAVE_CXXINITIALIZE=y +CONFIG_INIT_ENTRYPOINT="nsh_main" +CONFIG_INPUT=y +CONFIG_INPUT_BUTTONS=y +CONFIG_INPUT_BUTTONS_LOWER=y +CONFIG_INTELHEX_BINARY=y +CONFIG_LIBM=y +CONFIG_LINE_MAX=64 +CONFIG_NSH_BUILTIN_APPS=y +CONFIG_NSH_FILEIOSIZE=512 +CONFIG_NSH_MAXARGUMENTS=12 +CONFIG_NSH_READLINE=y +CONFIG_RAMLOG=y +CONFIG_RAMLOG_BUFSIZE=8192 +CONFIG_RAMLOG_SYSLOG=y +CONFIG_RAM_SIZE=131072 +CONFIG_RAM_START=0x20000000 +CONFIG_RAW_BINARY=y +CONFIG_READLINE_CMD_HISTORY=y +CONFIG_READLINE_TABCOMPLETION=y +CONFIG_RR_INTERVAL=200 +CONFIG_SCHED_CPULOAD_SYSCLK=y +CONFIG_SCHED_HPWORK=y +CONFIG_SCHED_IRQMONITOR=y +CONFIG_SCHED_LPWORK=y +CONFIG_SCHED_WAITPID=y +CONFIG_STACK_COLORATION=y +CONFIG_STM32_USART2=y +CONFIG_SYSLOG_INTBUFFER=y +CONFIG_SYSLOG_PRIORITY=y +CONFIG_SYSLOG_PROCESS_NAME=y +CONFIG_SYSLOG_TIMESTAMP=y +CONFIG_SYSTEM_CLE=y +CONFIG_SYSTEM_NSH=y +CONFIG_TASK_NAME_SIZE=32 +CONFIG_TESTING_GETPRIME=y +CONFIG_TESTING_OSTEST=y +CONFIG_TIMER=y +CONFIG_USART2_SERIAL_CONSOLE=y +CONFIG_USEC_PER_TICK=1000 diff --git a/boards/arm/stm32c5/nucleo-c562re/configs/nsh/defconfig b/boards/arm/stm32c5/nucleo-c562re/configs/nsh/defconfig new file mode 100644 index 00000000000..8e7003e2fa8 --- /dev/null +++ b/boards/arm/stm32c5/nucleo-c562re/configs/nsh/defconfig @@ -0,0 +1,36 @@ +# +# This file is autogenerated: PLEASE DO NOT EDIT IT. +# +# You can use "make menuconfig" to make any modifications to the installed .config file. +# You can then do "make savedefconfig" to generate a new defconfig file that includes your +# modifications. +# +CONFIG_ARCH="arm" +CONFIG_ARCH_BOARD="nucleo-c562re" +CONFIG_ARCH_BOARD_NUCLEO_C562RE=y +CONFIG_ARCH_BUTTONS=y +CONFIG_ARCH_CHIP="stm32c5" +CONFIG_ARCH_CHIP_STM32=y +CONFIG_ARCH_CHIP_STM32C562RE=y +CONFIG_ARCH_CHIP_STM32C5=y +CONFIG_ARCH_INTERRUPTSTACK=2048 +CONFIG_BOARD_LOOPSPERMSEC=7200 +CONFIG_BUILTIN=y +CONFIG_FS_PROCFS=y +CONFIG_FS_PROCFS_REGISTER=y +CONFIG_INIT_ENTRYPOINT="nsh_main" +CONFIG_INTELHEX_BINARY=y +CONFIG_LINE_MAX=64 +CONFIG_NSH_BUILTIN_APPS=y +CONFIG_NSH_FILEIOSIZE=512 +CONFIG_NSH_READLINE=y +CONFIG_PREALLOC_TIMERS=4 +CONFIG_RAM_SIZE=131072 +CONFIG_RAM_START=0x20000000 +CONFIG_RAW_BINARY=y +CONFIG_RR_INTERVAL=200 +CONFIG_SCHED_WAITPID=y +CONFIG_STM32_USART2=y +CONFIG_SYSTEM_NSH=y +CONFIG_TASK_NAME_SIZE=0 +CONFIG_USART2_SERIAL_CONSOLE=y diff --git a/boards/arm/stm32c5/nucleo-c562re/include/board.h b/boards/arm/stm32c5/nucleo-c562re/include/board.h new file mode 100644 index 00000000000..367f37c62a3 --- /dev/null +++ b/boards/arm/stm32c5/nucleo-c562re/include/board.h @@ -0,0 +1,139 @@ +/**************************************************************************** + * boards/arm/stm32c5/nucleo-c562re/include/board.h + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. The + * ASF licenses this file to you 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 __BOARDS_ARM_STM32C5_NUCLEO_C562RE_INCLUDE_BOARD_H +#define __BOARDS_ARM_STM32C5_NUCLEO_C562RE_INCLUDE_BOARD_H + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include + +/**************************************************************************** + * Pre-processor Definitions + ****************************************************************************/ + +/* Clocking *****************************************************************/ + +/* The NUCLEO-C562RE has a 24 MHz HSE crystal. + * + * System clock source : PSI (HSE) + * SYSCLK : 144 MHz + * HCLK : 144 MHz (SYSCLK / 1) + * PCLK1 : 144 MHz (HCLK / 1) + * PCLK2 : 144 MHz (HCLK / 1) + * PCLK3 : 144 MHz (HCLK / 1) + * FLASH latency : 4 wait states + * FLASH write delay : 2 + */ + +#define STM32_BOARD_XTAL 24000000ul +#define STM32_HSE_FREQUENCY STM32_BOARD_XTAL +#define STM32_LSE_FREQUENCY 32768ul +#define STM32_LSI_FREQUENCY 32000ul + +#define STM32_BOARD_USEHSE 1 +#define STM32_BOARD_USEPSI 1 + +#define STM32_RCC_CR2_PSIREFSRC RCC_CR2_PSIREFSRC_HSE +#define STM32_RCC_CR2_PSIREF RCC_CR2_PSIREF_24MHZ +#define STM32_RCC_CR2_PSIFREQ RCC_CR2_PSIFREQ_144MHZ + +#define STM32_PSI_FREQUENCY 144000000ul +#define STM32_SYSCLK_FREQUENCY STM32_PSI_FREQUENCY + +#define STM32_RCC_CFGR2_HPRE RCC_CFGR2_HPRE_SYSCLK +#define STM32_HCLK_FREQUENCY STM32_SYSCLK_FREQUENCY + +#define STM32_RCC_CFGR2_PPRE1 RCC_CFGR2_PPRE1_HCLK +#define STM32_PCLK1_FREQUENCY STM32_HCLK_FREQUENCY + +#define STM32_RCC_CFGR2_PPRE2 RCC_CFGR2_PPRE2_HCLK +#define STM32_PCLK2_FREQUENCY STM32_HCLK_FREQUENCY + +#define STM32_RCC_CFGR2_PPRE3 RCC_CFGR2_PPRE3_HCLK +#define STM32_PCLK3_FREQUENCY STM32_HCLK_FREQUENCY + +#define STM32_FLASH_ACR_LATENCY FLASH_ACR_LATENCY_4 +#define STM32_FLASH_ACR_WRHIGHFREQ FLASH_ACR_WRHIGHFREQ_2 + +#define STM32_TIM1_CLKIN STM32_PCLK2_FREQUENCY +#define STM32_TIM2_CLKIN STM32_PCLK1_FREQUENCY +#define STM32_TIM5_CLKIN STM32_PCLK1_FREQUENCY +#define STM32_TIM6_CLKIN STM32_PCLK1_FREQUENCY +#define STM32_TIM7_CLKIN STM32_PCLK1_FREQUENCY +#define STM32_TIM8_CLKIN STM32_PCLK2_FREQUENCY +#define STM32_TIM12_CLKIN STM32_PCLK1_FREQUENCY +#define STM32_TIM15_CLKIN STM32_PCLK2_FREQUENCY +#define STM32_TIM16_CLKIN STM32_PCLK2_FREQUENCY +#define STM32_TIM17_CLKIN STM32_PCLK2_FREQUENCY + +/* USART2 is connected to the ST-LINK virtual COM port. */ + +#define GPIO_USART2_RX GPIO_USART2_RX_1 +#define GPIO_USART2_TX GPIO_USART2_TX_1 + +/* User LEDs */ + +#define BOARD_LED_GREEN 0 +#define BOARD_NLEDS 1 + +#define BOARD_LED_GREEN_BIT (1 << BOARD_LED_GREEN) + +/* NuttX LED state mapping. LD1 is active high. */ + +#define LED_STARTED 0 +#define LED_HEAPALLOCATE 0 +#define LED_IRQSENABLED 0 +#define LED_STACKCREATED 1 +#define LED_INIRQ 2 +#define LED_SIGNAL 2 +#define LED_ASSERTION 2 +#define LED_PANIC 1 +#define LED_IDLE 0 + +/* User button B1 is active high. */ + +#define BUTTON_USER 0 +#define NUM_BUTTONS 1 +#define BUTTON_USER_BIT (1 << BUTTON_USER) + +/**************************************************************************** + * Public Function Prototypes + ****************************************************************************/ + +#ifndef __ASSEMBLY__ + +#ifdef __cplusplus +extern "C" +{ +#endif + +void stm32_board_initialize(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __ASSEMBLY__ */ +#endif /* __BOARDS_ARM_STM32C5_NUCLEO_C562RE_INCLUDE_BOARD_H */ diff --git a/boards/arm/stm32c5/nucleo-c562re/scripts/Make.defs b/boards/arm/stm32c5/nucleo-c562re/scripts/Make.defs new file mode 100644 index 00000000000..052daa252de --- /dev/null +++ b/boards/arm/stm32c5/nucleo-c562re/scripts/Make.defs @@ -0,0 +1,36 @@ +############################################################################ +# boards/arm/stm32c5/nucleo-c562re/scripts/Make.defs +# +# SPDX-License-Identifier: Apache-2.0 +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. The +# ASF licenses this file to you 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. +# +############################################################################ + +include ${TOPDIR}/.config +include ${TOPDIR}/tools/Config.mk +include ${TOPDIR}/arch/arm/src/armv8-m/Toolchain.defs + +ARCHSCRIPT = $(BOARD_DIR)$(DELIM)scripts$(DELIM)flash.ld + +CFLAGS := $(ARCHCFLAGS) $(ARCHOPTIMIZATION) $(ARCHCPUFLAGS) $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRAFLAGS) +CXXFLAGS := $(ARCHCXXFLAGS) $(ARCHOPTIMIZATION) $(ARCHCPUFLAGS) $(ARCHXXINCLUDES) $(ARCHDEFINES) $(EXTRAFLAGS) +CPPFLAGS := $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRAFLAGS) +AFLAGS := $(CFLAGS) -D__ASSEMBLY__ + +NXFLATLDFLAGS1 = -r -d -warn-common +NXFLATLDFLAGS2 = $(NXFLATLDFLAGS1) -T$(TOPDIR)$(DELIM)binfmt$(DELIM)libnxflat$(DELIM)gnu-nxflat-pcrel.ld -no-check-sections +LDNXFLATFLAGS = -e main -s 2048 diff --git a/boards/arm/stm32c5/nucleo-c562re/scripts/flash.ld b/boards/arm/stm32c5/nucleo-c562re/scripts/flash.ld new file mode 100644 index 00000000000..e6ca1aa1efc --- /dev/null +++ b/boards/arm/stm32c5/nucleo-c562re/scripts/flash.ld @@ -0,0 +1,107 @@ +/**************************************************************************** + * boards/arm/stm32c5/nucleo-c562re/scripts/flash.ld + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. The + * ASF licenses this file to you 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. + * + ****************************************************************************/ + +MEMORY +{ + flash (rx) : ORIGIN = 0x08000000, LENGTH = 512K + sram (rwx) : ORIGIN = 0x20000000, LENGTH = 128K +} + +OUTPUT_ARCH(arm) +ENTRY(_stext) +SECTIONS +{ + .text : + { + _stext = ABSOLUTE(.); + *(.vectors) + *(.text .text.*) + *(.fixup) + *(.gnu.warning) + *(.rodata .rodata.*) + *(.gnu.linkonce.t.*) + *(.glue_7) + *(.glue_7t) + *(.got) + *(.gcc_except_table) + *(.gnu.linkonce.r.*) + _etext = ABSOLUTE(.); + } > flash + + .init_section : + { + _sinit = ABSOLUTE(.); + KEEP(*(SORT_BY_INIT_PRIORITY(.init_array.*) + SORT_BY_INIT_PRIORITY(.ctors.*))) + KEEP(*(.init_array + EXCLUDE_FILE(*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o) + .ctors)) + _einit = ABSOLUTE(.); + } > flash + + .ARM.extab : + { + *(.ARM.extab*) + } > flash + + __exidx_start = ABSOLUTE(.); + .ARM.exidx : + { + *(.ARM.exidx*) + } > flash + __exidx_end = ABSOLUTE(.); + + _eronly = ABSOLUTE(.); + + .data : + { + _sdata = ABSOLUTE(.); + *(.data .data.*) + *(.gnu.linkonce.d.*) + CONSTRUCTORS + . = ALIGN(4); + _edata = ABSOLUTE(.); + } > sram AT > flash + + .bss : + { + _sbss = ABSOLUTE(.); + *(.bss .bss.*) + *(.gnu.linkonce.b.*) + *(COMMON) + . = ALIGN(8); + _ebss = ABSOLUTE(.); + } > sram + + .stab 0 : { *(.stab) } + .stabstr 0 : { *(.stabstr) } + .stab.excl 0 : { *(.stab.excl) } + .stab.exclstr 0 : { *(.stab.exclstr) } + .stab.index 0 : { *(.stab.index) } + .stab.indexstr 0 : { *(.stab.indexstr) } + .comment 0 : { *(.comment) } + .debug_abbrev 0 : { *(.debug_abbrev) } + .debug_info 0 : { *(.debug_info) } + .debug_line 0 : { *(.debug_line) } + .debug_pubnames 0 : { *(.debug_pubnames) } + .debug_aranges 0 : { *(.debug_aranges) } +} diff --git a/boards/arm/stm32c5/nucleo-c562re/src/CMakeLists.txt b/boards/arm/stm32c5/nucleo-c562re/src/CMakeLists.txt new file mode 100644 index 00000000000..c101ae94518 --- /dev/null +++ b/boards/arm/stm32c5/nucleo-c562re/src/CMakeLists.txt @@ -0,0 +1,37 @@ +# ############################################################################## +# boards/arm/stm32c5/nucleo-c562re/src/CMakeLists.txt +# +# SPDX-License-Identifier: Apache-2.0 +# +# Licensed to the Apache Software Foundation (ASF) under one or more contributor +# license agreements. See the NOTICE file distributed with this work for +# additional information regarding copyright ownership. The ASF licenses this +# file to you 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. +# +# ############################################################################## + +set(SRCS stm32_boot.c stm32_bringup.c) + +if(CONFIG_ARCH_LEDS) + list(APPEND SRCS stm32_autoleds.c) +else() + list(APPEND SRCS stm32_userleds.c) +endif() + +if(CONFIG_ARCH_BUTTONS) + list(APPEND SRCS stm32_buttons.c) +endif() + +target_sources(board PRIVATE ${SRCS}) + +set_property(GLOBAL PROPERTY LD_SCRIPT "${NUTTX_BOARD_DIR}/scripts/flash.ld") diff --git a/boards/arm/stm32c5/nucleo-c562re/src/Make.defs b/boards/arm/stm32c5/nucleo-c562re/src/Make.defs new file mode 100644 index 00000000000..14f75653809 --- /dev/null +++ b/boards/arm/stm32c5/nucleo-c562re/src/Make.defs @@ -0,0 +1,40 @@ +############################################################################ +# boards/arm/stm32c5/nucleo-c562re/src/Make.defs +# +# SPDX-License-Identifier: Apache-2.0 +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. The +# ASF licenses this file to you 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. +# +############################################################################ + +-include $(TOPDIR)/Make.defs + +ASRCS = +CSRCS = stm32_boot.c stm32_bringup.c + +ifeq ($(CONFIG_ARCH_LEDS),y) +CSRCS += stm32_autoleds.c +else +CSRCS += stm32_userleds.c +endif + +ifeq ($(CONFIG_ARCH_BUTTONS),y) +CSRCS += stm32_buttons.c +endif + +DEPPATH += --dep-path board +VPATH += :board +CFLAGS += ${INCDIR_PREFIX}$(TOPDIR)$(DELIM)arch$(DELIM)$(CONFIG_ARCH)$(DELIM)src$(DELIM)board$(DELIM)board diff --git a/boards/arm/stm32c5/nucleo-c562re/src/nucleo-c562re.h b/boards/arm/stm32c5/nucleo-c562re/src/nucleo-c562re.h new file mode 100644 index 00000000000..d453e84767f --- /dev/null +++ b/boards/arm/stm32c5/nucleo-c562re/src/nucleo-c562re.h @@ -0,0 +1,62 @@ +/**************************************************************************** + * boards/arm/stm32c5/nucleo-c562re/src/nucleo-c562re.h + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. The + * ASF licenses this file to you 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 __BOARDS_ARM_STM32C5_NUCLEO_C562RE_SRC_NUCLEO_C562RE_H +#define __BOARDS_ARM_STM32C5_NUCLEO_C562RE_SRC_NUCLEO_C562RE_H + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include + +#include + +#include "stm32_gpio.h" + +/**************************************************************************** + * Pre-processor Definitions + ****************************************************************************/ + +/* NUCLEO-C562RE GPIOs ******************************************************/ + +/* LD1 is connected to PA5 and is active high. */ + +#define GPIO_LD1 (GPIO_OUTPUT | GPIO_PUSHPULL | GPIO_SPEED_2MHZ | \ + GPIO_OUTPUT_CLEAR | GPIO_PORTA | GPIO_PIN5) + +/* B1 USER is connected to PC13 and is active high. */ + +#define MIN_IRQBUTTON BUTTON_USER +#define MAX_IRQBUTTON BUTTON_USER +#define NUM_IRQBUTTONS 1 + +#define GPIO_BTN_USER (GPIO_INPUT | GPIO_FLOAT | GPIO_EXTI | \ + GPIO_PORTC | GPIO_PIN13) + +/**************************************************************************** + * Public Function Prototypes + ****************************************************************************/ + +int stm32_bringup(void); + +#endif /* __BOARDS_ARM_STM32C5_NUCLEO_C562RE_SRC_NUCLEO_C562RE_H */ diff --git a/boards/arm/stm32c5/nucleo-c562re/src/stm32_autoleds.c b/boards/arm/stm32c5/nucleo-c562re/src/stm32_autoleds.c new file mode 100644 index 00000000000..6ffd9c32a9f --- /dev/null +++ b/boards/arm/stm32c5/nucleo-c562re/src/stm32_autoleds.c @@ -0,0 +1,61 @@ +/**************************************************************************** + * boards/arm/stm32c5/nucleo-c562re/src/stm32_autoleds.c + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. The + * ASF licenses this file to you 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. + * + ****************************************************************************/ + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include + +#include + +#include + +#include + +#include "stm32_gpio.h" +#include "nucleo-c562re.h" + +/**************************************************************************** + * Public Functions + ****************************************************************************/ + +void board_autoled_initialize(void) +{ + stm32_configgpio(GPIO_LD1); +} + +void board_autoled_on(int led) +{ + if (led == LED_STACKCREATED || led == LED_PANIC) + { + stm32_gpiowrite(GPIO_LD1, true); + } +} + +void board_autoled_off(int led) +{ + if (led == LED_PANIC) + { + stm32_gpiowrite(GPIO_LD1, false); + } +} diff --git a/boards/arm/stm32c5/nucleo-c562re/src/stm32_boot.c b/boards/arm/stm32c5/nucleo-c562re/src/stm32_boot.c new file mode 100644 index 00000000000..085d4ccb354 --- /dev/null +++ b/boards/arm/stm32c5/nucleo-c562re/src/stm32_boot.c @@ -0,0 +1,47 @@ +/**************************************************************************** + * boards/arm/stm32c5/nucleo-c562re/src/stm32_boot.c + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. The + * ASF licenses this file to you 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. + * + ****************************************************************************/ + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include + +#include + +#include "nucleo-c562re.h" + +/**************************************************************************** + * Public Functions + ****************************************************************************/ + +void stm32_board_initialize(void) +{ + board_autoled_initialize(); +} + +#ifdef CONFIG_BOARD_LATE_INITIALIZE +void board_late_initialize(void) +{ + stm32_bringup(); +} +#endif diff --git a/boards/arm/stm32c5/nucleo-c562re/src/stm32_bringup.c b/boards/arm/stm32c5/nucleo-c562re/src/stm32_bringup.c new file mode 100644 index 00000000000..b615ecdae62 --- /dev/null +++ b/boards/arm/stm32c5/nucleo-c562re/src/stm32_bringup.c @@ -0,0 +1,63 @@ +/**************************************************************************** + * boards/arm/stm32c5/nucleo-c562re/src/stm32_bringup.c + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. The + * ASF licenses this file to you 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. + * + ****************************************************************************/ + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include + +#include + +#include +#include +#include + +/**************************************************************************** + * Public Functions + ****************************************************************************/ + +int stm32_bringup(void) +{ + int ret; + +#ifdef CONFIG_FS_PROCFS + ret = mount(NULL, "/proc", "procfs", 0, NULL); + if (ret < 0) + { + return ret; + } +#endif + +#ifdef CONFIG_INPUT_BUTTONS + /* Register the BUTTON lower-half driver. */ + + ret = btn_lower_initialize("/dev/buttons"); + if (ret < 0) + { + syslog(LOG_ERR, "ERROR: btn_lower_initialize() failed: %d\n", ret); + } +#endif + + UNUSED(ret); + return OK; +} diff --git a/boards/arm/stm32c5/nucleo-c562re/src/stm32_buttons.c b/boards/arm/stm32c5/nucleo-c562re/src/stm32_buttons.c new file mode 100644 index 00000000000..88b72278ba9 --- /dev/null +++ b/boards/arm/stm32c5/nucleo-c562re/src/stm32_buttons.c @@ -0,0 +1,78 @@ +/**************************************************************************** + * boards/arm/stm32c5/nucleo-c562re/src/stm32_buttons.c + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. The + * ASF licenses this file to you 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. + * + ****************************************************************************/ + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include + +#include +#include +#include + +#include + +#include + +#include "stm32_gpio.h" +#include "nucleo-c562re.h" + +/**************************************************************************** + * Public Functions + ****************************************************************************/ + +/**************************************************************************** + * Name: board_button_initialize + ****************************************************************************/ + +uint32_t board_button_initialize(void) +{ + stm32_configgpio(GPIO_BTN_USER); + return NUM_BUTTONS; +} + +/**************************************************************************** + * Name: board_buttons + ****************************************************************************/ + +uint32_t board_buttons(void) +{ + return stm32_gpioread(GPIO_BTN_USER) ? BUTTON_USER_BIT : 0; +} + +/**************************************************************************** + * Name: board_button_irq + ****************************************************************************/ + +#ifdef CONFIG_ARCH_IRQBUTTONS +int board_button_irq(int id, xcpt_t irqhandler, void *arg) +{ + if (id != BUTTON_USER) + { + return -EINVAL; + } + + return stm32_gpiosetevent(GPIO_BTN_USER, true, true, true, + irqhandler, arg); +} +#endif diff --git a/boards/arm/stm32c5/nucleo-c562re/src/stm32_userleds.c b/boards/arm/stm32c5/nucleo-c562re/src/stm32_userleds.c new file mode 100644 index 00000000000..ae89b00a118 --- /dev/null +++ b/boards/arm/stm32c5/nucleo-c562re/src/stm32_userleds.c @@ -0,0 +1,76 @@ +/**************************************************************************** + * boards/arm/stm32c5/nucleo-c562re/src/stm32_userleds.c + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. The + * ASF licenses this file to you 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. + * + ****************************************************************************/ + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include + +#include + +#include + +#include + +#include "stm32_gpio.h" +#include "nucleo-c562re.h" + +/**************************************************************************** + * Public Functions + ****************************************************************************/ + +/**************************************************************************** + * Name: board_userled_initialize + * + * Description: + * Initialize the user LED GPIO when automatic architecture LED support is + * disabled. + * + ****************************************************************************/ + +uint32_t board_userled_initialize(void) +{ + stm32_configgpio(GPIO_LD1); + return BOARD_NLEDS; +} + +/**************************************************************************** + * Name: board_userled + ****************************************************************************/ + +void board_userled(int led, bool ledon) +{ + if (led == BOARD_LED_GREEN) + { + stm32_gpiowrite(GPIO_LD1, ledon); + } +} + +/**************************************************************************** + * Name: board_userled_all + ****************************************************************************/ + +void board_userled_all(uint32_t ledset) +{ + stm32_gpiowrite(GPIO_LD1, (ledset & BOARD_LED_GREEN_BIT) != 0); +}