Skip to content

Commit 8199ed6

Browse files
committed
refactor all nuc to family
1 parent 0d690c8 commit 8199ed6

File tree

29 files changed

+939
-63
lines changed

29 files changed

+939
-63
lines changed

examples/device/net_lwip_webserver/skip.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,3 +20,4 @@ board:curiosity_nano
2020
board:frdm_kl25z
2121
# lpc55 has weird error 'ncm_interface' causes a section type conflict with 'ntb_parameters'
2222
family:lpc55
23+
family:nuc126

hw/bsp/board.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
#ifdef __ICCARM__
3232
#define sys_write __write
3333
#define sys_read __read
34-
#elif defined(__MSP430__) || defined(__RX__) || TU_CHECK_MCU(OPT_MCU_NUC121)
34+
#elif defined(__MSP430__) || defined(__RX__) || TU_CHECK_MCU(OPT_MCU_NUC120, OPT_MCU_NUC121, OPT_MCU_NUC126, OPT_MCU_NUC505)
3535
#define sys_write write
3636
#define sys_read read
3737
#else
Lines changed: 150 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,150 @@
1+
/*
2+
* FreeRTOS Kernel V10.0.0
3+
* Copyright (C) 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
4+
*
5+
* Permission is hereby granted, free of charge, to any person obtaining a copy of
6+
* this software and associated documentation files (the "Software"), to deal in
7+
* the Software without restriction, including without limitation the rights to
8+
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
9+
* the Software, and to permit persons to whom the Software is furnished to do so,
10+
* subject to the following conditions:
11+
*
12+
* The above copyright notice and this permission notice shall be included in all
13+
* copies or substantial portions of the Software. If you wish to use our Amazon
14+
* FreeRTOS name, please do so in a fair use way that does not cause confusion.
15+
*
16+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
18+
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
19+
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
20+
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
21+
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22+
*
23+
* http://www.FreeRTOS.org
24+
* http://aws.amazon.com/freertos
25+
*
26+
* 1 tab == 4 spaces!
27+
*/
28+
29+
30+
#ifndef FREERTOS_CONFIG_H
31+
#define FREERTOS_CONFIG_H
32+
33+
/*-----------------------------------------------------------
34+
* Application specific definitions.
35+
*
36+
* These definitions should be adjusted for your particular hardware and
37+
* application requirements.
38+
*
39+
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE
40+
* FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE.
41+
*
42+
* See http://www.freertos.org/a00110.html.
43+
*----------------------------------------------------------*/
44+
45+
// skip if included from IAR assembler
46+
#ifndef __IASMARM__
47+
#include "NuMicro.h"
48+
#endif
49+
50+
/* Cortex-M0 port configuration. */
51+
#define configENABLE_MPU 0
52+
#define configENABLE_FPU 0
53+
#define configENABLE_TRUSTZONE 0
54+
#define configMINIMAL_SECURE_STACK_SIZE (1024)
55+
56+
#define configUSE_PREEMPTION 1
57+
#define configUSE_PORT_OPTIMISED_TASK_SELECTION 0
58+
#define configCPU_CLOCK_HZ SystemCoreClock
59+
#define configTICK_RATE_HZ ( 1000 )
60+
#define configMAX_PRIORITIES ( 5 )
61+
#define configMINIMAL_STACK_SIZE ( 128 )
62+
#define configTOTAL_HEAP_SIZE ( configSUPPORT_DYNAMIC_ALLOCATION*4*1024 )
63+
#define configMAX_TASK_NAME_LEN 16
64+
#define configUSE_16_BIT_TICKS 0
65+
#define configIDLE_SHOULD_YIELD 1
66+
#define configUSE_MUTEXES 1
67+
#define configUSE_RECURSIVE_MUTEXES 1
68+
#define configUSE_COUNTING_SEMAPHORES 1
69+
#define configQUEUE_REGISTRY_SIZE 4
70+
#define configUSE_QUEUE_SETS 0
71+
#define configUSE_TIME_SLICING 0
72+
#define configUSE_NEWLIB_REENTRANT 0
73+
#define configENABLE_BACKWARD_COMPATIBILITY 1
74+
#define configSTACK_ALLOCATION_FROM_SEPARATE_HEAP 0
75+
76+
#define configSUPPORT_STATIC_ALLOCATION 1
77+
#define configSUPPORT_DYNAMIC_ALLOCATION 0
78+
79+
/* Hook function related definitions. */
80+
#define configUSE_IDLE_HOOK 0
81+
#define configUSE_TICK_HOOK 0
82+
#define configUSE_MALLOC_FAILED_HOOK 0 // cause nested extern warning
83+
#define configCHECK_FOR_STACK_OVERFLOW 2
84+
#define configCHECK_HANDLER_INSTALLATION 0
85+
86+
/* Run time and task stats gathering related definitions. */
87+
#define configGENERATE_RUN_TIME_STATS 0
88+
#define configRECORD_STACK_HIGH_ADDRESS 1
89+
#define configUSE_TRACE_FACILITY 1 // legacy trace
90+
#define configUSE_STATS_FORMATTING_FUNCTIONS 0
91+
92+
/* Co-routine definitions. */
93+
#define configUSE_CO_ROUTINES 0
94+
#define configMAX_CO_ROUTINE_PRIORITIES 2
95+
96+
/* Software timer related definitions. */
97+
#define configUSE_TIMERS 1
98+
#define configTIMER_TASK_PRIORITY (configMAX_PRIORITIES-2)
99+
#define configTIMER_QUEUE_LENGTH 32
100+
#define configTIMER_TASK_STACK_DEPTH configMINIMAL_STACK_SIZE
101+
102+
/* Optional functions - most linkers will remove unused functions anyway. */
103+
#define INCLUDE_vTaskPrioritySet 0
104+
#define INCLUDE_uxTaskPriorityGet 0
105+
#define INCLUDE_vTaskDelete 0
106+
#define INCLUDE_vTaskSuspend 1 // required for queue, semaphore, mutex to be blocked indefinitely with portMAX_DELAY
107+
#define INCLUDE_xResumeFromISR 0
108+
#define INCLUDE_vTaskDelayUntil 1
109+
#define INCLUDE_vTaskDelay 1
110+
#define INCLUDE_xTaskGetSchedulerState 0
111+
#define INCLUDE_xTaskGetCurrentTaskHandle 1
112+
#define INCLUDE_uxTaskGetStackHighWaterMark 0
113+
#define INCLUDE_xTaskGetIdleTaskHandle 0
114+
#define INCLUDE_xTimerGetTimerDaemonTaskHandle 0
115+
#define INCLUDE_pcTaskGetTaskName 0
116+
#define INCLUDE_eTaskGetState 0
117+
#define INCLUDE_xEventGroupSetBitFromISR 0
118+
#define INCLUDE_xTimerPendFunctionCall 0
119+
120+
/* FreeRTOS hooks to NVIC vectors */
121+
#define xPortPendSVHandler PendSV_Handler
122+
#define xPortSysTickHandler SysTick_Handler
123+
#define vPortSVCHandler SVC_Handler
124+
125+
//--------------------------------------------------------------------+
126+
// Interrupt nesting behavior configuration.
127+
//--------------------------------------------------------------------+
128+
129+
// For Cortex-M specific: __NVIC_PRIO_BITS is defined in mcu header
130+
// NUC121/125 has 2 priority bits
131+
#define configPRIO_BITS 2
132+
133+
/* The lowest interrupt priority that can be used in a call to a "set priority" function. */
134+
#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY ((1<<configPRIO_BITS) - 1)
135+
136+
/* The highest interrupt priority that can be used by any interrupt service
137+
routine that makes calls to interrupt safe FreeRTOS API functions. DO NOT CALL
138+
INTERRUPT SAFE FREERTOS API FUNCTIONS FROM ANY INTERRUPT THAT HAS A HIGHER
139+
PRIORITY THAN THIS! (higher priorities are lower numeric values. */
140+
#define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 2
141+
142+
/* Interrupt priorities used by the kernel port layer itself. These are generic
143+
to all Cortex-M ports, and do not rely on any particular library functions. */
144+
#define configKERNEL_INTERRUPT_PRIORITY ( configLIBRARY_LOWEST_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )
145+
146+
/* !!!! configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to zero !!!!
147+
See http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html. */
148+
#define configMAX_SYSCALL_INTERRUPT_PRIORITY ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )
149+
150+
#endif
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
set(JLINK_DEVICE NUC120LE3)
2+
set(LD_FILE_GNU ${CMAKE_CURRENT_LIST_DIR}/nuc120_flash.ld)
3+
4+
function(update_board TARGET)
5+
target_compile_definitions(${TARGET} PUBLIC
6+
)
7+
endfunction()
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
/*
2+
* The MIT License (MIT)
3+
*
4+
* Copyright (c) 2019 Ha Thach (tinyusb.org)
5+
*
6+
* Permission is hereby granted, free of charge, to any person obtaining a copy
7+
* of this software and associated documentation files (the "Software"), to deal
8+
* in the Software without restriction, including without limitation the rights
9+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10+
* copies of the Software, and to permit persons to whom the Software is
11+
* furnished to do so, subject to the following conditions:
12+
*
13+
* The above copyright notice and this permission notice shall be included in
14+
* all copies or substantial portions of the Software.
15+
*
16+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22+
* THE SOFTWARE.
23+
*
24+
* This file is part of the TinyUSB stack.
25+
*/
26+
27+
#ifndef BOARD_H_
28+
#define BOARD_H_
29+
30+
#ifdef __cplusplus
31+
extern "C" {
32+
#endif
33+
34+
#define LED_PORT PB
35+
#define LED_PIN 0
36+
#define LED_PIN_IO PB0
37+
#define LED_STATE_ON 0
38+
39+
#ifdef __cplusplus
40+
}
41+
#endif
42+
43+
#endif
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
JLINK_DEVICE = NUC120LE3
2+
LD_FILE = $(BOARD_PATH)/nuc120_flash.ld

