diff options
| author | Ha Thach <[email protected]> | 2026-03-14 13:31:49 +0700 |
|---|---|---|
| committer | GitHub <[email protected]> | 2026-03-14 13:31:49 +0700 |
| commit | 8b59e6234dfe34f4d0658cea43b338eb04efa3c5 (patch) | |
| tree | 818140d6c447bd5da959fcdcab1c123295e43f39 /hw | |
| parent | f98f7e003fc8c4bcdf503e8c9bff29122b70cc9e (diff) | |
| parent | c5e3098c37cf165ffde9a304238558294e328e73 (diff) | |
Merge pull request #3550 from hathach/update-bsp
Update BSP
Diffstat (limited to 'hw')
| -rw-r--r-- | hw/bsp/ch32f20x/boards/ch32f205r-r0/board.cmake | 7 | ||||
| -rw-r--r-- | hw/bsp/ch32f20x/family.cmake | 97 | ||||
| -rw-r--r-- | hw/bsp/family_support.cmake | 34 | ||||
| -rw-r--r-- | hw/bsp/ft9xx/boards/mm900evxb/board.cmake | 5 | ||||
| -rw-r--r-- | hw/bsp/ft9xx/boards/mm900evxb/board.h (renamed from hw/bsp/brtmm90x/boards/mm900evxb/board.h) | 0 | ||||
| -rw-r--r-- | hw/bsp/ft9xx/boards/mm900evxb/board.mk | 1 | ||||
| -rw-r--r-- | hw/bsp/ft9xx/family.c (renamed from hw/bsp/brtmm90x/family.c) | 0 | ||||
| -rw-r--r-- | hw/bsp/ft9xx/family.cmake | 74 | ||||
| -rw-r--r-- | hw/bsp/ft9xx/family.mk (renamed from hw/bsp/brtmm90x/family.mk) | 13 | ||||
| -rw-r--r-- | hw/bsp/hpmicro/boards/hpm6750evk2/board.h | 5 | ||||
| -rw-r--r-- | hw/bsp/kinetis_k32l/FreeRTOSConfig/FreeRTOSConfig.h (renamed from hw/bsp/kinetis_k32l2/FreeRTOSConfig/FreeRTOSConfig.h) | 0 | ||||
| -rw-r--r-- | hw/bsp/kinetis_k32l/boards/frdm_k32l2a4s/board.cmake (renamed from hw/bsp/kinetis_k32l2/boards/frdm_k32l2a4s/board.cmake) | 6 | ||||
| -rw-r--r-- | hw/bsp/kinetis_k32l/boards/frdm_k32l2a4s/board.h (renamed from hw/bsp/kinetis_k32l2/boards/frdm_k32l2a4s/board.h) | 0 | ||||
| -rw-r--r-- | hw/bsp/kinetis_k32l/boards/frdm_k32l2a4s/board.mk (renamed from hw/bsp/kinetis_k32l2/boards/frdm_k32l2a4s/board.mk) | 10 | ||||
| -rw-r--r-- | hw/bsp/kinetis_k32l/boards/frdm_k32l2a4s/clock_config.c (renamed from hw/bsp/kinetis_k32l2/boards/frdm_k32l2a4s/clock_config.c) | 0 | ||||
| -rw-r--r-- | hw/bsp/kinetis_k32l/boards/frdm_k32l2a4s/clock_config.h (renamed from hw/bsp/kinetis_k32l2/boards/frdm_k32l2a4s/clock_config.h) | 0 | ||||
| -rw-r--r-- | hw/bsp/kinetis_k32l/boards/frdm_k32l2b/board.cmake (renamed from hw/bsp/kinetis_k32l2/boards/frdm_k32l2b/board.cmake) | 6 | ||||
| -rw-r--r-- | hw/bsp/kinetis_k32l/boards/frdm_k32l2b/board.h (renamed from hw/bsp/kinetis_k32l2/boards/frdm_k32l2b/board.h) | 0 | ||||
| -rw-r--r-- | hw/bsp/kinetis_k32l/boards/frdm_k32l2b/board.mk (renamed from hw/bsp/kinetis_k32l2/boards/frdm_k32l2b/board.mk) | 10 | ||||
| -rw-r--r-- | hw/bsp/kinetis_k32l/boards/frdm_k32l2b/clock_config.c (renamed from hw/bsp/kinetis_k32l2/boards/frdm_k32l2b/clock_config.c) | 0 | ||||
| -rw-r--r-- | hw/bsp/kinetis_k32l/boards/frdm_k32l2b/clock_config.h (renamed from hw/bsp/kinetis_k32l2/boards/frdm_k32l2b/clock_config.h) | 0 | ||||
| -rw-r--r-- | hw/bsp/kinetis_k32l/boards/kuiic/board.cmake (renamed from hw/bsp/kinetis_k32l2/boards/kuiic/board.cmake) | 4 | ||||
| -rw-r--r-- | hw/bsp/kinetis_k32l/boards/kuiic/board.h (renamed from hw/bsp/kinetis_k32l2/boards/kuiic/board.h) | 0 | ||||
| -rw-r--r-- | hw/bsp/kinetis_k32l/boards/kuiic/board.mk (renamed from hw/bsp/kinetis_k32l2/boards/kuiic/board.mk) | 8 | ||||
| -rw-r--r-- | hw/bsp/kinetis_k32l/boards/kuiic/clock_config.c (renamed from hw/bsp/kinetis_k32l2/boards/kuiic/clock_config.c) | 0 | ||||
| -rw-r--r-- | hw/bsp/kinetis_k32l/boards/kuiic/clock_config.h (renamed from hw/bsp/kinetis_k32l2/boards/kuiic/clock_config.h) | 0 | ||||
| -rw-r--r-- | hw/bsp/kinetis_k32l/boards/kuiic/kuiic.ld (renamed from hw/bsp/kinetis_k32l2/boards/kuiic/kuiic.ld) | 0 | ||||
| -rw-r--r-- | hw/bsp/kinetis_k32l/family.c (renamed from hw/bsp/kinetis_k32l2/family.c) | 0 | ||||
| -rw-r--r-- | hw/bsp/kinetis_k32l/family.cmake (renamed from hw/bsp/kinetis_k32l2/family.cmake) | 48 | ||||
| -rw-r--r-- | hw/bsp/kinetis_k32l/family.mk | 35 | ||||
| -rw-r--r-- | hw/bsp/kinetis_k32l2/family.mk | 35 | ||||
| -rw-r--r-- | hw/bsp/rx/FreeRTOSConfig/FreeRTOSConfig.h | 2 | ||||
| -rw-r--r-- | hw/bsp/rx/boards/gr_citrus/board.cmake | 19 | ||||
| -rw-r--r-- | hw/bsp/rx/boards/gr_citrus/board.h | 21 | ||||
| -rw-r--r-- | hw/bsp/rx/boards/gr_citrus/gr_citrus.c | 199 | ||||
| -rw-r--r-- | hw/bsp/rx/boards/gr_citrus/hwinit.c | 31 | ||||
| -rw-r--r-- | hw/bsp/rx/boards/rx65n_target/board.cmake | 22 | ||||
| -rw-r--r-- | hw/bsp/rx/boards/rx65n_target/board.h | 28 | ||||
| -rw-r--r-- | hw/bsp/rx/boards/rx65n_target/rx65n_target.c | 209 | ||||
| -rw-r--r-- | hw/bsp/rx/family.c | 234 | ||||
| -rw-r--r-- | hw/bsp/rx/family.cmake | 83 | ||||
| -rw-r--r-- | hw/bsp/rx/family.mk | 4 | ||||
| -rw-r--r-- | hw/bsp/stm32h7/boards/stm32h747disco/board.h | 4 |
43 files changed, 777 insertions, 477 deletions
diff --git a/hw/bsp/ch32f20x/boards/ch32f205r-r0/board.cmake b/hw/bsp/ch32f20x/boards/ch32f205r-r0/board.cmake new file mode 100644 index 000000000..d2877102d --- /dev/null +++ b/hw/bsp/ch32f20x/boards/ch32f205r-r0/board.cmake @@ -0,0 +1,7 @@ +set(MCU_VARIANT D8C) + +function(update_board TARGET) + target_compile_definitions(${TARGET} PUBLIC + CH32F20x_D8C + ) +endfunction() diff --git a/hw/bsp/ch32f20x/family.cmake b/hw/bsp/ch32f20x/family.cmake new file mode 100644 index 000000000..2027f7bb1 --- /dev/null +++ b/hw/bsp/ch32f20x/family.cmake @@ -0,0 +1,97 @@ +include_guard() + +set(CH32_FAMILY ch32f20x) +set(SDK_DIR ${TOP}/hw/mcu/wch/${CH32_FAMILY}) +set(SDK_SRC_DIR ${SDK_DIR}/EVT/EXAM/SRC) + +# include board specific +include(${CMAKE_CURRENT_LIST_DIR}/boards/${BOARD}/board.cmake) + +# toolchain set up +set(CMAKE_SYSTEM_CPU cortex-m3 CACHE INTERNAL "System Processor") +set(CMAKE_TOOLCHAIN_FILE ${TOP}/examples/build_system/cmake/toolchain/arm_${TOOLCHAIN}.cmake) + +set(FAMILY_MCUS CH32F20X CACHE INTERNAL "") + +#------------------------------------ +# Startup & Linker script +#------------------------------------ +if (NOT DEFINED LD_FILE_GNU) + set(LD_FILE_GNU ${CMAKE_CURRENT_LIST_DIR}/ch32f205.ld) +endif () +set(LD_FILE_Clang ${LD_FILE_GNU}) + +if (NOT DEFINED STARTUP_FILE_GNU) + set(STARTUP_FILE_GNU ${CMAKE_CURRENT_LIST_DIR}/startup_gcc_ch32f20x_d8c.s) +endif () +set(STARTUP_FILE_Clang ${STARTUP_FILE_GNU}) + +#------------------------------------ +# Board Target +#------------------------------------ +function(family_add_board BOARD_TARGET) + add_library(${BOARD_TARGET} STATIC + ${SDK_SRC_DIR}/StdPeriphDriver/src/${CH32_FAMILY}_gpio.c + ${SDK_SRC_DIR}/StdPeriphDriver/src/${CH32_FAMILY}_misc.c + ${SDK_SRC_DIR}/StdPeriphDriver/src/${CH32_FAMILY}_rcc.c + ${SDK_SRC_DIR}/StdPeriphDriver/src/${CH32_FAMILY}_usart.c + ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/system_${CH32_FAMILY}.c + ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/debug_uart.c + ) + target_include_directories(${BOARD_TARGET} PUBLIC + ${SDK_SRC_DIR}/StdPeriphDriver/inc + ${CMAKE_CURRENT_FUNCTION_LIST_DIR} + ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/boards/${BOARD} + ) + target_compile_definitions(${BOARD_TARGET} PUBLIC + BOARD_TUD_MAX_SPEED=OPT_MODE_HIGH_SPEED + ) + + update_board(${BOARD_TARGET}) +endfunction() + +#------------------------------------ +# Functions +#------------------------------------ +function(family_configure_example TARGET RTOS) + family_configure_common(${TARGET} ${RTOS}) + family_add_tinyusb(${TARGET} OPT_MCU_CH32F20X) + + target_sources(${TARGET} PUBLIC + ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/family.c + ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/../board.c + ${TOP}/src/portable/wch/dcd_ch32_usbhs.c + ${STARTUP_FILE_${CMAKE_C_COMPILER_ID}} + ) + target_include_directories(${TARGET} PUBLIC + ${CMAKE_CURRENT_FUNCTION_LIST_DIR} + ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/../../ + ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/boards/${BOARD} + ) + + if (CMAKE_C_COMPILER_ID STREQUAL "GNU") + target_link_options(${TARGET} PUBLIC + "LINKER:--script=${LD_FILE_GNU}" + --specs=nosys.specs --specs=nano.specs + ) + elseif (CMAKE_C_COMPILER_ID STREQUAL "Clang") + target_link_options(${TARGET} PUBLIC + "LINKER:--script=${LD_FILE_Clang}" + ) + elseif (CMAKE_C_COMPILER_ID STREQUAL "IAR") + target_link_options(${TARGET} PUBLIC + "LINKER:--config=${LD_FILE_IAR}" + ) + endif () + + if (CMAKE_C_COMPILER_ID STREQUAL "GNU" OR CMAKE_C_COMPILER_ID STREQUAL "Clang") + set_source_files_properties(${CMAKE_CURRENT_FUNCTION_LIST_DIR}/family.c PROPERTIES COMPILE_FLAGS "-Wno-missing-prototypes") + endif () + set_source_files_properties(${STARTUP_FILE_${CMAKE_C_COMPILER_ID}} PROPERTIES + SKIP_LINTING ON + COMPILE_OPTIONS -w) + + # Flashing + family_add_bin_hex(${TARGET}) + family_flash_stlink(${TARGET}) +endfunction() diff --git a/hw/bsp/family_support.cmake b/hw/bsp/family_support.cmake index 5d21b4f79..96d6993e6 100644 --- a/hw/bsp/family_support.cmake +++ b/hw/bsp/family_support.cmake @@ -846,6 +846,25 @@ function(family_flash_msp430flasher TARGET) set_property(TARGET ${TARGET}-msp430flasher PROPERTY FOLDER ${TARGET}-group) endfunction() +function(family_flash_rfp TARGET) + if (NOT DEFINED RFP_CLI) + set(RFP_CLI rfp-cli) + endif () + + add_custom_target(${TARGET}-rfp + DEPENDS ${TARGET} + COMMAND ${CMAKE_OBJCOPY} -O srec -I elf32-rx-be-ns $<TARGET_FILE:${TARGET}> $<TARGET_FILE_DIR:${TARGET}>/${TARGET}.mot + COMMAND ${RFP_CLI} -device ${RFP_DEVICE} -tool ${RFP_TOOL} -if fine + -fo id FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + -auth id FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + -auto $<TARGET_FILE_DIR:${TARGET}>/${TARGET}.mot + VERBATIM + ) + + set_property(TARGET ${TARGET}-rfp PROPERTY FOLDER ${TARGET}-group) +endfunction() + + function(family_flash_uniflash TARGET) if (NOT DEFINED DSLITE) set(DSLITE dslite.sh) @@ -862,6 +881,21 @@ function(family_flash_uniflash TARGET) set_property(TARGET ${TARGET}-uniflash PROPERTY FOLDER ${TARGET}-group) endfunction() +# Add flash ft9xx target need to remove kernal's ftdi_sio and bind D2XX drivers +# sudo rmmod ftdi_sio && for i in 0 1 2 3; do sudo sh -c "echo 3-3.4:1.$i > /sys/bus/usb/drivers/ftdi_sio/unbind" 2>/dev/null; done +function(family_flash_ft9xx TARGET) + if (NOT DEFINED FT9XXPROG) + set(FT9XXPROG FT9xxProg) + endif () + + add_custom_target(${TARGET}-ft9xx + DEPENDS ${TARGET} + COMMAND ${FT9XXPROG} -f $<TARGET_FILE_DIR:${TARGET}>/${TARGET}.bin + ) + + set_property(TARGET ${TARGET}-ft9xx PROPERTY FOLDER ${TARGET}-group) +endfunction() + #---------------------------------- # Family specific #---------------------------------- diff --git a/hw/bsp/ft9xx/boards/mm900evxb/board.cmake b/hw/bsp/ft9xx/boards/mm900evxb/board.cmake new file mode 100644 index 000000000..49b779de4 --- /dev/null +++ b/hw/bsp/ft9xx/boards/mm900evxb/board.cmake @@ -0,0 +1,5 @@ +function(update_board TARGET) + target_compile_definitions(${TARGET} PUBLIC + __FT900__ + ) +endfunction() diff --git a/hw/bsp/brtmm90x/boards/mm900evxb/board.h b/hw/bsp/ft9xx/boards/mm900evxb/board.h index 623033c2c..623033c2c 100644 --- a/hw/bsp/brtmm90x/boards/mm900evxb/board.h +++ b/hw/bsp/ft9xx/boards/mm900evxb/board.h diff --git a/hw/bsp/ft9xx/boards/mm900evxb/board.mk b/hw/bsp/ft9xx/boards/mm900evxb/board.mk new file mode 100644 index 000000000..4e22ff2e6 --- /dev/null +++ b/hw/bsp/ft9xx/boards/mm900evxb/board.mk @@ -0,0 +1 @@ +CFLAGS += -D__FT900__ diff --git a/hw/bsp/brtmm90x/family.c b/hw/bsp/ft9xx/family.c index ff24cfe89..ff24cfe89 100644 --- a/hw/bsp/brtmm90x/family.c +++ b/hw/bsp/ft9xx/family.c diff --git a/hw/bsp/ft9xx/family.cmake b/hw/bsp/ft9xx/family.cmake new file mode 100644 index 000000000..31efb3c10 --- /dev/null +++ b/hw/bsp/ft9xx/family.cmake @@ -0,0 +1,74 @@ +include_guard() + +set(FT9XX_SDK ${TOP}/hw/mcu/bridgetek/ft9xx/ft90x-sdk/Source) + +# include board specific +include(${CMAKE_CURRENT_LIST_DIR}/boards/${BOARD}/board.cmake) + +# toolchain set up +set(CMAKE_SYSTEM_CPU ft32 CACHE INTERNAL "System Processor") +set(CMAKE_TOOLCHAIN_FILE ${TOP}/examples/build_system/cmake/toolchain/ft32_${TOOLCHAIN}.cmake) + +set(FAMILY_MCUS FT90X CACHE INTERNAL "") + +#------------------------------------ +# BOARD_TARGET +#------------------------------------ +function(family_add_board BOARD_TARGET) + add_library(${BOARD_TARGET} STATIC + ${FT9XX_SDK}/src/sys.c + ${FT9XX_SDK}/src/interrupt.c + ${FT9XX_SDK}/src/delay.c + ${FT9XX_SDK}/src/timers.c + ${FT9XX_SDK}/src/uart_simple.c + ${FT9XX_SDK}/src/gpio.c + ) + target_include_directories(${BOARD_TARGET} PUBLIC + ${FT9XX_SDK}/include + ${CMAKE_CURRENT_FUNCTION_LIST_DIR} + ) + target_compile_definitions(${BOARD_TARGET} PUBLIC + BOARD_TUD_MAX_SPEED=OPT_MODE_HIGH_SPEED + ) + target_compile_options(${BOARD_TARGET} PUBLIC + -fmessage-length=0 + ) + + update_board(${BOARD_TARGET}) +endfunction() + +#------------------------------------ +# Functions +#------------------------------------ +function(family_configure_example TARGET RTOS) + family_configure_common(${TARGET} ${RTOS}) + family_add_tinyusb(${TARGET} OPT_MCU_FT90X) + + target_sources(${TARGET} PUBLIC + ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/family.c + ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/../board.c + ${TOP}/src/portable/bridgetek/ft9xx/dcd_ft9xx.c + ${FT9XX_SDK}/src/bootstrap.c + ) + set_source_files_properties(${FT9XX_SDK}/src/bootstrap.c PROPERTIES + COMPILE_OPTIONS "-w") + target_include_directories(${TARGET} PUBLIC + ${CMAKE_CURRENT_FUNCTION_LIST_DIR} + ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/../../ + ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/boards/${BOARD} + ) + target_compile_options(${TARGET} PUBLIC + -Wno-error=shadow + ) + + if (CMAKE_C_COMPILER_ID STREQUAL "GNU") + target_link_options(${TARGET} PUBLIC + "LINKER:--script=${TOP}/hw/mcu/bridgetek/ft9xx/scripts/ldscript.ld" + "LINKER:--entry=_start" + ) + endif () + + # Flashing + family_add_bin_hex(${TARGET}) + family_flash_ft9xx(${TARGET}) +endfunction() diff --git a/hw/bsp/brtmm90x/family.mk b/hw/bsp/ft9xx/family.mk index 2de4dc760..9d71bf321 100644 --- a/hw/bsp/brtmm90x/family.mk +++ b/hw/bsp/ft9xx/family.mk @@ -18,13 +18,14 @@ FT9XX_SDK = hw/mcu/bridgetek/ft9xx/ft90x-sdk/Source INC += "$(TOP)/$(FT9XX_SDK)/include" endif +include $(TOP)/$(BOARD_PATH)/board.mk + # Add include files which are within the TinyUSB directory structure. INC += \ $(TOP)/$(BOARD_PATH) -# Add required C Compiler flags for FT90X. +# Add required C Compiler flags for FT9XX. CFLAGS += \ - -D__FT900__ \ -fvar-tracking \ -fvar-tracking-assignments \ -fmessage-length=0 \ @@ -50,6 +51,7 @@ SRC_C += src/portable/bridgetek/ft9xx/dcd_ft9xx.c ifneq ($(FT9XX_PREBUILT_LIBS),1) # Optionally add in files from the Bridgetek SDK instead of the prebuilt # library. These are the minimum required. +SRC_C += $(FT9XX_SDK)/src/bootstrap.c SRC_C += $(FT9XX_SDK)/src/sys.c SRC_C += $(FT9XX_SDK)/src/interrupt.c SRC_C += $(FT9XX_SDK)/src/delay.c @@ -64,3 +66,10 @@ endif # Not required crt0 file for FT90X. Use compiler built-in file. #SRC_S += hw/mcu/bridgetek/ft9xx/scripts/crt0.S + +# Flash using FT9xxProg, need to remove kernal's ftdi_sio and bind D2XX drivers +# sudo rmmod ftdi_sio && for i in 0 1 2 3; do sudo sh -c "echo 3-3.4:1.$i > /sys/bus/usb/drivers/ftdi_sio/unbind" 2>/dev/null; done +FT9XXPROG ?= FT9xxProg +flash: flash-ft9xx +flash-ft9xx: $(BUILD)/$(PROJECT).bin + $(FT9XXPROG) -f $< diff --git a/hw/bsp/hpmicro/boards/hpm6750evk2/board.h b/hw/bsp/hpmicro/boards/hpm6750evk2/board.h index 0636a4722..929e11c0d 100644 --- a/hw/bsp/hpmicro/boards/hpm6750evk2/board.h +++ b/hw/bsp/hpmicro/boards/hpm6750evk2/board.h @@ -5,6 +5,11 @@ * */ +/* metadata: + name: HPM6750EVK2 + url: https://hpm-sdk.readthedocs.io/en/v1.6.0/boards/hpm6750evk2/README_en.html +*/ + #ifndef _HPM_BOARD_H #define _HPM_BOARD_H diff --git a/hw/bsp/kinetis_k32l2/FreeRTOSConfig/FreeRTOSConfig.h b/hw/bsp/kinetis_k32l/FreeRTOSConfig/FreeRTOSConfig.h index 0225abe8d..0225abe8d 100644 --- a/hw/bsp/kinetis_k32l2/FreeRTOSConfig/FreeRTOSConfig.h +++ b/hw/bsp/kinetis_k32l/FreeRTOSConfig/FreeRTOSConfig.h diff --git a/hw/bsp/kinetis_k32l2/boards/frdm_k32l2a4s/board.cmake b/hw/bsp/kinetis_k32l/boards/frdm_k32l2a4s/board.cmake index 538aec2ca..3e7a4cac6 100644 --- a/hw/bsp/kinetis_k32l2/boards/frdm_k32l2a4s/board.cmake +++ b/hw/bsp/kinetis_k32l/boards/frdm_k32l2a4s/board.cmake @@ -1,9 +1,10 @@ set(MCU_VARIANT K32L2A41A) +set(MCU_CORE ${MCU_VARIANT}) set(JLINK_DEVICE K32L2A41xxxxA) set(PYOCD_TARGET K32L2A) -set(LD_FILE_GNU ${SDK_DIR}/devices/${MCU_VARIANT}/gcc/K32L2A41xxxxA_flash.ld) +set(LD_FILE_GNU ${MCUX_DEVICES}/K32L/${MCU_VARIANT}/gcc/K32L2A41xxxxA_flash.ld) function(update_board TARGET) target_sources(${TARGET} PUBLIC @@ -12,4 +13,7 @@ function(update_board TARGET) target_compile_definitions(${TARGET} PUBLIC CPU_K32L2A41VLH1A ) + target_include_directories(${TARGET} PUBLIC + ${MCUX_DEVICES}/K32L/periph1 + ) endfunction() diff --git a/hw/bsp/kinetis_k32l2/boards/frdm_k32l2a4s/board.h b/hw/bsp/kinetis_k32l/boards/frdm_k32l2a4s/board.h index 9e2534307..9e2534307 100644 --- a/hw/bsp/kinetis_k32l2/boards/frdm_k32l2a4s/board.h +++ b/hw/bsp/kinetis_k32l/boards/frdm_k32l2a4s/board.h diff --git a/hw/bsp/kinetis_k32l2/boards/frdm_k32l2a4s/board.mk b/hw/bsp/kinetis_k32l/boards/frdm_k32l2a4s/board.mk index fb3eb2a03..513b78d66 100644 --- a/hw/bsp/kinetis_k32l2/boards/frdm_k32l2a4s/board.mk +++ b/hw/bsp/kinetis_k32l/boards/frdm_k32l2a4s/board.mk @@ -1,4 +1,4 @@ -MCU = K32L2A41A +MCU_VARIANT = K32L2A41A CFLAGS += -DCPU_K32L2A41VLH1A @@ -6,7 +6,13 @@ CFLAGS += -DCPU_K32L2A41VLH1A CFLAGS_GCC += -Wno-error=unused-parameter -Wno-error=redundant-decls -Wno-error=cast-qual # All source paths should be relative to the top level. -LD_FILE = $(MCU_DIR)/gcc/K32L2A41xxxxA_flash.ld +LD_FILE = $(MCUX_DEVICES)/K32L/$(MCU_VARIANT)/gcc/K32L2A41xxxxA_flash.ld + +INC += \ + $(TOP)/$(MCUX_DEVICES)/K32L/periph1 + +SRC_C += \ + $(BOARD_PATH)/clock_config.c # For flash-jlink target JLINK_DEVICE = K32L2A41xxxxA diff --git a/hw/bsp/kinetis_k32l2/boards/frdm_k32l2a4s/clock_config.c b/hw/bsp/kinetis_k32l/boards/frdm_k32l2a4s/clock_config.c index 7947faefe..7947faefe 100644 --- a/hw/bsp/kinetis_k32l2/boards/frdm_k32l2a4s/clock_config.c +++ b/hw/bsp/kinetis_k32l/boards/frdm_k32l2a4s/clock_config.c diff --git a/hw/bsp/kinetis_k32l2/boards/frdm_k32l2a4s/clock_config.h b/hw/bsp/kinetis_k32l/boards/frdm_k32l2a4s/clock_config.h index c01d5e03c..c01d5e03c 100644 --- a/hw/bsp/kinetis_k32l2/boards/frdm_k32l2a4s/clock_config.h +++ b/hw/bsp/kinetis_k32l/boards/frdm_k32l2a4s/clock_config.h diff --git a/hw/bsp/kinetis_k32l2/boards/frdm_k32l2b/board.cmake b/hw/bsp/kinetis_k32l/boards/frdm_k32l2b/board.cmake index 2ec2acace..0efb0cb3f 100644 --- a/hw/bsp/kinetis_k32l2/boards/frdm_k32l2b/board.cmake +++ b/hw/bsp/kinetis_k32l/boards/frdm_k32l2b/board.cmake @@ -1,9 +1,10 @@ set(MCU_VARIANT K32L2B31A) +set(MCU_CORE ${MCU_VARIANT}) set(JLINK_DEVICE K32L2B31xxxxA) set(PYOCD_TARGET K32L2B) -set(LD_FILE_GNU ${SDK_DIR}/devices/${MCU_VARIANT}/gcc/K32L2B31xxxxA_flash.ld) +set(LD_FILE_GNU ${MCUX_DEVICES}/K32L/${MCU_VARIANT}/gcc/K32L2B31xxxxA_flash.ld) function(update_board TARGET) target_sources(${TARGET} PUBLIC @@ -12,4 +13,7 @@ function(update_board TARGET) target_compile_definitions(${TARGET} PUBLIC CPU_K32L2B31VLH0A ) + target_include_directories(${TARGET} PUBLIC + ${MCUX_DEVICES}/K32L/periph2 + ) endfunction() diff --git a/hw/bsp/kinetis_k32l2/boards/frdm_k32l2b/board.h b/hw/bsp/kinetis_k32l/boards/frdm_k32l2b/board.h index 854340d6d..854340d6d 100644 --- a/hw/bsp/kinetis_k32l2/boards/frdm_k32l2b/board.h +++ b/hw/bsp/kinetis_k32l/boards/frdm_k32l2b/board.h diff --git a/hw/bsp/kinetis_k32l2/boards/frdm_k32l2b/board.mk b/hw/bsp/kinetis_k32l/boards/frdm_k32l2b/board.mk index 9cf36c500..b204a142c 100644 --- a/hw/bsp/kinetis_k32l2/boards/frdm_k32l2b/board.mk +++ b/hw/bsp/kinetis_k32l/boards/frdm_k32l2b/board.mk @@ -1,4 +1,4 @@ -MCU = K32L2B31A +MCU_VARIANT = K32L2B31A CFLAGS += -DCPU_K32L2B31VLH0A @@ -6,7 +6,13 @@ CFLAGS += -DCPU_K32L2B31VLH0A CFLAGS += -Wno-error=unused-parameter -Wno-error=redundant-decls # All source paths should be relative to the top level. -LD_FILE = $(MCU_DIR)/gcc/K32L2B31xxxxA_flash.ld +LD_FILE = $(MCUX_DEVICES)/K32L/$(MCU_VARIANT)/gcc/K32L2B31xxxxA_flash.ld + +INC += \ + $(TOP)/$(MCUX_DEVICES)/K32L/periph2 + +SRC_C += \ + $(BOARD_PATH)/clock_config.c # For flash-jlink target JLINK_DEVICE = K32L2B31xxxxA diff --git a/hw/bsp/kinetis_k32l2/boards/frdm_k32l2b/clock_config.c b/hw/bsp/kinetis_k32l/boards/frdm_k32l2b/clock_config.c index 86eb42ef8..86eb42ef8 100644 --- a/hw/bsp/kinetis_k32l2/boards/frdm_k32l2b/clock_config.c +++ b/hw/bsp/kinetis_k32l/boards/frdm_k32l2b/clock_config.c diff --git a/hw/bsp/kinetis_k32l2/boards/frdm_k32l2b/clock_config.h b/hw/bsp/kinetis_k32l/boards/frdm_k32l2b/clock_config.h index 37328e7d8..37328e7d8 100644 --- a/hw/bsp/kinetis_k32l2/boards/frdm_k32l2b/clock_config.h +++ b/hw/bsp/kinetis_k32l/boards/frdm_k32l2b/clock_config.h diff --git a/hw/bsp/kinetis_k32l2/boards/kuiic/board.cmake b/hw/bsp/kinetis_k32l/boards/kuiic/board.cmake index cf14000ac..506f23e51 100644 --- a/hw/bsp/kinetis_k32l2/boards/kuiic/board.cmake +++ b/hw/bsp/kinetis_k32l/boards/kuiic/board.cmake @@ -1,4 +1,5 @@ set(MCU_VARIANT K32L2B31A) +set(MCU_CORE ${MCU_VARIANT}) set(JLINK_DEVICE K32L2B31xxxxA) set(PYOCD_TARGET K32L2B) @@ -12,4 +13,7 @@ function(update_board TARGET) target_compile_definitions(${TARGET} PUBLIC CPU_K32L2B31VLH0A ) + target_include_directories(${TARGET} PUBLIC + ${MCUX_DEVICES}/K32L/periph2 + ) endfunction() diff --git a/hw/bsp/kinetis_k32l2/boards/kuiic/board.h b/hw/bsp/kinetis_k32l/boards/kuiic/board.h index f5895fc65..f5895fc65 100644 --- a/hw/bsp/kinetis_k32l2/boards/kuiic/board.h +++ b/hw/bsp/kinetis_k32l/boards/kuiic/board.h diff --git a/hw/bsp/kinetis_k32l2/boards/kuiic/board.mk b/hw/bsp/kinetis_k32l/boards/kuiic/board.mk index 2bc5b1e34..4dc4ff60b 100644 --- a/hw/bsp/kinetis_k32l2/boards/kuiic/board.mk +++ b/hw/bsp/kinetis_k32l/boards/kuiic/board.mk @@ -1,4 +1,4 @@ -MCU = K32L2B31A +MCU_VARIANT = K32L2B31A CFLAGS += -DCPU_K32L2B31VLH0A @@ -8,6 +8,12 @@ CFLAGS += -Wno-error=unused-parameter -Wno-error=redundant-decls # All source paths should be relative to the top level. LD_FILE = $(BOARD_PATH)/kuiic.ld +INC += \ + $(TOP)/$(MCUX_DEVICES)/K32L/periph2 + +SRC_C += \ + $(BOARD_PATH)/clock_config.c + # For flash-jlink target JLINK_DEVICE = K32L2B31xxxxA diff --git a/hw/bsp/kinetis_k32l2/boards/kuiic/clock_config.c b/hw/bsp/kinetis_k32l/boards/kuiic/clock_config.c index c1a6d1a8d..c1a6d1a8d 100644 --- a/hw/bsp/kinetis_k32l2/boards/kuiic/clock_config.c +++ b/hw/bsp/kinetis_k32l/boards/kuiic/clock_config.c diff --git a/hw/bsp/kinetis_k32l2/boards/kuiic/clock_config.h b/hw/bsp/kinetis_k32l/boards/kuiic/clock_config.h index 920cad98f..920cad98f 100644 --- a/hw/bsp/kinetis_k32l2/boards/kuiic/clock_config.h +++ b/hw/bsp/kinetis_k32l/boards/kuiic/clock_config.h diff --git a/hw/bsp/kinetis_k32l2/boards/kuiic/kuiic.ld b/hw/bsp/kinetis_k32l/boards/kuiic/kuiic.ld index f478a99c7..f478a99c7 100644 --- a/hw/bsp/kinetis_k32l2/boards/kuiic/kuiic.ld +++ b/hw/bsp/kinetis_k32l/boards/kuiic/kuiic.ld diff --git a/hw/bsp/kinetis_k32l2/family.c b/hw/bsp/kinetis_k32l/family.c index ec8dc6ecf..ec8dc6ecf 100644 --- a/hw/bsp/kinetis_k32l2/family.c +++ b/hw/bsp/kinetis_k32l/family.c diff --git a/hw/bsp/kinetis_k32l2/family.cmake b/hw/bsp/kinetis_k32l/family.cmake index 110335ab2..020695589 100644 --- a/hw/bsp/kinetis_k32l2/family.cmake +++ b/hw/bsp/kinetis_k32l/family.cmake @@ -1,7 +1,8 @@ include_guard() -set(SDK_DIR ${TOP}/hw/mcu/nxp/mcux-sdk) -set(CMSIS_DIR ${TOP}/lib/CMSIS_5) +set(MCUX_CORE ${TOP}/hw/mcu/nxp/mcuxsdk-core) +set(MCUX_DEVICES ${TOP}/hw/mcu/nxp/mcux-devices-kinetis) +set(CMSIS_DIR ${TOP}/lib/CMSIS_6) # include board specific include(${CMAKE_CURRENT_LIST_DIR}/boards/${BOARD}/board.cmake) @@ -16,32 +17,38 @@ set(FAMILY_MCUS KINETIS_K32L CACHE INTERNAL "") #------------------------------------ # Startup & Linker script #------------------------------------ -set(LD_FILE_Clang ${LD_FILE_GNU}) -set(STARTUP_FILE_GNU ${SDK_DIR}/devices/${MCU_VARIANT}/gcc/startup_${MCU_VARIANT}.S) -set(STARTUP_FILE_Clang ${STARTUP_FILE_GNU}) +if (NOT DEFINED LD_FILE_GNU) + set(LD_FILE_GNU ${MCUX_DEVICES}/K32L/${MCU_VARIANT}/gcc/${MCU_CORE}_flash.ld) +endif () +if (NOT DEFINED STARTUP_FILE_GNU) + set(STARTUP_FILE_GNU ${MCUX_DEVICES}/K32L/${MCU_VARIANT}/gcc/startup_${MCU_VARIANT}.S) +endif () #------------------------------------ # Board Target #------------------------------------ function(family_add_board BOARD_TARGET) add_library(${BOARD_TARGET} STATIC - ${SDK_DIR}/drivers/gpio/fsl_gpio.c - ${SDK_DIR}/drivers/lpuart/fsl_lpuart.c - ${SDK_DIR}/devices/${MCU_VARIANT}/drivers/fsl_clock.c - ${SDK_DIR}/devices/${MCU_VARIANT}/system_${MCU_VARIANT}.c + # driver + ${MCUX_CORE}/drivers/gpio/fsl_gpio.c + ${MCUX_CORE}/drivers/common/fsl_common_arm.c + ${MCUX_CORE}/drivers/lpuart/fsl_lpuart.c + # mcu + ${MCUX_DEVICES}/K32L/${MCU_VARIANT}/system_${MCU_VARIANT}.c + ${MCUX_DEVICES}/K32L/${MCU_VARIANT}/drivers/fsl_clock.c ) target_compile_definitions(${BOARD_TARGET} PUBLIC __STARTUP_CLEAR_BSS ) target_include_directories(${BOARD_TARGET} PUBLIC ${CMSIS_DIR}/CMSIS/Core/Include - ${SDK_DIR}/devices/${MCU_VARIANT} - ${SDK_DIR}/devices/${MCU_VARIANT}/drivers - ${SDK_DIR}/drivers/common - ${SDK_DIR}/drivers/gpio - ${SDK_DIR}/drivers/lpuart - ${SDK_DIR}/drivers/port - ${SDK_DIR}/drivers/smc + ${MCUX_CORE}/drivers/common + ${MCUX_CORE}/drivers/gpio + ${MCUX_CORE}/drivers/lpuart + ${MCUX_CORE}/drivers/port + ${MCUX_CORE}/drivers/smc + ${MCUX_DEVICES}/K32L/${MCU_VARIANT} + ${MCUX_DEVICES}/K32L/${MCU_VARIANT}/drivers ) update_board(${BOARD_TARGET}) @@ -73,19 +80,12 @@ function(family_configure_example TARGET RTOS) --specs=nosys.specs --specs=nano.specs -nostartfiles ) - elseif (CMAKE_C_COMPILER_ID STREQUAL "Clang") - target_link_options(${TARGET} PUBLIC - "LINKER:--script=${LD_FILE_GNU}" - ) + set_source_files_properties(${CMAKE_CURRENT_FUNCTION_LIST_DIR}/family.c PROPERTIES COMPILE_FLAGS "-Wno-missing-prototypes") elseif (CMAKE_C_COMPILER_ID STREQUAL "IAR") target_link_options(${TARGET} PUBLIC "LINKER:--config=${LD_FILE_IAR}" ) endif () - - if (CMAKE_C_COMPILER_ID STREQUAL "GNU" OR CMAKE_C_COMPILER_ID STREQUAL "Clang") - set_source_files_properties(${CMAKE_CURRENT_FUNCTION_LIST_DIR}/family.c PROPERTIES COMPILE_FLAGS "-Wno-missing-prototypes") - endif () set_source_files_properties(${STARTUP_FILE_${CMAKE_C_COMPILER_ID}} PROPERTIES SKIP_LINTING ON COMPILE_OPTIONS -w) diff --git a/hw/bsp/kinetis_k32l/family.mk b/hw/bsp/kinetis_k32l/family.mk new file mode 100644 index 000000000..2802337d3 --- /dev/null +++ b/hw/bsp/kinetis_k32l/family.mk @@ -0,0 +1,35 @@ +UF2_FAMILY_ID = 0x7f83e793 + +include $(TOP)/$(BOARD_PATH)/board.mk +CPU_CORE ?= cortex-m0plus +MCUX_CORE = hw/mcu/nxp/mcuxsdk-core +MCUX_DEVICES = hw/mcu/nxp/mcux-devices-kinetis + +CFLAGS += \ + -DCFG_TUSB_MCU=OPT_MCU_KINETIS_K32L + +LDFLAGS_GCC += \ + -nostartfiles \ + -specs=nosys.specs -specs=nano.specs + +SRC_C += \ + src/portable/nxp/khci/dcd_khci.c \ + src/portable/nxp/khci/hcd_khci.c \ + $(MCUX_DEVICES)/K32L/$(MCU_VARIANT)/system_$(MCU_VARIANT).c \ + $(MCUX_DEVICES)/K32L/$(MCU_VARIANT)/drivers/fsl_clock.c \ + $(MCUX_CORE)/drivers/gpio/fsl_gpio.c \ + $(MCUX_CORE)/drivers/lpuart/fsl_lpuart.c \ + $(MCUX_CORE)/drivers/common/fsl_common_arm.c + +INC += \ + $(TOP)/$(BOARD_PATH) \ + $(TOP)/lib/CMSIS_6/CMSIS/Core/Include \ + $(TOP)/$(MCUX_DEVICES)/K32L/$(MCU_VARIANT) \ + $(TOP)/$(MCUX_DEVICES)/K32L/$(MCU_VARIANT)/drivers \ + $(TOP)/$(MCUX_CORE)/drivers/common \ + $(TOP)/$(MCUX_CORE)/drivers/gpio \ + $(TOP)/$(MCUX_CORE)/drivers/lpuart \ + $(TOP)/$(MCUX_CORE)/drivers/port \ + $(TOP)/$(MCUX_CORE)/drivers/smc + +SRC_S += $(MCUX_DEVICES)/K32L/$(MCU_VARIANT)/gcc/startup_$(MCU_VARIANT).S diff --git a/hw/bsp/kinetis_k32l2/family.mk b/hw/bsp/kinetis_k32l2/family.mk deleted file mode 100644 index e18348d4d..000000000 --- a/hw/bsp/kinetis_k32l2/family.mk +++ /dev/null @@ -1,35 +0,0 @@ -UF2_FAMILY_ID = 0x7f83e793 -SDK_DIR = hw/mcu/nxp/mcux-sdk -MCU_DIR = $(SDK_DIR)/devices/$(MCU) - -include $(TOP)/$(BOARD_PATH)/board.mk -CPU_CORE ?= cortex-m0plus - -CFLAGS += \ - -DCFG_TUSB_MCU=OPT_MCU_KINETIS_K32L - -LDFLAGS_GCC += \ - -nostartfiles \ - -specs=nosys.specs -specs=nano.specs - -SRC_C += \ - src/portable/nxp/khci/dcd_khci.c \ - src/portable/nxp/khci/hcd_khci.c \ - $(MCU_DIR)/system_$(MCU).c \ - $(MCU_DIR)/drivers/fsl_clock.c \ - $(SDK_DIR)/drivers/gpio/fsl_gpio.c \ - $(SDK_DIR)/drivers/lpuart/fsl_lpuart.c - -INC += \ - $(TOP)/$(BOARD_PATH) \ - $(TOP)/lib/CMSIS_5/CMSIS/Core/Include \ - $(TOP)/$(MCU_DIR) \ - $(TOP)/$(MCU_DIR)/project_template \ - $(TOP)/$(MCU_DIR)/drivers \ - $(TOP)/$(SDK_DIR)/drivers/common \ - $(TOP)/$(SDK_DIR)/drivers/gpio \ - $(TOP)/$(SDK_DIR)/drivers/lpuart \ - $(TOP)/$(SDK_DIR)/drivers/port \ - $(TOP)/$(SDK_DIR)/drivers/smc \ - -SRC_S += $(MCU_DIR)/gcc/startup_$(MCU).S diff --git a/hw/bsp/rx/FreeRTOSConfig/FreeRTOSConfig.h b/hw/bsp/rx/FreeRTOSConfig/FreeRTOSConfig.h index edf0a8433..d9de30099 100644 --- a/hw/bsp/rx/FreeRTOSConfig/FreeRTOSConfig.h +++ b/hw/bsp/rx/FreeRTOSConfig/FreeRTOSConfig.h @@ -109,7 +109,7 @@ extern uint32_t SystemCoreClock; #define INCLUDE_vTaskDelayUntil 1 #define INCLUDE_vTaskDelay 1 #define INCLUDE_xTaskGetSchedulerState 0 -#define INCLUDE_xTaskGetCurrentTaskHandle 0 +#define INCLUDE_xTaskGetCurrentTaskHandle 1 #define INCLUDE_uxTaskGetStackHighWaterMark 0 #define INCLUDE_xTaskGetIdleTaskHandle 0 #define INCLUDE_xTimerGetTimerDaemonTaskHandle 0 diff --git a/hw/bsp/rx/boards/gr_citrus/board.cmake b/hw/bsp/rx/boards/gr_citrus/board.cmake new file mode 100644 index 000000000..d6200e386 --- /dev/null +++ b/hw/bsp/rx/boards/gr_citrus/board.cmake @@ -0,0 +1,19 @@ +set(MCU_VARIANT rx63n) +set(MCU_FAMILY RX63X) + +set(CMAKE_SYSTEM_CPU rx610 CACHE INTERNAL "System Processor") + +set(LD_FILE_GNU ${CMAKE_CURRENT_LIST_DIR}/r5f5631fd.ld) + +set(JLINK_DEVICE R5F5631F) +set(JLINK_IF JTAG) + +set(BOARD_SOURCES + ${CMAKE_CURRENT_LIST_DIR}/gr_citrus.c + ) + +function(update_board TARGET) + target_include_directories(${TARGET} PUBLIC + ${CMAKE_CURRENT_FUNCTION_LIST_DIR} + ) +endfunction() diff --git a/hw/bsp/rx/boards/gr_citrus/board.h b/hw/bsp/rx/boards/gr_citrus/board.h index 617d309c3..cc0139e18 100644 --- a/hw/bsp/rx/boards/gr_citrus/board.h +++ b/hw/bsp/rx/boards/gr_citrus/board.h @@ -32,10 +32,31 @@ #ifndef BOARD_H_ #define BOARD_H_ +#include "iodefine.h" + #ifdef __cplusplus extern "C" { #endif +// LED: PA0, active high +#define BOARD_LED_WRITE(state) (PORTA.PODR.BIT.B0 = (state) ? 1 : 0) + +// No user button +#define BOARD_BUTTON_READ() 0 + +// UART: SCI0 +#define BOARD_UART_SCI SCI0 +#define BOARD_SCI_TXI_HANDLER INT_Excep_SCI0_TXI0 +#define BOARD_SCI_TEI_HANDLER INT_Excep_SCI0_TEI0 +#define BOARD_SCI_RXI_HANDLER INT_Excep_SCI0_RXI0 + +// USB interrupt handler +#define BOARD_USB_IRQ_HANDLER INT_Excep_USB0_USBI0 + +// Clocks +#define BOARD_PCLK 48000000 +#define BOARD_CPUCLK 96000000 + #ifdef __cplusplus } #endif diff --git a/hw/bsp/rx/boards/gr_citrus/gr_citrus.c b/hw/bsp/rx/boards/gr_citrus/gr_citrus.c index e5b24bf69..af8c108d0 100644 --- a/hw/bsp/rx/boards/gr_citrus/gr_citrus.c +++ b/hw/bsp/rx/boards/gr_citrus/gr_citrus.c @@ -52,141 +52,63 @@ * regarding downloading. */ -#include "bsp/board_api.h" #include "iodefine.h" -#include "interrupt_handlers.h" - -#define IRQ_PRIORITY_CMT0 5 -#define IRQ_PRIORITY_USBI0 6 -#define IRQ_PRIORITY_SCI0 5 +#include "board.h" #define SYSTEM_PRCR_PRC1 (1<<1) #define SYSTEM_PRCR_PRKEY (0xA5u<<8) - -#define CMT_PCLK 48000000 -#define CMT_CMCR_CKS_DIV_128 2 -#define CMT_CMCR_CMIE (1<<6) #define MPC_PFS_ISEL (1<<6) +#define IRQ_PRIORITY_SCI0 5 #define SCI_PCLK 48000000 -#define SCI_SSR_FER (1<<4) -#define SCI_SSR_ORER (1<<5) - -#define SCI_SCR_TEIE (1u<<2) -#define SCI_SCR_RE (1u<<4) -#define SCI_SCR_TE (1u<<5) -#define SCI_SCR_RIE (1u<<6) -#define SCI_SCR_TIE (1u<<7) - -//--------------------------------------------------------------------+ -// SCI0 handling -//--------------------------------------------------------------------+ -typedef struct { - uint8_t *buf; - uint32_t cnt; -} sci_buf_t; -static volatile sci_buf_t sci0_buf[2]; - -void INT_Excep_SCI0_TXI0(void) -{ - uint8_t *buf = sci0_buf[0].buf; - uint32_t cnt = sci0_buf[0].cnt; - - if (!buf || !cnt) { - SCI0.SCR.BYTE &= ~(SCI_SCR_TEIE | SCI_SCR_TE | SCI_SCR_TIE); - return; - } - SCI0.TDR = *buf; - if (--cnt) { - ++buf; - } else { - buf = NULL; - SCI0.SCR.BIT.TIE = 0; - SCI0.SCR.BIT.TEIE = 1; - } - sci0_buf[0].buf = buf; - sci0_buf[0].cnt = cnt; -} - -void INT_Excep_SCI0_TEI0(void) -{ - SCI0.SCR.BYTE &= ~(SCI_SCR_TEIE | SCI_SCR_TE | SCI_SCR_TIE); -} - -void INT_Excep_SCI0_RXI0(void) -{ - uint8_t *buf = sci0_buf[1].buf; - uint32_t cnt = sci0_buf[1].cnt; - - if (!buf || !cnt || - (SCI0.SSR.BYTE & (SCI_SSR_FER | SCI_SSR_ORER))) { - sci0_buf[1].buf = NULL; - SCI0.SSR.BYTE = 0; - SCI0.SCR.BYTE &= ~(SCI_SCR_RE | SCI_SCR_RIE); - return; - } - *buf = SCI0.RDR; - if (--cnt) { - ++buf; - } else { - buf = NULL; - SCI0.SCR.BYTE &= ~(SCI_SCR_RE | SCI_SCR_RIE); - } - sci0_buf[1].buf = buf; - sci0_buf[1].cnt = cnt; -} -//--------------------------------------------------------------------+ -// Forward USB interrupt events to TinyUSB IRQ Handler -//--------------------------------------------------------------------+ -void INT_Excep_USB0_USBI0(void) +void HardwareSetup(void) { - tud_int_handler(0); + SYSTEM.PRCR.WORD = 0xA503u; + SYSTEM.SOSCCR.BYTE = 0x01u; + SYSTEM.MOSCWTCR.BYTE = 0x0Du; + SYSTEM.PLLWTCR.BYTE = 0x0Eu; + SYSTEM.PLLCR.WORD = 0x0F00u; + SYSTEM.MOSCCR.BYTE = 0x00u; + SYSTEM.PLLCR2.BYTE = 0x00u; + for (unsigned i = 0; i < 2075u; ++i) __asm("nop"); + SYSTEM.SCKCR.LONG = 0x21021211u; + SYSTEM.SCKCR2.WORD = 0x0033u; + SYSTEM.SCKCR3.WORD = 0x0400u; + SYSTEM.SYSCR0.WORD = 0x5A01; + SYSTEM.MSTPCRB.BIT.MSTPB15 = 0; + SYSTEM.PRCR.WORD = 0xA500u; } -void board_init(void) +void board_pin_init(void) { -#if CFG_TUSB_OS == OPT_OS_NONE - /* Enable CMT0 */ - SYSTEM.PRCR.WORD = SYSTEM_PRCR_PRKEY | SYSTEM_PRCR_PRC1; - MSTP(CMT0) = 0; - SYSTEM.PRCR.WORD = SYSTEM_PRCR_PRKEY; - /* Setup 1ms tick timer */ - CMT0.CMCNT = 0; - CMT0.CMCOR = CMT_PCLK / 1000 / 128; - CMT0.CMCR.WORD = CMT_CMCR_CMIE | CMT_CMCR_CKS_DIV_128; - IR(CMT0, CMI0) = 0; - IPR(CMT0, CMI0) = IRQ_PRIORITY_CMT0; - IEN(CMT0, CMI0) = 1; - CMT.CMSTR0.BIT.STR0 = 1; -#endif - /* Unlock MPC registers */ MPC.PWPR.BIT.B0WI = 0; MPC.PWPR.BIT.PFSWE = 1; + /* LED PA0 */ PORTA.PMR.BIT.B0 = 0U; PORTA.PODR.BIT.B0 = 0U; PORTA.PDR.BIT.B0 = 1U; + /* UART TXD0 => P20, RXD0 => P21 */ PORT2.PMR.BIT.B0 = 1U; PORT2.PCR.BIT.B0 = 1U; MPC.P20PFS.BYTE = 0b01010; PORT2.PMR.BIT.B1 = 1U; MPC.P21PFS.BYTE = 0b01010; + /* USB VBUS -> P16 DPUPE -> P14 */ PORT1.PMR.BIT.B4 = 1U; PORT1.PMR.BIT.B6 = 1U; MPC.P14PFS.BYTE = 0b10001; MPC.P16PFS.BYTE = MPC_PFS_ISEL | 0b10001; MPC.PFUSB0.BIT.PUPHZS = 1; + /* Lock MPC registers */ MPC.PWPR.BIT.PFSWE = 0; MPC.PWPR.BIT.B0WI = 1; - IR(USB0, USBI0) = 0; - IPR(USB0, USBI0) = IRQ_PRIORITY_USBI0; - /* Enable SCI0 */ SYSTEM.PRCR.WORD = SYSTEM_PRCR_PRKEY | SYSTEM_PRCR_PRC1; MSTP(SCI0) = 0; @@ -201,81 +123,4 @@ void board_init(void) IEN(SCI0, RXI0) = 1; IEN(SCI0, TXI0) = 1; IEN(SCI0, TEI0) = 1; - - /* Enable USB0 */ - unsigned short oldPRCR = SYSTEM.PRCR.WORD; - SYSTEM.PRCR.WORD = SYSTEM_PRCR_PRKEY | SYSTEM_PRCR_PRC1; - MSTP(USB0) = 0; - SYSTEM.PRCR.WORD = SYSTEM_PRCR_PRKEY | oldPRCR; -} - -//--------------------------------------------------------------------+ -// Board porting API -//--------------------------------------------------------------------+ - -void board_led_write(bool state) -{ - PORTA.PODR.BIT.B0 = state ? 1 : 0; -} - -uint32_t board_button_read(void) -{ - return 0; -} - -int board_uart_read(uint8_t* buf, int len) -{ - sci0_buf[1].buf = buf; - sci0_buf[1].cnt = len; - SCI0.SCR.BYTE |= SCI_SCR_RE | SCI_SCR_RIE; - while (SCI0.SCR.BIT.RE) ; - return len - sci0_buf[1].cnt; -} - -int board_uart_write(void const *buf, int len) -{ - sci0_buf[0].buf = (uint8_t*)(uintptr_t) buf; - sci0_buf[0].cnt = len; - SCI0.SCR.BYTE |= SCI_SCR_TE | SCI_SCR_TIE; - while (SCI0.SCR.BIT.TE) ; - return len; -} - -#if CFG_TUSB_OS == OPT_OS_NONE -volatile uint32_t system_ticks = 0; -void INT_Excep_CMT0_CMI0(void) -{ - ++system_ticks; -} - -uint32_t tusb_time_millis_api(void) -{ - return system_ticks; -} -#else -uint32_t SystemCoreClock = 96000000; -#endif - -int close(int fd) -{ - (void)fd; - return -1; -} -int fstat(int fd, void *pstat) -{ - (void)fd; - (void)pstat; - return 0; -} -off_t lseek(int fd, off_t pos, int whence) -{ - (void)fd; - (void)pos; - (void)whence; - return 0; -} -int isatty(int fd) -{ - (void)fd; - return 1; } diff --git a/hw/bsp/rx/boards/gr_citrus/hwinit.c b/hw/bsp/rx/boards/gr_citrus/hwinit.c deleted file mode 100644 index 8245d7744..000000000 --- a/hw/bsp/rx/boards/gr_citrus/hwinit.c +++ /dev/null @@ -1,31 +0,0 @@ -/************************************************************************/ -/* File Version: V1.00 */ -/* Date Generated: 08/07/2013 */ -/************************************************************************/ - -#include "iodefine.h" -#ifdef __cplusplus -extern "C" { -#endif -extern void HardwareSetup(void); -#ifdef __cplusplus -} -#endif - -void HardwareSetup(void) -{ - SYSTEM.PRCR.WORD = 0xA503u; - SYSTEM.SOSCCR.BYTE = 0x01u; - SYSTEM.MOSCWTCR.BYTE = 0x0Du; - SYSTEM.PLLWTCR.BYTE = 0x0Eu; - SYSTEM.PLLCR.WORD = 0x0F00u; - SYSTEM.MOSCCR.BYTE = 0x00u; - SYSTEM.PLLCR2.BYTE = 0x00u; - for (unsigned i = 0; i < 2075u; ++i) __asm("nop"); - SYSTEM.SCKCR.LONG = 0x21021211u; - SYSTEM.SCKCR2.WORD = 0x0033u; - SYSTEM.SCKCR3.WORD = 0x0400u; - SYSTEM.SYSCR0.WORD = 0x5A01; - SYSTEM.MSTPCRB.BIT.MSTPB15 = 0; - SYSTEM.PRCR.WORD = 0xA500u; -} diff --git a/hw/bsp/rx/boards/rx65n_target/board.cmake b/hw/bsp/rx/boards/rx65n_target/board.cmake new file mode 100644 index 000000000..c8b9286bc --- /dev/null +++ b/hw/bsp/rx/boards/rx65n_target/board.cmake @@ -0,0 +1,22 @@ +set(MCU_VARIANT rx65n) +set(MCU_FAMILY RX65X) + +set(CMAKE_SYSTEM_CPU rx64m CACHE INTERNAL "System Processor") + +set(LD_FILE_GNU ${CMAKE_CURRENT_LIST_DIR}/r5f565ne.ld) + +set(JLINK_DEVICE R5F565NE) +set(JLINK_IF JTAG) + +set(RFP_DEVICE rx65x) +set(RFP_TOOL e2l) + +set(BOARD_SOURCES + ${CMAKE_CURRENT_LIST_DIR}/rx65n_target.c + ) + +function(update_board TARGET) + target_include_directories(${TARGET} PUBLIC + ${CMAKE_CURRENT_FUNCTION_LIST_DIR} + ) +endfunction() diff --git a/hw/bsp/rx/boards/rx65n_target/board.h b/hw/bsp/rx/boards/rx65n_target/board.h index 8c8e7b95f..4f1367fbd 100644 --- a/hw/bsp/rx/boards/rx65n_target/board.h +++ b/hw/bsp/rx/boards/rx65n_target/board.h @@ -32,10 +32,38 @@ #ifndef BOARD_H_ #define BOARD_H_ +#include "iodefine.h" + #ifdef __cplusplus extern "C" { #endif +// LED: PD6, active low (open-drain) +#define BOARD_LED_WRITE(state) (PORTD.PODR.BIT.B6 = (state) ? 0 : 1) + +// Button: PB1, active low +#define BOARD_BUTTON_READ() (PORTB.PIDR.BIT.B1 ? 0 : 1) + +// UART: SCI5 +#define BOARD_UART_SCI SCI5 +#define BOARD_SCI_TXI_HANDLER INT_Excep_SCI5_TXI5 +#define BOARD_SCI_TEI_HANDLER INT_Excep_ICU_GROUPBL0 // SCI5 TEI uses group interrupt +#define BOARD_SCI_RXI_HANDLER INT_Excep_SCI5_RXI5 + +// USB interrupt handler (software configurable vector) +#define IRQ_USB0_USBI0 62 +#define SLIBR_USBI0 SLIBR185 +#define IR_USB0_USBI0 IR_PERIB_INTB185 +#define IER_USB0_USBI0 IER_PERIB_INTB185 +#define IEN_USB0_USBI0 IEN_PERIB_INTB185 +#define IPR_USB0_USBI0 IPR_PERIB_INTB185 +#define INT_Excep_USB0_USBI0 INT_Excep_PERIB_INTB185 +#define BOARD_USB_IRQ_HANDLER INT_Excep_USB0_USBI0 + +// Clocks +#define BOARD_PCLK 60000000 +#define BOARD_CPUCLK 120000000 + #ifdef __cplusplus } #endif diff --git a/hw/bsp/rx/boards/rx65n_target/rx65n_target.c b/hw/bsp/rx/boards/rx65n_target/rx65n_target.c index d5c2de05a..318cd1b6d 100644 --- a/hw/bsp/rx/boards/rx65n_target/rx65n_target.c +++ b/hw/bsp/rx/boards/rx65n_target/rx65n_target.c @@ -50,37 +50,15 @@ * regarding downloading. */ -#include "bsp/board_api.h" #include "iodefine.h" -#include "interrupt_handlers.h" - -#define IRQ_PRIORITY_CMT0 5 -#define IRQ_PRIORITY_USBI0 6 -#define IRQ_PRIORITY_SCI5 5 +#include "board.h" #define SYSTEM_PRCR_PRC1 (1<<1) #define SYSTEM_PRCR_PRKEY (0xA5u<<8) - -#define CMT_PCLK 60000000 -#define CMT_CMCR_CKS_DIV_128 2 -#define CMT_CMCR_CMIE (1<<6) #define MPC_PFS_ISEL (1<<6) +#define IRQ_PRIORITY_SCI5 5 #define SCI_PCLK 60000000 -#define SCI_SSR_FER (1<<4) -#define SCI_SSR_ORER (1<<5) - -#define SCI_SCR_TEIE (1u<<2) -#define SCI_SCR_RE (1u<<4) -#define SCI_SCR_TE (1u<<5) -#define SCI_SCR_RIE (1u<<6) -#define SCI_SCR_TIE (1u<<7) -#define INT_Excep_SCI5_TEI5 INT_Excep_ICU_GROUPBL0 - -#define IRQ_USB0_USBI0 62 -#define SLIBR_USBI0 SLIBR185 -#define IPR_USB0_USBI0 IPR_PERIB_INTB185 -#define INT_Excep_USB0_USBI0 INT_Excep_PERIB_INTB185 void HardwareSetup(void) { @@ -113,118 +91,37 @@ void HardwareSetup(void) SYSTEM.PRCR.WORD = 0xA500u; } -//--------------------------------------------------------------------+ -// SCI handling -//--------------------------------------------------------------------+ -typedef struct { - uint8_t *buf; - uint32_t cnt; -} sci_buf_t; -static volatile sci_buf_t sci_buf[2]; - -void INT_Excep_SCI5_TXI5(void) -{ - uint8_t *buf = sci_buf[0].buf; - uint32_t cnt = sci_buf[0].cnt; - - if (!buf || !cnt) { - SCI5.SCR.BYTE &= ~(SCI_SCR_TEIE | SCI_SCR_TE | SCI_SCR_TIE); - return; - } - SCI5.TDR = *buf; - if (--cnt) { - ++buf; - } else { - buf = NULL; - SCI5.SCR.BIT.TIE = 0; - SCI5.SCR.BIT.TEIE = 1; - } - sci_buf[0].buf = buf; - sci_buf[0].cnt = cnt; -} - -void INT_Excep_SCI5_TEI5(void) -{ - SCI5.SCR.BYTE &= ~(SCI_SCR_TEIE | SCI_SCR_TE | SCI_SCR_TIE); -} - -void INT_Excep_SCI5_RXI5(void) +void board_pin_init(void) { - uint8_t *buf = sci_buf[1].buf; - uint32_t cnt = sci_buf[1].cnt; - - if (!buf || !cnt || - (SCI5.SSR.BYTE & (SCI_SSR_FER | SCI_SSR_ORER))) { - sci_buf[1].buf = NULL; - SCI5.SSR.BYTE = 0; - SCI5.SCR.BYTE &= ~(SCI_SCR_RE | SCI_SCR_RIE); - return; - } - *buf = SCI5.RDR; - if (--cnt) { - ++buf; - } else { - buf = NULL; - SCI5.SCR.BYTE &= ~(SCI_SCR_RE | SCI_SCR_RIE); - } - sci_buf[1].buf = buf; - sci_buf[1].cnt = cnt; -} - -//--------------------------------------------------------------------+ -// Forward USB interrupt events to TinyUSB IRQ Handler -//--------------------------------------------------------------------+ -void INT_Excep_USB0_USBI0(void) -{ -#if CFG_TUH_ENABLED - tuh_int_handler(0, true); -#endif -#if CFG_TUD_ENABLED - tud_int_handler(0); -#endif -} - -void board_init(void) -{ - /* setup software configurable interrupts */ + /* Setup software configurable interrupts for USB */ ICU.SLIBR_USBI0.BYTE = IRQ_USB0_USBI0; ICU.SLIPRCR.BYTE = 1; -#if CFG_TUSB_OS == OPT_OS_NONE - /* Enable CMT0 */ - SYSTEM.PRCR.WORD = SYSTEM_PRCR_PRKEY | SYSTEM_PRCR_PRC1; - MSTP(CMT0) = 0; - SYSTEM.PRCR.WORD = SYSTEM_PRCR_PRKEY; - /* Setup 1ms tick timer */ - CMT0.CMCNT = 0; - CMT0.CMCOR = CMT_PCLK / 1000 / 128; - CMT0.CMCR.WORD = CMT_CMCR_CMIE | CMT_CMCR_CKS_DIV_128; - IR(CMT0, CMI0) = 0; - IPR(CMT0, CMI0) = IRQ_PRIORITY_CMT0; - IEN(CMT0, CMI0) = 1; - CMT.CMSTR0.BIT.STR0 = 1; -#endif - /* Unlock MPC registers */ MPC.PWPR.BIT.B0WI = 0; MPC.PWPR.BIT.PFSWE = 1; - // SW PB1 + + /* Button PB1 */ PORTB.PMR.BIT.B1 = 0U; PORTB.PDR.BIT.B1 = 0U; - // LED PD6 + + /* LED PD6 (open-drain, active low) */ PORTD.PODR.BIT.B6 = 1U; PORTD.ODR1.BIT.B4 = 1U; PORTD.PMR.BIT.B6 = 0U; PORTD.PDR.BIT.B6 = 1U; + /* UART TXD5 => PA4, RXD5 => PA3 */ PORTA.PMR.BIT.B4 = 1U; PORTA.PCR.BIT.B4 = 1U; MPC.PA4PFS.BYTE = 0b01010; PORTA.PMR.BIT.B3 = 1U; - MPC.PA5PFS.BYTE = 0b01010; + MPC.PA3PFS.BYTE = 0b01010; + /* USB VBUS -> P16 */ PORT1.PMR.BIT.B6 = 1U; MPC.P16PFS.BYTE = MPC_PFS_ISEL | 0b10001; + /* Lock MPC registers */ MPC.PWPR.BIT.PFSWE = 0; MPC.PWPR.BIT.B0WI = 1; @@ -247,86 +144,4 @@ void board_init(void) IEN(SCI5, TXI5) = 1; IEN(ICU,GROUPBL0) = 1; EN(SCI5, TEI5) = 1; - - /* Enable USB0 */ - unsigned short oldPRCR = SYSTEM.PRCR.WORD; - SYSTEM.PRCR.WORD = SYSTEM_PRCR_PRKEY | SYSTEM_PRCR_PRC1; - MSTP(USB0) = 0; - SYSTEM.PRCR.WORD = SYSTEM_PRCR_PRKEY | oldPRCR; - - /* setup USBI0 interrupt. */ - IR(USB0, USBI0) = 0; - IPR(USB0, USBI0) = IRQ_PRIORITY_USBI0; -} - -//--------------------------------------------------------------------+ -// Board porting API -//--------------------------------------------------------------------+ - -void board_led_write(bool state) -{ - PORTD.PODR.BIT.B6 = state ? 0 : 1; -} - -uint32_t board_button_read(void) -{ - return PORTB.PIDR.BIT.B1 ? 0 : 1; -} - -int board_uart_read(uint8_t* buf, int len) -{ - sci_buf[1].buf = buf; - sci_buf[1].cnt = len; - SCI5.SCR.BYTE |= SCI_SCR_RE | SCI_SCR_RIE; - // TODO change to non blocking, return -1 immediately if no data - while (SCI5.SCR.BIT.RE) ; - return len - sci_buf[1].cnt; -} - -int board_uart_write(void const *buf, int len) -{ - sci_buf[0].buf = (uint8_t*)(uintptr_t) buf; - sci_buf[0].cnt = len; - SCI5.SCR.BYTE |= SCI_SCR_TE | SCI_SCR_TIE; - while (SCI5.SCR.BIT.TE) ; - return len; -} - -#if CFG_TUSB_OS == OPT_OS_NONE -volatile uint32_t system_ticks = 0; -void INT_Excep_CMT0_CMI0(void) -{ - ++system_ticks; -} - -uint32_t tusb_time_millis_api(void) -{ - return system_ticks; -} -#else -uint32_t SystemCoreClock = 120000000; -#endif - -int close(int fd) -{ - (void)fd; - return -1; -} -int fstat(int fd, void *pstat) -{ - (void)fd; - (void)pstat; - return 0; -} -off_t lseek(int fd, off_t pos, int whence) -{ - (void)fd; - (void)pos; - (void)whence; - return 0; -} -int isatty(int fd) -{ - (void)fd; - return 1; } diff --git a/hw/bsp/rx/family.c b/hw/bsp/rx/family.c new file mode 100644 index 000000000..5741b44ef --- /dev/null +++ b/hw/bsp/rx/family.c @@ -0,0 +1,234 @@ +/* + * The MIT License (MIT) + * + * Copyright (c) 2021, Koji Kitayama + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * This file is part of the TinyUSB stack. + */ + +#include "bsp/board_api.h" +#include "board.h" +#include "interrupt_handlers.h" + +#define SYSTEM_PRCR_PRC1 (1<<1) +#define SYSTEM_PRCR_PRKEY (0xA5u<<8) + +#define CMT_CMCR_CKS_DIV_128 2 +#define CMT_CMCR_CMIE (1<<6) + +#define IRQ_PRIORITY_CMT0 5 +#define IRQ_PRIORITY_USBI0 6 + +#define SCI_SSR_FER (1<<4) +#define SCI_SSR_ORER (1<<5) +#define SCI_SCR_TEIE (1u<<2) +#define SCI_SCR_RE (1u<<4) +#define SCI_SCR_TE (1u<<5) +#define SCI_SCR_RIE (1u<<6) +#define SCI_SCR_TIE (1u<<7) + +// Board-specific pin/peripheral init (implemented per board) +void board_pin_init(void); + +//--------------------------------------------------------------------+ +// SCI UART interrupt handlers +//--------------------------------------------------------------------+ +typedef struct { + uint8_t *buf; + uint32_t cnt; +} sci_buf_t; +static volatile sci_buf_t sci_buf[2]; + +void BOARD_SCI_TXI_HANDLER(void) +{ + uint8_t *buf = sci_buf[0].buf; + uint32_t cnt = sci_buf[0].cnt; + + if (!buf || !cnt) { + BOARD_UART_SCI.SCR.BYTE &= ~(SCI_SCR_TEIE | SCI_SCR_TE | SCI_SCR_TIE); + return; + } + BOARD_UART_SCI.TDR = *buf; + if (--cnt) { + ++buf; + } else { + buf = NULL; + BOARD_UART_SCI.SCR.BIT.TIE = 0; + BOARD_UART_SCI.SCR.BIT.TEIE = 1; + } + sci_buf[0].buf = buf; + sci_buf[0].cnt = cnt; +} + +void BOARD_SCI_TEI_HANDLER(void) +{ + BOARD_UART_SCI.SCR.BYTE &= ~(SCI_SCR_TEIE | SCI_SCR_TE | SCI_SCR_TIE); +} + +void BOARD_SCI_RXI_HANDLER(void) +{ + uint8_t *buf = sci_buf[1].buf; + uint32_t cnt = sci_buf[1].cnt; + + if (!buf || !cnt || + (BOARD_UART_SCI.SSR.BYTE & (SCI_SSR_FER | SCI_SSR_ORER))) { + sci_buf[1].buf = NULL; + BOARD_UART_SCI.SSR.BYTE = 0; + BOARD_UART_SCI.SCR.BYTE &= ~(SCI_SCR_RE | SCI_SCR_RIE); + return; + } + *buf = BOARD_UART_SCI.RDR; + if (--cnt) { + ++buf; + } else { + buf = NULL; + BOARD_UART_SCI.SCR.BYTE &= ~(SCI_SCR_RE | SCI_SCR_RIE); + } + sci_buf[1].buf = buf; + sci_buf[1].cnt = cnt; +} + +//--------------------------------------------------------------------+ +// Forward USB interrupt events to TinyUSB IRQ Handler +//--------------------------------------------------------------------+ +void BOARD_USB_IRQ_HANDLER(void) +{ +#if CFG_TUH_ENABLED + tuh_int_handler(0, true); +#endif +#if CFG_TUD_ENABLED + tud_int_handler(0); +#endif +} + +//--------------------------------------------------------------------+ +// Board init +//--------------------------------------------------------------------+ +void board_init(void) +{ +#if CFG_TUSB_OS == OPT_OS_NONE + /* Enable CMT0 */ + SYSTEM.PRCR.WORD = SYSTEM_PRCR_PRKEY | SYSTEM_PRCR_PRC1; + MSTP(CMT0) = 0; + SYSTEM.PRCR.WORD = SYSTEM_PRCR_PRKEY; + /* Setup 1ms tick timer */ + CMT0.CMCNT = 0; + CMT0.CMCOR = BOARD_PCLK / 1000 / 128; + CMT0.CMCR.WORD = CMT_CMCR_CMIE | CMT_CMCR_CKS_DIV_128; + IR(CMT0, CMI0) = 0; + IPR(CMT0, CMI0) = IRQ_PRIORITY_CMT0; + IEN(CMT0, CMI0) = 1; + CMT.CMSTR0.BIT.STR0 = 1; +#endif + + /* Board-specific: pin mux, SCI, USB pin config */ + board_pin_init(); + + /* Enable USB0 module */ + unsigned short oldPRCR = SYSTEM.PRCR.WORD; + SYSTEM.PRCR.WORD = SYSTEM_PRCR_PRKEY | SYSTEM_PRCR_PRC1; + MSTP(USB0) = 0; + SYSTEM.PRCR.WORD = SYSTEM_PRCR_PRKEY | oldPRCR; + + /* USB IRQ */ + IR(USB0, USBI0) = 0; + IPR(USB0, USBI0) = IRQ_PRIORITY_USBI0; +} + +//--------------------------------------------------------------------+ +// Board porting API +//--------------------------------------------------------------------+ + +void board_led_write(bool state) +{ + BOARD_LED_WRITE(state); +} + +uint32_t board_button_read(void) +{ + return BOARD_BUTTON_READ(); +} + +int board_uart_read(uint8_t* buf, int len) +{ + sci_buf[1].buf = buf; + sci_buf[1].cnt = len; + BOARD_UART_SCI.SCR.BYTE |= SCI_SCR_RE | SCI_SCR_RIE; + while (BOARD_UART_SCI.SCR.BIT.RE) ; + return len - sci_buf[1].cnt; +} + +int board_uart_write(void const *buf, int len) +{ + sci_buf[0].buf = (uint8_t*)(uintptr_t) buf; + sci_buf[0].cnt = len; + BOARD_UART_SCI.SCR.BYTE |= SCI_SCR_TE | SCI_SCR_TIE; + while (BOARD_UART_SCI.SCR.BIT.TE) ; + return len; +} + +//--------------------------------------------------------------------+ +// Tick timer +//--------------------------------------------------------------------+ +#if CFG_TUSB_OS == OPT_OS_NONE +volatile uint32_t system_ticks = 0; +void INT_Excep_CMT0_CMI0(void) +{ + ++system_ticks; +} + +uint32_t tusb_time_millis_api(void) +{ + return system_ticks; +} +#else +uint32_t SystemCoreClock = BOARD_CPUCLK; +#endif + +//--------------------------------------------------------------------+ +// Newlib syscall stubs +//--------------------------------------------------------------------+ +int close(int fd) +{ + (void)fd; + return -1; +} + +int fstat(int fd, void *pstat) +{ + (void)fd; + (void)pstat; + return 0; +} + +off_t lseek(int fd, off_t pos, int whence) +{ + (void)fd; + (void)pos; + (void)whence; + return 0; +} + +int isatty(int fd) +{ + (void)fd; + return 1; +} diff --git a/hw/bsp/rx/family.cmake b/hw/bsp/rx/family.cmake new file mode 100644 index 000000000..9bb0dcebb --- /dev/null +++ b/hw/bsp/rx/family.cmake @@ -0,0 +1,83 @@ +include_guard() + +set(MCU_DIR ${TOP}/hw/mcu/renesas/rx) + +# include board specific +include(${CMAKE_CURRENT_LIST_DIR}/boards/${BOARD}/board.cmake) + +# toolchain set up +set(CMAKE_TOOLCHAIN_FILE ${TOP}/examples/build_system/cmake/toolchain/rx_gcc.cmake) + +set(FAMILY_MCUS ${MCU_FAMILY} CACHE INTERNAL "") + +#------------------------------------ +# Startup & Linker script +#------------------------------------ +set(LD_FILE_Clang ${LD_FILE_GNU}) + +#------------------------------------ +# Board Target +#------------------------------------ +function(family_add_board BOARD_TARGET) + add_library(${BOARD_TARGET} STATIC + ${MCU_DIR}/${MCU_VARIANT}/vects.c + ) + target_include_directories(${BOARD_TARGET} PUBLIC + ${CMAKE_CURRENT_FUNCTION_LIST_DIR} + ${MCU_DIR}/${MCU_VARIANT} + ) + target_compile_definitions(${BOARD_TARGET} PUBLIC + SSIZE_MAX=__INT_MAX__ + ) + + update_board(${BOARD_TARGET}) +endfunction() + +#------------------------------------ +# Functions +#------------------------------------ +function(family_configure_example TARGET RTOS) + family_configure_common(${TARGET} ${RTOS}) + family_add_tinyusb(${TARGET} OPT_MCU_${MCU_FAMILY}) + + target_sources(${TARGET} PUBLIC + ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/family.c + ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/../board.c + ${TOP}/src/portable/renesas/rusb2/rusb2_common.c + ${TOP}/src/portable/renesas/rusb2/dcd_rusb2.c + ${TOP}/src/portable/renesas/rusb2/hcd_rusb2.c + ${MCU_DIR}/${MCU_VARIANT}/start.S + ${BOARD_SOURCES} + ) + target_include_directories(${TARGET} PUBLIC + ${CMAKE_CURRENT_FUNCTION_LIST_DIR} + ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/../../ + ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/boards/${BOARD} + ) + + if (CMAKE_C_COMPILER_ID STREQUAL "GNU") + target_compile_options(${TARGET} PUBLIC + -Wno-error=redundant-decls + ) + target_link_options(${TARGET} PUBLIC + "LINKER:--script=${LD_FILE_GNU}" + -nostartfiles + --specs=nosys.specs --specs=nano.specs + ) + endif () + + set_source_files_properties(${MCU_DIR}/${MCU_VARIANT}/start.S PROPERTIES + SKIP_LINTING ON + COMPILE_OPTIONS -w) + + # Suppress warnings for board-specific and family source files + set_source_files_properties( + ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/family.c + ${BOARD_SOURCES} + PROPERTIES COMPILE_FLAGS "-Wno-missing-prototypes") + + # Flashing + family_add_bin_hex(${TARGET}) + family_flash_jlink(${TARGET}) + family_flash_rfp(${TARGET}) +endfunction() diff --git a/hw/bsp/rx/family.mk b/hw/bsp/rx/family.mk index 4ecf80409..8b23b6c46 100644 --- a/hw/bsp/rx/family.mk +++ b/hw/bsp/rx/family.mk @@ -19,7 +19,9 @@ LDFLAGS_GCC += -specs=nosys.specs -specs=nano.specs SRC_C += \ src/portable/renesas/rusb2/dcd_rusb2.c \ src/portable/renesas/rusb2/hcd_rusb2.c \ - $(MCU_DIR)/vects.c + src/portable/renesas/rusb2/rusb2_common.c \ + $(MCU_DIR)/vects.c \ + $(FAMILY_PATH)/family.c INC += \ $(TOP)/$(BOARD_PATH) \ diff --git a/hw/bsp/stm32h7/boards/stm32h747disco/board.h b/hw/bsp/stm32h7/boards/stm32h747disco/board.h index 0a25c89dc..1793338f8 100644 --- a/hw/bsp/stm32h7/boards/stm32h747disco/board.h +++ b/hw/bsp/stm32h7/boards/stm32h747disco/board.h @@ -25,8 +25,8 @@ */ /* metadata: - name: STM32 H745 Discovery - url: https://www.st.com/en/evaluation-tools/stm32h745i-disco.html + name: STM32 H747 Discovery + url: https://www.st.com/en/evaluation-tools/stm32h747i-disco.html */ #ifndef BOARD_H_ |
