Skip to content

Commit 543bcb5

Browse files
authored
Merge pull request #14441 from OpenNuvoton/nuvoton_m2354_tfm
M2354: Support Nuvoton's new target
2 parents da13755 + 3fc81fb commit 543bcb5

File tree

195 files changed

+97113
-1
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

195 files changed

+97113
-1
lines changed

platform/mbed_lib.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,9 @@
208208
"NU_PFM_M2351": {
209209
"stdio-baud-rate": 115200
210210
},
211+
"NU_M2354": {
212+
"stdio-baud-rate": 115200
213+
},
211214
"NRF52840_DK": {
212215
"crash-capture-enabled": true,
213216
"fatal-error-auto-reboot-enabled": true

targets/TARGET_NUVOTON/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ add_subdirectory(TARGET_M451 EXCLUDE_FROM_ALL)
99
add_subdirectory(TARGET_M480 EXCLUDE_FROM_ALL)
1010
add_subdirectory(TARGET_NANO100 EXCLUDE_FROM_ALL)
1111
add_subdirectory(TARGET_NUC472 EXCLUDE_FROM_ALL)
12+
add_subdirectory(TARGET_M2354 EXCLUDE_FROM_ALL)
1213

1314
target_include_directories(mbed-nuvoton
1415
INTERFACE
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
# Copyright (c) 2020-2021 ARM Limited. All rights reserved.
2+
# SPDX-License-Identifier: Apache-2.0
3+
4+
if(${MBED_TOOLCHAIN} STREQUAL "GCC_ARM")
5+
set(LINKER_FILE device/TOOLCHAIN_GCC_ARM/M2354.ld)
6+
elseif(${MBED_TOOLCHAIN} STREQUAL "ARM")
7+
set(LINKER_FILE device/TOOLCHAIN_ARMC6/M2354.sct)
8+
endif()
9+
10+
add_library(mbed-m2354 INTERFACE)
11+
12+
target_sources(mbed-m2354
13+
INTERFACE
14+
analogin_api.c
15+
analogout_api.c
16+
17+
device/startup_M2354.c
18+
device/system_M2354.c
19+
device/StdDriver/src/m2354_acmp.c
20+
device/StdDriver/src/m2354_bpwm.c
21+
device/StdDriver/src/m2354_can.c
22+
device/StdDriver/src/m2354_clk.c
23+
device/StdDriver/src/m2354_crc.c
24+
device/StdDriver/src/m2354_crypto.c
25+
device/StdDriver/src/m2354_dac.c
26+
device/StdDriver/src/m2354_dpm.c
27+
device/StdDriver/src/m2354_eadc.c
28+
device/StdDriver/src/m2354_ebi.c
29+
device/StdDriver/src/m2354_ecap.c
30+
device/StdDriver/src/m2354_epwm.c
31+
device/StdDriver/src/m2354_ewdt.c
32+
device/StdDriver/src/m2354_ewwdt.c
33+
device/StdDriver/src/m2354_fmc.c
34+
device/StdDriver/src/m2354_fvc.c
35+
device/StdDriver/src/m2354_gpio.c
36+
device/StdDriver/src/m2354_i2c.c
37+
device/StdDriver/src/m2354_i2s.c
38+
device/StdDriver/src/m2354_keystore.c
39+
device/StdDriver/src/m2354_lcd.c
40+
device/StdDriver/src/m2354_pdma.c
41+
device/StdDriver/src/m2354_qei.c
42+
device/StdDriver/src/m2354_qspi.c
43+
device/StdDriver/src/m2354_rng.c
44+
device/StdDriver/src/m2354_rtc.c
45+
device/StdDriver/src/m2354_sc.c
46+
device/StdDriver/src/m2354_scuart.c
47+
device/StdDriver/src/m2354_sdh.c
48+
device/StdDriver/src/m2354_spi.c
49+
device/StdDriver/src/m2354_sys.c
50+
device/StdDriver/src/m2354_tamper.c
51+
device/StdDriver/src/m2354_timer.c
52+
device/StdDriver/src/m2354_timer_pwm.c
53+
device/StdDriver/src/m2354_uart.c
54+
device/StdDriver/src/m2354_usbd.c
55+
device/StdDriver/src/m2354_usci_i2c.c
56+
device/StdDriver/src/m2354_usci_spi.c
57+
device/StdDriver/src/m2354_usci_uart.c
58+
device/StdDriver/src/m2354_wdt.c
59+
device/StdDriver/src/m2354_wwdt.c
60+
61+
dma_api.c
62+
gpio_api.c
63+
gpio_irq_api.c
64+
i2c_api.c
65+
lp_ticker.c
66+
mbed_overrides.c
67+
PeripheralPins.c
68+
pinmap.c
69+
port_api.c
70+
pwmout_api.c
71+
rtc_api.c
72+
serial_api.c
73+
sleep.c
74+
spi_api.c
75+
us_ticker.c
76+
)
77+
78+
target_include_directories(mbed-m2354
79+
INTERFACE
80+
.
81+
device
82+
device/Reg
83+
device/StdDriver/inc
84+
)
85+
86+
target_link_libraries(mbed-m2354 INTERFACE mbed-nuvoton)
87+
88+
mbed_set_linker_script(mbed-m2354 ${CMAKE_CURRENT_SOURCE_DIR}/${LINKER_FILE})
89+
90+
add_library(mbed-nu-m2354 INTERFACE)
91+
92+
if("TFM" IN_LIST MBED_TARGET_LABELS)
93+
add_subdirectory(TARGET_TFM)
94+
endif()
95+
96+
target_include_directories(mbed-nu-m2354
97+
INTERFACE
98+
TARGET_NU_M2354
99+
)
100+
101+
target_link_libraries(mbed-nu-m2354
102+
INTERFACE
103+
mbed-m2354
104+
mbed-m2354-tfm
105+
)
Lines changed: 175 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,175 @@
1+
/*
2+
* Copyright (c) 2020, Nuvoton Technology Corporation
3+
*
4+
* SPDX-License-Identifier: Apache-2.0
5+
*
6+
* Licensed under the Apache License, Version 2.0 (the "License");
7+
* you may not use this file except in compliance with the License.
8+
* You may obtain a copy of the License at
9+
*
10+
* http://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* Unless required by applicable law or agreed to in writing, software
13+
* distributed under the License is distributed on an "AS IS" BASIS,
14+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15+
* See the License for the specific language governing permissions and
16+
* limitations under the License.
17+
*/
18+
19+
#ifndef MBED_PERIPHERALNAMES_H
20+
#define MBED_PERIPHERALNAMES_H
21+
22+
#include "cmsis.h"
23+
24+
#ifdef __cplusplus
25+
extern "C" {
26+
#endif
27+
28+
// NOTE: Check all module base addresses (XXX_BASE in BSP) for free bit fields to define module name
29+
// which encodes module base address and module index/subindex.
30+
#define NU_MODSUBINDEX_Pos 0
31+
#define NU_MODSUBINDEX_Msk (0x1Ful << NU_MODSUBINDEX_Pos)
32+
#define NU_MODINDEX_Pos 20
33+
#define NU_MODINDEX_Msk (0xFul << NU_MODINDEX_Pos)
34+
35+
#define NU_MODNAME(MODBASE, INDEX, SUBINDEX) ((MODBASE) | ((INDEX) << NU_MODINDEX_Pos) | ((SUBINDEX) << NU_MODSUBINDEX_Pos))
36+
#define NU_MODBASE(MODNAME) ((MODNAME) & ~(NU_MODINDEX_Msk | NU_MODSUBINDEX_Msk))
37+
#define NU_MODINDEX(MODNAME) (((MODNAME) & NU_MODINDEX_Msk) >> NU_MODINDEX_Pos)
38+
#define NU_MODSUBINDEX(MODNAME) (((MODNAME) & NU_MODSUBINDEX_Msk) >> NU_MODSUBINDEX_Pos)
39+
40+
#if 0
41+
typedef enum {
42+
43+
GPIO_A = (int) NU_MODNAME(GPIOA_BASE + NS_OFFSET, 0, 0),
44+
GPIO_B = (int) NU_MODNAME(GPIOB_BASE + NS_OFFSET, 1, 0),
45+
GPIO_C = (int) NU_MODNAME(GPIOC_BASE + NS_OFFSET, 2, 0),
46+
GPIO_D = (int) NU_MODNAME(GPIOD_BASE + NS_OFFSET, 3, 0),
47+
GPIO_E = (int) NU_MODNAME(GPIOE_BASE + NS_OFFSET, 4, 0),
48+
GPIO_F = (int) NU_MODNAME(GPIOF_BASE + NS_OFFSET, 5, 0),
49+
GPIO_G = (int) NU_MODNAME(GPIOG_BASE + NS_OFFSET, 6, 0),
50+
GPIO_H = (int) NU_MODNAME(GPIOH_BASE + NS_OFFSET, 7, 0),
51+
52+
} GPIOName;
53+
#endif
54+
55+
typedef enum {
56+
57+
ADC_0_0 = (int) NU_MODNAME(EADC_BASE + NS_OFFSET, 0, 0),
58+
ADC_0_1 = (int) NU_MODNAME(EADC_BASE + NS_OFFSET, 0, 1),
59+
ADC_0_2 = (int) NU_MODNAME(EADC_BASE + NS_OFFSET, 0, 2),
60+
ADC_0_3 = (int) NU_MODNAME(EADC_BASE + NS_OFFSET, 0, 3),
61+
ADC_0_4 = (int) NU_MODNAME(EADC_BASE + NS_OFFSET, 0, 4),
62+
ADC_0_5 = (int) NU_MODNAME(EADC_BASE + NS_OFFSET, 0, 5),
63+
ADC_0_6 = (int) NU_MODNAME(EADC_BASE + NS_OFFSET, 0, 6),
64+
ADC_0_7 = (int) NU_MODNAME(EADC_BASE + NS_OFFSET, 0, 7),
65+
ADC_0_8 = (int) NU_MODNAME(EADC_BASE + NS_OFFSET, 0, 8),
66+
ADC_0_9 = (int) NU_MODNAME(EADC_BASE + NS_OFFSET, 0, 9),
67+
ADC_0_10 = (int) NU_MODNAME(EADC_BASE + NS_OFFSET, 0, 10),
68+
ADC_0_11 = (int) NU_MODNAME(EADC_BASE + NS_OFFSET, 0, 11),
69+
ADC_0_12 = (int) NU_MODNAME(EADC_BASE + NS_OFFSET, 0, 12),
70+
ADC_0_13 = (int) NU_MODNAME(EADC_BASE + NS_OFFSET, 0, 13),
71+
ADC_0_14 = (int) NU_MODNAME(EADC_BASE + NS_OFFSET, 0, 14),
72+
ADC_0_15 = (int) NU_MODNAME(EADC_BASE + NS_OFFSET, 0, 15),
73+
74+
} ADCName;
75+
76+
typedef enum {
77+
78+
DAC_0_0 = (int) NU_MODNAME(DAC0_BASE + NS_OFFSET, 0, 0),
79+
DAC_1_0 = (int) NU_MODNAME(DAC1_BASE + NS_OFFSET, 1, 0),
80+
81+
} DACName;
82+
83+
typedef enum {
84+
85+
UART_0 = (int) NU_MODNAME(UART0_BASE + NS_OFFSET, 0, 0),
86+
UART_1 = (int) NU_MODNAME(UART1_BASE + NS_OFFSET, 1, 0),
87+
UART_2 = (int) NU_MODNAME(UART2_BASE + NS_OFFSET, 2, 0),
88+
UART_3 = (int) NU_MODNAME(UART3_BASE + NS_OFFSET, 3, 0),
89+
UART_4 = (int) NU_MODNAME(UART4_BASE + NS_OFFSET, 4, 0),
90+
UART_5 = (int) NU_MODNAME(UART5_BASE + NS_OFFSET, 5, 0),
91+
92+
// NOTE: board-specific
93+
#if defined(MBED_CONF_TARGET_USB_UART)
94+
USB_UART = MBED_CONF_TARGET_USB_UART,
95+
#else
96+
USB_UART = NC,
97+
#endif
98+
#if defined(MBED_CONF_TARGET_STDIO_UART)
99+
STDIO_UART = MBED_CONF_TARGET_STDIO_UART,
100+
#else
101+
STDIO_UART = USB_UART,
102+
#endif
103+
104+
} UARTName;
105+
106+
typedef enum {
107+
108+
SPI_0 = (int) NU_MODNAME(SPI0_BASE + NS_OFFSET, 0, 0),
109+
SPI_1 = (int) NU_MODNAME(SPI1_BASE + NS_OFFSET, 1, 0),
110+
SPI_2 = (int) NU_MODNAME(SPI2_BASE + NS_OFFSET, 2, 0),
111+
SPI_3 = (int) NU_MODNAME(SPI3_BASE + NS_OFFSET, 3, 0),
112+
113+
/* No SPI4 H/W, degrade QSPI0 H/W to SPI_4 for standard SPI usage */
114+
SPI_4 = (int) NU_MODNAME(QSPI0_BASE + NS_OFFSET, 4, 0),
115+
116+
} SPIName;
117+
118+
typedef enum {
119+
120+
I2C_0 = (int) NU_MODNAME(I2C0_BASE + NS_OFFSET, 0, 0),
121+
I2C_1 = (int) NU_MODNAME(I2C1_BASE + NS_OFFSET, 1, 0),
122+
I2C_2 = (int) NU_MODNAME(I2C2_BASE + NS_OFFSET, 2, 0),
123+
124+
} I2CName;
125+
126+
typedef enum {
127+
128+
PWM_0_0 = (int) NU_MODNAME(EPWM0_BASE + NS_OFFSET, 0, 0),
129+
PWM_0_1 = (int) NU_MODNAME(EPWM0_BASE + NS_OFFSET, 0, 1),
130+
PWM_0_2 = (int) NU_MODNAME(EPWM0_BASE + NS_OFFSET, 0, 2),
131+
PWM_0_3 = (int) NU_MODNAME(EPWM0_BASE + NS_OFFSET, 0, 3),
132+
PWM_0_4 = (int) NU_MODNAME(EPWM0_BASE + NS_OFFSET, 0, 4),
133+
PWM_0_5 = (int) NU_MODNAME(EPWM0_BASE + NS_OFFSET, 0, 5),
134+
135+
PWM_1_0 = (int) NU_MODNAME(EPWM1_BASE + NS_OFFSET, 1, 0),
136+
PWM_1_1 = (int) NU_MODNAME(EPWM1_BASE + NS_OFFSET, 1, 1),
137+
PWM_1_2 = (int) NU_MODNAME(EPWM1_BASE + NS_OFFSET, 1, 2),
138+
PWM_1_3 = (int) NU_MODNAME(EPWM1_BASE + NS_OFFSET, 1, 3),
139+
PWM_1_4 = (int) NU_MODNAME(EPWM1_BASE + NS_OFFSET, 1, 4),
140+
PWM_1_5 = (int) NU_MODNAME(EPWM1_BASE + NS_OFFSET, 1, 5),
141+
142+
} PWMName;
143+
144+
typedef enum {
145+
146+
TIMER_2 = (int) NU_MODNAME(TMR23_BASE + NS_OFFSET, 2, 0),
147+
TIMER_3 = (int) NU_MODNAME(TMR23_BASE + NS_OFFSET + 0x100, 3, 0),
148+
TIMER_4 = (int) NU_MODNAME(TMR45_BASE + NS_OFFSET, 4, 0),
149+
TIMER_5 = (int) NU_MODNAME(TMR45_BASE + NS_OFFSET + 0x100, 5, 0),
150+
151+
} TIMERName;
152+
153+
typedef enum {
154+
155+
DMA_1 = (int) NU_MODNAME(PDMA1_BASE + NS_OFFSET, 1, 0),
156+
157+
} DMAName;
158+
159+
typedef enum {
160+
161+
SD_0 = (int) NU_MODNAME(SDH0_BASE + NS_OFFSET, 0, 0),
162+
163+
} SDName;
164+
165+
typedef enum {
166+
167+
CAN_0 = (int) NU_MODNAME(CAN0_BASE + NS_OFFSET, 0, 0),
168+
169+
} CANName;
170+
171+
#ifdef __cplusplus
172+
}
173+
#endif
174+
175+
#endif

0 commit comments

Comments
 (0)