Skip to content

Commit b531f43

Browse files
committed
add ci build for at32: f402_405, f403a_407, f423
1 parent 3682b6c commit b531f43

File tree

18 files changed

+193
-25
lines changed

18 files changed

+193
-25
lines changed

.github/workflows/ci_set_matrix.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
# family: [supported toolchain]
1717
family_list = {
18+
"at32f403a_407 at32f423": ["arm-gcc"],
1819
"broadcom_32bit": ["arm-gcc"],
1920
"broadcom_64bit": ["aarch64-gcc"],
2021
"ch32v10x ch32v20x ch32v307 fomu gd32vf103": ["riscv-gcc"],
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
set(MCU_VARIANT AT32F405RCT7)
2+
set(JLINK_DEVICE ${MCU_VARIANT})
3+
4+
function(update_board TARGET)
5+
target_compile_definitions(${TARGET} PUBLIC ${MCU_VARIANT})
6+
endfunction()

hw/bsp/at32f402_405/boards/AT_START_F402_405/board.mk

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
JLINK_DEVICE = AT32F405RCT7
12
LD_FILE = $(BOARD_PATH)/AT32F405xC_FLASH.ld
23

34
CFLAGS += \

hw/bsp/at32f402_405/family.c

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -280,11 +280,15 @@ size_t board_get_unique_id(uint8_t id[], size_t max_len)
280280
}
281281
#endif
282282