hw/bsp/nutiny_sdk_nuc120/nutiny_sdk_nuc120.c renamed to hw/bsp/nuc100_120/family.c

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525
*/
2626

2727
#include "bsp/board_api.h"
28+
#include "board.h"
29+
2830
#include "NUC100Series.h"
2931
#include "clk.h"
3032
#include "sys.h"
@@ -37,14 +39,6 @@ void USBD_IRQHandler(void)
3739
tud_int_handler(0);
3840
}
3941

40-
//--------------------------------------------------------------------+
41-
// MACRO TYPEDEF CONSTANT ENUM
42-
//--------------------------------------------------------------------+
43-
#define LED_PORT PB
44-
#define LED_PIN 0
45-
#define LED_PIN_IO PB0
46-
#define LED_STATE_ON 0
47-
4842
void board_init(void)
4943
{
5044
SYS_UnlockReg();

hw/bsp/nuc100_120/family.cmake

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
include_guard()
2+
3+
include(${CMAKE_CURRENT_LIST_DIR}/boards/${BOARD}/board.cmake)
4+
5+
set(SDK_DIR ${TOP}/hw/mcu/nuvoton/nuc100_120)
6+
set(CMSIS_5 ${TOP}/lib/CMSIS_5)
7+
8+
set(CMAKE_SYSTEM_CPU cortex-m0 CACHE INTERNAL "System Processor")
9+
set(CMAKE_TOOLCHAIN_FILE ${TOP}/examples/build_system/cmake/toolchain/arm_${TOOLCHAIN}.cmake)
10+
set(OPENOCD_OPTION "-f interface/nulink.cfg -f target/numicroM0.cfg")
11+
12+
set(FAMILY_MCUS NUC100 NUC120 CACHE INTERNAL "")
13+
14+
function(add_board_target BOARD_TARGET)
15+
if (TARGET ${BOARD_TARGET})
16+
return()
17+
endif ()
18+
19+
set(LD_FILE_Clang ${LD_FILE_GNU})
20+
if (NOT DEFINED LD_FILE_${CMAKE_C_COMPILER_ID})
21+
message(FATAL_ERROR "LD_FILE_${CMAKE_C_COMPILER_ID} not defined")
22+
endif ()
23+
24+
set(STARTUP_FILE_GNU ${SDK_DIR}/Device/Nuvoton/NUC100Series/Source/GCC/startup_NUC100Series.S)
25+
set(STARTUP_FILE_Clang ${STARTUP_FILE_GNU})
26+
27+
add_library(${BOARD_TARGET} STATIC
28+
${SDK_DIR}/Device/Nuvoton/NUC100Series/Source/system_NUC100Series.c
29+
${SDK_DIR}/StdDriver/src/clk.c
30+
${SDK_DIR}/StdDriver/src/gpio.c
31+
${SDK_DIR}/StdDriver/src/sys.c
32+
${SDK_DIR}/StdDriver/src/timer.c
33+
${SDK_DIR}/StdDriver/src/uart.c
34+
${STARTUP_FILE_${CMAKE_C_COMPILER_ID}}
35+
)
36+
37+
target_include_directories(${BOARD_TARGET} PUBLIC
38+
${SDK_DIR}/Device/Nuvoton/NUC100Series/Include
39+
${SDK_DIR}/StdDriver/inc
40+
${SDK_DIR}/CMSIS/Include
41+
)
42+
43+
target_compile_definitions(${BOARD_TARGET} PUBLIC
44+
CFG_EXAMPLE_MSC_READONLY
45+
CFG_EXAMPLE_VIDEO_READONLY
46+
)
47+
48+
update_board(${BOARD_TARGET})
49+
50+
if (CMAKE_C_COMPILER_ID STREQUAL "GNU")
51+
target_link_options(${BOARD_TARGET} PUBLIC
52+
"LINKER:--script=${LD_FILE_GNU}"
53+
--specs=nosys.specs --specs=nano.specs
54+
)
55+
elseif (CMAKE_C_COMPILER_ID STREQUAL "Clang")
56+
target_link_options(${BOARD_TARGET} PUBLIC
57+
"LINKER:--script=${LD_FILE_Clang}"
58+
)
59+
elseif (CMAKE_C_COMPILER_ID STREQUAL "IAR")
60+
target_link_options(${BOARD_TARGET} PUBLIC
61+
"LINKER:--config=${LD_FILE_IAR}"
62+
)
63+
endif ()
64+
endfunction()
65+
66+
function(family_configure_example TARGET RTOS)
67+
family_configure_common(${TARGET} ${RTOS})
68+
add_board_target(board_${BOARD})
69+
70+
target_sources(${TARGET} PUBLIC
71+
${CMAKE_CURRENT_FUNCTION_LIST_DIR}/family.c
72+
${CMAKE_CURRENT_FUNCTION_LIST_DIR}/../board.c
73+
)
74+
target_include_directories(${TARGET} PUBLIC
75+
${CMAKE_CURRENT_FUNCTION_LIST_DIR}
76+
${CMAKE_CURRENT_FUNCTION_LIST_DIR}/../../
77+
${CMAKE_CURRENT_FUNCTION_LIST_DIR}/boards/${BOARD}
78+
)
79+
80+
family_add_tinyusb(${TARGET} OPT_MCU_NUC120)
81+
target_sources(${TARGET} PUBLIC
82+
${TOP}/src/portable/nuvoton/nuc120/dcd_nuc120.c
83+
)
84+
target_link_libraries(${TARGET} PUBLIC board_${BOARD})
85+
86+
family_flash_openocd_nuvoton(${TARGET})
87+
endfunction()
Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
1+
include $(TOP)/$(BOARD_PATH)/board.mk
2+
13
CFLAGS += \
24
-flto \
3-
-mthumb \
4-
-mabi=aapcs-linux \
5-
-mcpu=cortex-m0 \
65
-DCFG_EXAMPLE_MSC_READONLY \
76
-DCFG_EXAMPLE_VIDEO_READONLY \
87
-DCFG_TUSB_MCU=OPT_MCU_NUC120
98

9+
CPU_CORE ?= cortex-m0
10+
1011
LDFLAGS_GCC += -specs=nosys.specs -specs=nano.specs
1112

12-
# All source paths should be relative to the top level.
13-
LD_FILE = hw/bsp/nutiny_sdk_nuc120/nuc120_flash.ld
13+
# LD_FILE is defined in board.mk
1414

1515
SRC_C += \
1616
src/portable/nuvoton/nuc120/dcd_nuc120.c \
@@ -27,15 +27,13 @@ SRC_S += \
2727
INC += \
2828
$(TOP)/hw/mcu/nuvoton/nuc100_120/Device/Nuvoton/NUC100Series/Include \
2929
$(TOP)/hw/mcu/nuvoton/nuc100_120/StdDriver/inc \
30-
$(TOP)/hw/mcu/nuvoton/nuc100_120/CMSIS/Include
30+
$(TOP)/hw/mcu/nuvoton/nuc100_120/CMSIS/Include \
31+
$(TOP)/$(BOARD_PATH)
3132

32-
# For freeRTOS port source
3333
FREERTOS_PORTABLE_SRC = $(FREERTOS_PORTABLE_PATH)/ARM_CM0
3434

35-
# For flash-jlink target
36-
JLINK_DEVICE = NUC120LE3
37-
3835
# Flash using Nuvoton's openocd fork at https://github.com/OpenNuvoton/OpenOCD-Nuvoton
3936
# Please compile and install it from github source
37+
OPENOCD_NUVOTON_PATH ?= $(HOME)/app/OpenOCD-Nuvoton
4038
flash: $(BUILD)/$(PROJECT).elf
41-
openocd -f interface/nulink.cfg -f target/numicroM0.cfg -c "program $< reset exit"
39+
$(OPENOCD_NUVOTON_PATH)/src/openocd -s $(OPENOCD_NUVOTON_PATH)/tcl -f interface/nulink.cfg -f target/numicroM0.cfg -c "program $< reset exit"

0 commit comments

Comments
 (0)