Skip to content

Commit

Permalink
Enhance chipidea (#2075)
Browse files Browse the repository at this point in the history
* update chipidea dcd, remove manual ep_count and use DCCPARAMS to get number of endpoint instead
* add dcd dcache for chipidea
* add cmake for lpc18
* add makefile build for mcx
* use fork of mcu sdk
* fix ci build with nrf
* flash rp2040 with openocd
  • Loading branch information
hathach committed May 23, 2023
1 parent c998e9c commit 1ef820e
Show file tree
Hide file tree
Showing 42 changed files with 1,914 additions and 121 deletions.
3 changes: 1 addition & 2 deletions .github/workflows/build_arm.yml
Expand Up @@ -142,8 +142,7 @@ jobs:

- name: Create flash.sh
run: |
#echo > flash.sh 'cmdout=$(openocd -f "interface/picoprobe.cfg" -f "target/rp2040.cfg" -c "program $1 reset exit")'
echo > flash.sh 'pyocd flash -t rp2040 $1'
echo > flash.sh 'cmdout=$(openocd -f "interface/cmsis-dap.cfg" -f "target/rp2040.cfg" -c "adapter speed 5000" -c "program $1 reset exit")'
echo >> flash.sh 'if (( $? )) ; then echo $cmdout ; fi'
chmod +x flash.sh
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/cmake_arm.yml
Expand Up @@ -32,6 +32,7 @@ jobs:
matrix:
family:
# Alphabetical order
- 'mcx'
- 'imxrt'
steps:
- name: Setup Python
Expand Down
7 changes: 5 additions & 2 deletions .idea/cmake.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 10 additions & 0 deletions .idea/runConfigurations/rt1010_jlink.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 0 additions & 10 deletions .idea/runConfigurations/rt1010_nxplink.xml

This file was deleted.

10 changes: 0 additions & 10 deletions .idea/runConfigurations/rt1060_nxplink.xml

This file was deleted.

16 changes: 14 additions & 2 deletions .pre-commit-config.yaml
Expand Up @@ -8,16 +8,28 @@ repos:
hooks:
- id: check-yaml
- id: trailing-whitespace
exclude: |
(?x)^(
hw/bsp/mcx/sdk/
)
- id: end-of-file-fixer
exclude: ^.idea/
exclude: |
(?x)^(
.idea/|
hw/bsp/mcx/sdk/
)
- id: forbid-submodules

- repo: https://github.com/codespell-project/codespell
rev: v2.2.4
hooks:
- id: codespell
args: [-w]
exclude: ^lib/
exclude: |
(?x)^(
lib/|
hw/bsp/mcx/sdk/
)
- repo: local
hooks:
Expand Down
2 changes: 1 addition & 1 deletion examples/device/CMakeLists.txt
Expand Up @@ -24,7 +24,7 @@ family_add_subdirectory(midi_test)
family_add_subdirectory(msc_dual_lun)

# FIXME temp skip net_lwip_webserver for imxrt for now
if (NOT ${FAMILY} STREQUAL "imxrt")
if (NOT ${FAMILY} STREQUAL "imxrt" AND NOT ${FAMILY} STREQUAL "mcx")
family_add_subdirectory(net_lwip_webserver)
endif()

Expand Down
2 changes: 1 addition & 1 deletion hw/bsp/board_mcu.h
Expand Up @@ -44,7 +44,7 @@
TU_CHECK_MCU(OPT_MCU_LPC40XX, OPT_MCU_LPC43XX)
#include "chip.h"

#elif TU_CHECK_MCU(OPT_MCU_LPC51UXX, OPT_MCU_LPC54XXX, OPT_MCU_LPC55XX)
#elif TU_CHECK_MCU(OPT_MCU_LPC51UXX, OPT_MCU_LPC54XXX, OPT_MCU_LPC55XX, OPT_MCU_MCXN9)
#include "fsl_device_registers.h"

#elif TU_CHECK_MCU(OPT_MCU_KINETIS_KL, OPT_MCU_KINETIS_K32)
Expand Down
7 changes: 7 additions & 0 deletions hw/bsp/family_support.cmake
Expand Up @@ -135,6 +135,13 @@ function(family_add_default_example_warnings TARGET)
endif()
endfunction()


# add_custom_command(TARGET ${TARGET} POST_BUILD
# COMMAND ${CMAKE_OBJCOPY} -O ihex $<TARGET_FILE:${TARGET}> ${TARGET}.hex
# COMMAND ${CMAKE_OBJCOPY} -O binary $<TARGET_FILE:${TARGET}> ${TARGET}.bin
# COMMENT "Creating ${TARGET}.hex and ${TARGET}.bin"
# )

# Add flash jlink target
function(family_flash_jlink TARGET)
if (NOT DEFINED JLINKEXE)
Expand Down
11 changes: 6 additions & 5 deletions hw/bsp/imxrt/family.cmake
@@ -1,8 +1,4 @@
if (TARGET _imxrt_family_inclusion_marker)
return()
endif ()

add_library(_imxrt_family_inclusion_marker INTERFACE)
include_guard()

if (NOT BOARD)
message(FATAL_ERROR "BOARD not specified")
Expand Down Expand Up @@ -87,6 +83,11 @@ function(family_configure_target TARGET)
# set output name to .elf
set_target_properties(${TARGET} PROPERTIES OUTPUT_NAME ${TARGET}.elf)

# run size after build
add_custom_command(TARGET ${TARGET} POST_BUILD
COMMAND ${TOOLCHAIN_SIZE} $<TARGET_FILE:${TARGET}>
)

# TOP is path to root directory
set(TOP "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/../../..")

Expand Down
11 changes: 11 additions & 0 deletions hw/bsp/lpc18/boards/lpcxpresso18s37/board.cmake
@@ -0,0 +1,11 @@
set(MCU_VARIANT LPC18S37)

set(JLINK_DEVICE LPC18S37)
set(PYOCD_TARGET LPC18S37)
set(NXPLINK_DEVICE LPC18S37:LPCXPRESSO18S37)

set(LD_FILE_gcc ${CMAKE_CURRENT_LIST_DIR}/lpc1837.ld)

function(update_board TARGET)
# nothing to do
endfunction()
11 changes: 11 additions & 0 deletions hw/bsp/lpc18/boards/mcb1800/board.cmake
@@ -0,0 +1,11 @@
set(MCU_VARIANT LPC1857)

set(JLINK_DEVICE LPC1857)
set(PYOCD_TARGET LPC1857)
set(NXPLINK_DEVICE LPC1857:MCB1857)

set(LD_FILE_gcc ${CMAKE_CURRENT_LIST_DIR}/lpc1857.ld)

function(update_board TARGET)
# nothing to do
endfunction()
155 changes: 155 additions & 0 deletions hw/bsp/lpc18/family.cmake
@@ -0,0 +1,155 @@
include_guard()

if (NOT BOARD)
message(FATAL_ERROR "BOARD not specified")
endif ()

# TOP is path to root directory
set(TOP "${CMAKE_CURRENT_LIST_DIR}/../../..")
set(SDK_DIR ${TOP}/hw/mcu/nxp/lpcopen/lpc18xx/lpc_chip_18xx)

# toolchain set up
set(CMAKE_SYSTEM_PROCESSOR cortex-m3 CACHE INTERNAL "System Processor")
set(CMAKE_TOOLCHAIN_FILE ${TOP}/tools/cmake/toolchain/arm_${TOOLCHAIN}.cmake)

set(FAMILY_MCUS LPC18XX CACHE INTERNAL "")

# include board specific
include(${CMAKE_CURRENT_LIST_DIR}/boards/${BOARD}/board.cmake)


#------------------------------------
# BOARD_TARGET
#------------------------------------
# only need to be built ONCE for all examples
set(BOARD_TARGET board_${BOARD})
if (NOT TARGET ${BOARD_TARGET})
add_library(${BOARD_TARGET} STATIC
${SDK_DIR}/../gcc/cr_startup_lpc18xx.c
${SDK_DIR}/src/chip_18xx_43xx.c
${SDK_DIR}/src/clock_18xx_43xx.c
${SDK_DIR}/src/gpio_18xx_43xx.c
${SDK_DIR}/src/sysinit_18xx_43xx.c
${SDK_DIR}/src/uart_18xx_43xx.c
)
target_compile_options(${BOARD_TARGET} PUBLIC
-nostdlib
)
target_compile_definitions(${BOARD_TARGET} PUBLIC
__USE_LPCOPEN
CORE_M3
)
target_include_directories(${BOARD_TARGET} PUBLIC
${SDK_DIR}/inc
${SDK_DIR}/inc/config_18xx
)
update_board(${BOARD_TARGET})

if (NOT DEFINED LD_FILE_${TOOLCHAIN})
MESSAGE(FATAL_ERROR "LD_FILE_${TOOLCHAIN} not defined")
endif ()

if (TOOLCHAIN STREQUAL "gcc")
target_link_options(${BOARD_TARGET} PUBLIC
"LINKER:--script=${LD_FILE_gcc}"
"LINKER:-Map=$<IF:$<BOOL:$<TARGET_PROPERTY:OUTPUT_NAME>>,$<TARGET_PROPERTY:OUTPUT_NAME>,$<TARGET_PROPERTY:NAME>>${CMAKE_EXECUTABLE_SUFFIX}.map"
# nanolib
--specs=nosys.specs
--specs=nano.specs
)
else ()
# TODO support IAR
endif ()
endif () # BOARD_TARGET

#------------------------------------
# Functions
#------------------------------------
function(family_configure_target TARGET)
# set output name to .elf
set_target_properties(${TARGET} PROPERTIES OUTPUT_NAME ${TARGET}.elf)

# run size after build
add_custom_command(TARGET ${TARGET} POST_BUILD
COMMAND ${TOOLCHAIN_SIZE} $<TARGET_FILE:${TARGET}>
)

#---------- Port Specific ----------
# These files are built for each example since it depends on example's tusb_config.h
target_sources(${TARGET} PUBLIC
# TinyUSB Port
${TOP}/src/portable/chipidea/ci_hs/dcd_ci_hs.c
${TOP}/src/portable/chipidea/ci_hs/hcd_ci_hs.c
${TOP}/src/portable/ehci/ehci.c
# BSP
${CMAKE_CURRENT_FUNCTION_LIST_DIR}/family.c
${CMAKE_CURRENT_FUNCTION_LIST_DIR}/../board.c
)
target_include_directories(${TARGET} PUBLIC
# family, hw, board
${CMAKE_CURRENT_FUNCTION_LIST_DIR}
${CMAKE_CURRENT_FUNCTION_LIST_DIR}/../../
${CMAKE_CURRENT_FUNCTION_LIST_DIR}/boards/${BOARD}
)

#---------- TinyUSB ----------
# tinyusb target is built for each example since it depends on example's tusb_config.h
set(TINYUSB_TARGET_PREFIX ${TARGET}-)
add_library(${TARGET}-tinyusb_config INTERFACE)

target_include_directories(${TARGET}-tinyusb_config INTERFACE
${CMAKE_CURRENT_SOURCE_DIR}/src
)
target_compile_definitions(${TARGET}-tinyusb_config INTERFACE
CFG_TUSB_MCU=OPT_MCU_LPC18XX
)

# tinyusb's CMakeList.txt
add_subdirectory(${TOP}/src ${CMAKE_CURRENT_BINARY_DIR}/tinyusb)

# Link dependencies
target_link_libraries(${TARGET} PUBLIC ${BOARD_TARGET} ${TARGET}-tinyusb)

# group target (not yet supported by clion)
set_target_properties(${TARGET}-tinyusb ${TARGET}-tinyusb_config
PROPERTIES FOLDER ${TARGET}_sub
)

#---------- Flash ----------
family_flash_jlink(${TARGET})
endfunction()


function(family_add_freertos TARGET)
# freertos_config
add_subdirectory(${CMAKE_CURRENT_FUNCTION_LIST_DIR}/FreeRTOSConfig ${CMAKE_CURRENT_BINARY_DIR}/freertos_config)

## freertos
if (NOT TARGET freertos_kernel)
add_subdirectory(${CMAKE_CURRENT_FUNCTION_LIST_DIR}/../../../lib/FreeRTOS-Kernel ${CMAKE_CURRENT_BINARY_DIR}/freertos_kernel)
endif ()

# Add FreeRTOS option to tinyusb_config
target_compile_definitions(${TARGET}-tinyusb_config INTERFACE
CFG_TUSB_OS=OPT_OS_FREERTOS
)
# link tinyusb with freeRTOS kernel
target_link_libraries(${TARGET}-tinyusb PUBLIC
freertos_kernel
)
target_link_libraries(${TARGET} PUBLIC
freertos_kernel
)
endfunction()

function(family_configure_device_example TARGET)
family_configure_target(${TARGET})
endfunction()

function(family_configure_host_example TARGET)
family_configure_target(${TARGET})
endfunction()

function(family_configure_dual_usb_example TARGET)
family_configure_target(${TARGET})
endfunction()
6 changes: 1 addition & 5 deletions hw/bsp/lpc55/family.cmake
@@ -1,8 +1,4 @@
if (TARGET _lpc55_family_inclusion_marker)
return()
endif ()

add_library(_lpc55_family_inclusion_marker INTERFACE)
include_guard()

if (NOT BOARD)
message(FATAL_ERROR "BOARD not specified")
Expand Down

0 comments on commit 1ef820e

Please sign in to comment.