283-
void HardFault_Handler(void)
284-
{
283+
void HardFault_Handler(void) {
285284
__asm("BKPT #0\n");
286285
}
287286

287+
// Required by __libc_init_array in startup code if we are compiling using
288+
// -nostdlib/-nostartfiles.
289+
void _init(void) {
290+
}
291+
288292
#ifdef USE_FULL_ASSERT
289293
void assert_failed(const char *file, uint32_t line)
290294
{

hw/bsp/at32f402_405/family.cmake

Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
include_guard()
2+
3+
set(AT_FAMILY at32f402_405)
4+
set(AT_SDK_LIB ${TOP}/hw/mcu/artery/${AT_FAMILY}/libraries)
5+
6+
string(TOUPPER ${AT_FAMILY} AT_FAMILY_UPPER)
7+
8+
# include board specific
9+
include(${CMAKE_CURRENT_LIST_DIR}/boards/${BOARD}/board.cmake)
10+
11+
# toolchain set up
12+
set(CMAKE_SYSTEM_CPU cortex-m4 CACHE INTERNAL "System Processor")
13+
set(CMAKE_TOOLCHAIN_FILE ${TOP}/examples/build_system/cmake/toolchain/arm_${TOOLCHAIN}.cmake)
14+
15+
set(FAMILY_MCUS ${AT_FAMILY_UPPER} CACHE INTERNAL "")
16+
17+
# extract variant linker name
18+
string(LENGTH ${MCU_VARIANT} MCU_VARIANT_LEN)
19+
math(EXPR MCU_FLASH_CODE_INDEX "${MCU_VARIANT_LEN} - 3")
20+
math(EXPR MCU_VARIANT_PREFIX_LEN "${MCU_FLASH_CODE_INDEX} - 1")
21+
string(SUBSTRING ${MCU_VARIANT} ${MCU_FLASH_CODE_INDEX} 1 MCU_FLASH_CODE)
22+
string(SUBSTRING ${MCU_VARIANT} 0 ${MCU_VARIANT_PREFIX_LEN} MCU_VARIANT_PREFIX)
23+
set(MCU_LINKER_NAME ${MCU_VARIANT_PREFIX}x${MCU_FLASH_CODE})
24+
25+
#------------------------------------
26+
# BOARD_TARGET
27+
#------------------------------------
28+
# only need to be built ONCE for all examples
29+
function(add_board_target BOARD_TARGET)
30+
if (TARGET ${BOARD_TARGET})
31+
return()
32+
endif ()
33+
34+
# Startup & Linker script
35+
set(STARTUP_FILE_GNU ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/startup_${AT_FAMILY}.s)
36+
set(STARTUP_FILE_Clang ${STARTUP_FILE_GNU})
37+
set(STARTUP_FILE_IAR ${AT_SDK_LIB}/cmsis/cm4/device_support/startup/iar/startup_${AT_FAMILY}.s)
38+
39+
if (NOT DEFINED LD_FILE_GNU)
40+
set(LD_FILE_GNU ${AT_SDK_LIB}/cmsis/cm4/device_support/startup/gcc/linker/${MCU_LINKER_NAME}_FLASH.ld)
41+
endif ()
42+
set(LD_FILE_Clang ${LD_FILE_GNU})
43+
set(LD_FILE_IAR ${AT_SDK_LIB}/cmsis/cm4/device_support/startup/iar/linker/${MCU_LINKER_NAME}.icf)
44+
45+
add_library(${BOARD_TARGET} STATIC
46+
${AT_SDK_LIB}/cmsis/cm4/device_support/system_${AT_FAMILY}.c
47+
${AT_SDK_LIB}/drivers/src/${AT_FAMILY}_gpio.c
48+
${AT_SDK_LIB}/drivers/src/${AT_FAMILY}_misc.c
49+
${AT_SDK_LIB}/drivers/src/${AT_FAMILY}_usart.c
50+
${AT_SDK_LIB}/drivers/src/${AT_FAMILY}_acc.c
51+
${AT_SDK_LIB}/drivers/src/${AT_FAMILY}_crm.c
52+
${STARTUP_FILE_${CMAKE_C_COMPILER_ID}}
53+
)
54+
target_include_directories(${BOARD_TARGET} PUBLIC
55+
${CMAKE_CURRENT_FUNCTION_LIST_DIR}
56+
${AT_SDK_LIB}/cmsis/cm4/core_support
57+
${AT_SDK_LIB}/cmsis/cm4/device_support
58+
${AT_SDK_LIB}/drivers/inc
59+
)
60+
target_compile_definitions(${BOARD_TARGET} PUBLIC
61+
BOARD_TUD_RHPORT=0
62+
BOARD_TUD_MAX_SPEED=OPT_MODE_HIGH_SPEED
63+
)
64+
65+
update_board(${BOARD_TARGET})
66+
67+
if (CMAKE_C_COMPILER_ID STREQUAL "GNU")
68+
target_link_options(${BOARD_TARGET} PUBLIC
69+
"LINKER:--script=${LD_FILE_GNU}"
70+
-nostartfiles
71+
--specs=nosys.specs --specs=nano.specs
72+
)
73+
elseif (CMAKE_C_COMPILER_ID STREQUAL "Clang")
74+
target_link_options(${BOARD_TARGET} PUBLIC
75+
"LINKER:--script=${LD_FILE_Clang}"
76+
)
77+
elseif (CMAKE_C_COMPILER_ID STREQUAL "IAR")
78+
target_link_options(${BOARD_TARGET} PUBLIC
79+
"LINKER:--config=${LD_FILE_IAR}"
80+
)
81+
endif ()
82+
endfunction()
83+
84+
85+
#------------------------------------
86+
# Functions
87+
#------------------------------------
88+
function(family_configure_example TARGET RTOS)
89+
family_configure_common(${TARGET} ${RTOS})
90+
91+
# Board target
92+
add_board_target(board_${BOARD})
93+
94+
#---------- Port Specific ----------
95+
# These files are built for each example since it depends on example's tusb_config.h
96+
target_sources(${TARGET} PUBLIC
97+
# BSP
98+
${CMAKE_CURRENT_FUNCTION_LIST_DIR}/family.c
99+
${CMAKE_CURRENT_FUNCTION_LIST_DIR}/../board.c
100+
${CMAKE_CURRENT_FUNCTION_LIST_DIR}/${AT_FAMILY}_clock.c
101+
${CMAKE_CURRENT_FUNCTION_LIST_DIR}/${AT_FAMILY}_int.c
102+
)
103+
target_include_directories(${TARGET} PUBLIC
104+
# family, hw, board
105+
${CMAKE_CURRENT_FUNCTION_LIST_DIR}
106+
${CMAKE_CURRENT_FUNCTION_LIST_DIR}/../../
107+
${CMAKE_CURRENT_FUNCTION_LIST_DIR}/boards/${BOARD}
108+
)
109+
110+
# Add TinyUSB target and port source
111+
family_add_tinyusb(${TARGET} OPT_MCU_${AT_FAMILY_UPPER})
112+
target_sources(${TARGET} PUBLIC
113+
${TOP}/src/portable/synopsys/dwc2/dcd_dwc2.c
114+
${TOP}/src/portable/synopsys/dwc2/hcd_dwc2.c
115+
${TOP}/src/portable/synopsys/dwc2/dwc2_common.c
116+
)
117+
target_link_libraries(${TARGET} PUBLIC board_${BOARD})
118+
119+
# Flashing
120+
family_add_bin_hex(${TARGET})
121+
family_flash_jlink(${TARGET})
122+
endfunction()

hw/bsp/at32f402_405/family.mk

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ CFLAGS += \
1616
-DBOARD_TUD_MAX_SPEED=OPT_MODE_HIGH_SPEED
1717

1818
LDFLAGS_GCC += \
19-
-flto --specs=nosys.specs
19+
-flto --specs=nosys.specs -nostdlib -nostartfiles
2020

2121
SRC_C += \
2222
src/portable/synopsys/dwc2/dcd_dwc2.c \
Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
set(MCU_VARIANT AT32F403ACGU7)
22
set(JLINK_DEVICE ${MCU_VARIANT})
33

4-
set(LD_FILE_GNU ${CMAKE_CURRENT_LIST_DIR}/AT32F403AxG_FLASH.ld)
5-
set(LD_FILE_IAR ${AT_SDK_LIB}/cmsis/cm4/device_support/startup/iar/linker/AT32F403AxG.icf)
6-
74
function(update_board TARGET)
85
target_compile_definitions(${TARGET} PUBLIC ${MCU_VARIANT})
96
endfunction()

hw/bsp/at32f403a_407/family.cmake

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,24 @@ include_guard()
33
set(AT_FAMILY at32f403a_407)
44
set(AT_SDK_LIB ${TOP}/hw/mcu/artery/${AT_FAMILY}/libraries)
55

6+
string(TOUPPER ${AT_FAMILY} AT_FAMILY_UPPER)
7+
68
# include board specific
79
include(${CMAKE_CURRENT_LIST_DIR}/boards/${BOARD}/board.cmake)
810

911
# toolchain set up
1012
set(CMAKE_SYSTEM_CPU cortex-m4 CACHE INTERNAL "System Processor")
1113
set(CMAKE_TOOLCHAIN_FILE ${TOP}/examples/build_system/cmake/toolchain/arm_${TOOLCHAIN}.cmake)
1214

13-
set(FAMILY_MCUS AT32F403A_407 CACHE INTERNAL "")
15+
set(FAMILY_MCUS ${AT_FAMILY_UPPER} CACHE INTERNAL "")
16+
17+
# extract variant linker name
18+
string(LENGTH ${MCU_VARIANT} MCU_VARIANT_LEN)
19+
math(EXPR MCU_FLASH_CODE_INDEX "${MCU_VARIANT_LEN} - 3")
20+
math(EXPR MCU_VARIANT_PREFIX_LEN "${MCU_FLASH_CODE_INDEX} - 1")
21+
string(SUBSTRING ${MCU_VARIANT} ${MCU_FLASH_CODE_INDEX} 1 MCU_FLASH_CODE)
22+
string(SUBSTRING ${MCU_VARIANT} 0 ${MCU_VARIANT_PREFIX_LEN} MCU_VARIANT_PREFIX)
23+
set(MCU_LINKER_NAME ${MCU_VARIANT_PREFIX}x${MCU_FLASH_CODE})
1424

1525
#------------------------------------
1626
# BOARD_TARGET
@@ -26,7 +36,11 @@ function(add_board_target BOARD_TARGET)
2636
set(STARTUP_FILE_Clang ${STARTUP_FILE_GNU})
2737
set(STARTUP_FILE_IAR ${AT_SDK_LIB}/cmsis/cm4/device_support/startup/iar/startup_${AT_FAMILY}.s)
2838

39+
if (NOT DEFINED LD_FILE_GNU)
40+
set(LD_FILE_GNU ${AT_SDK_LIB}/cmsis/cm4/device_support/startup/gcc/linker/${MCU_LINKER_NAME}_FLASH.ld)
41+
endif ()
2942
set(LD_FILE_Clang ${LD_FILE_GNU})
43+
set(LD_FILE_IAR ${AT_SDK_LIB}/cmsis/cm4/device_support/startup/iar/linker/${MCU_LINKER_NAME}.icf)
3044

3145
add_library(${BOARD_TARGET} STATIC
3246
${AT_SDK_LIB}/cmsis/cm4/device_support/system_${AT_FAMILY}.c
@@ -90,7 +104,7 @@ function(family_configure_example TARGET RTOS)
90104
)
91105

92106
# Add TinyUSB target and port source
93-
family_add_tinyusb(${TARGET} OPT_MCU_AT32F403A_407)
107+
family_add_tinyusb(${TARGET} OPT_MCU_${AT_FAMILY_UPPER})
94108
target_sources(${TARGET} PUBLIC
95109
${TOP}/src/portable/st/stm32_fsdev/dcd_stm32_fsdev.c
96110
)

hw/bsp/at32f413/family.mk

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ CFLAGS += \
1515
-DCFG_TUSB_MCU=OPT_MCU_AT32F413
1616

1717
LDFLAGS_GCC += \
18-
-flto --specs=nosys.specs
18+
-flto --specs=nosys.specs -nostdlib -nostartfiles
1919

2020
SRC_C += \
2121
src/portable/st/stm32_fsdev/dcd_stm32_fsdev.c \

hw/bsp/at32f415/family.c

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -271,11 +271,15 @@ size_t board_get_unique_id(uint8_t id[], size_t max_len)
271271
}
272272
#endif
273273

274-
void HardFault_Handler(void)
275-
{
274+
void HardFault_Handler(void) {
276275
__asm("BKPT #0\n");
277276
}
278277

278+
// Required by __libc_init_array in startup code if we are compiling using
279+
// -nostdlib/-nostartfiles.
280+
void _init(void) {
281+
}
282+
279283
#ifdef USE_FULL_ASSERT
280284
void assert_failed(const char *file, uint32_t line)
281285
{

0 commit comments

Comments
 (0)