Skip to content

Commit 6575b55

Browse files
AlessandroLuokartben
authored andcommitted
boards: Add support for the Ambiq Apollo510 EVB board
This commit adds support for the Ambiq Apollo510 Evaluation Board. Signed-off-by: Hao Luo <hluo@ambiq.com>
1 parent c188125 commit 6575b55

13 files changed

+359
-0
lines changed
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
# SPDX-License-Identifier: Apache-2.0
2+
3+
zephyr_library()
4+
zephyr_library_sources(board.c)

boards/ambiq/apollo510_evb/Kconfig

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# SPDX-License-Identifier: Apache-2.0
2+
#
3+
# Copyright (c) 2025 Ambiq Micro Inc. <www.ambiq.com>
4+
5+
config BOARD_APOLLO510_EVB
6+
select BOARD_EARLY_INIT_HOOK
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# SPDX-License-Identifier: Apache-2.0
2+
#
3+
# Copyright (c) 2025 Ambiq Micro Inc. <www.ambiq.com>
4+
5+
config BOARD_APOLLO510_EVB
6+
select SOC_APOLLO510
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# SPDX-License-Identifier: Apache-2.0
2+
#
3+
# Copyright (c) 2025 Ambiq Micro Inc.
4+
5+
if BOARD_APOLLO510_EVB
6+
7+
config SYS_CLOCK_HW_CYCLES_PER_SEC
8+
default 32768 if AMBIQ_STIMER_TIMER
9+
default 96000000 if CORTEX_M_SYSTICK
10+
11+
config LOG_BACKEND_SWO_FREQ_HZ
12+
default 1000000
13+
depends on LOG_BACKEND_SWO
14+
15+
endif # BOARD_APOLLO510_EVB
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
/*
2+
* Copyright (c) 2025 Ambiq Micro Inc.
3+
*
4+
* SPDX-License-Identifier: Apache-2.0
5+
*/
6+
7+
#include <apollo510/ambiq-apollo510-pinmux.h>
8+
9+
&pinctrl {
10+
uart0_default: uart0_default {
11+
group1 {
12+
pinmux = <UART0TX_P30>;
13+
};
14+
group2 {
15+
pinmux = <UART0RX_P55>;
16+
input-enable;
17+
};
18+
};
19+
swo_default: swo_default {
20+
group0 {
21+
pinmux = <SWO_P28>;
22+
};
23+
};
24+
};
Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
/dts-v1/;
2+
#include <ambiq/ambiq_apollo510.dtsi>
3+
#include "apollo510_evb-pinctrl.dtsi"
4+
#include <zephyr/dt-bindings/input/input-event-codes.h>
5+
6+
/ {
7+
model = "Ambiq Apollo510 evaluation board";
8+
compatible = "ambiq,apollo510_evb";
9+
10+
chosen {
11+
zephyr,itcm = &itcm;
12+
zephyr,dtcm = &dtcm;
13+
zephyr,sram = &sram0;
14+
zephyr,flash = &flash0;
15+
zephyr,console = &uart0;
16+
zephyr,shell-uart = &uart0;
17+
zephyr,uart-pipe = &uart0;
18+
ambiq,xo32m = &xo32m_xtal;
19+
ambiq,xo32k = &xo32k_xtal;
20+
ambiq,extrefclk = &extrefclk;
21+
};
22+
23+
aliases {
24+
watchdog0 = &wdt0;
25+
led0 = &led0;
26+
led1 = &led1;
27+
led2 = &led2;
28+
sw0 = &button0;
29+
sw1 = &button1;
30+
};
31+
32+
sram0: memory@SSRAM_BASE_NAME {
33+
compatible = "mmio-sram";
34+
reg = <SSRAM_BASE_ADDR 0x200000>;
35+
};
36+
37+
sram_no_cache: memory@20280000 {
38+
compatible = "zephyr,memory-region", "mmio-sram";
39+
reg = <0x20280000 0x100000>;
40+
zephyr,memory-region = "SRAM_NO_CACHE";
41+
zephyr,memory-attr = <( DT_MEM_ARM(ATTR_MPU_RAM_NOCACHE) )>;
42+
};
43+
44+
leds {
45+
compatible = "gpio-leds";
46+
led0: led_0 {
47+
gpios = <&gpio160_191 5 GPIO_ACTIVE_LOW>;
48+
label = "LED 0";
49+
};
50+
led1: led_1 {
51+
gpios = <&gpio64_95 25 GPIO_ACTIVE_LOW>;
52+
label = "LED 1";
53+
};
54+
led2: led_2 {
55+
gpios = <&gpio64_95 28 GPIO_ACTIVE_LOW>;
56+
label = "LED 2";
57+
};
58+
};
59+
60+
buttons {
61+
compatible = "gpio-keys";
62+
polling-mode;
63+
button0: button_0 {
64+
gpios = <&gpio64_95 29 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
65+
label = "BTN0";
66+
zephyr,code = <INPUT_KEY_0>;
67+
status = "okay";
68+
};
69+
button1: button_1 {
70+
gpios = <&gpio64_95 30 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>;
71+
label = "BTN1";
72+
zephyr,code = <INPUT_KEY_1>;
73+
status = "okay";
74+
};
75+
};
76+
};
77+
78+
&xo32m_xtal {
79+
clock-frequency = <DT_FREQ_M(48)>;
80+
};
81+
82+
&itm {
83+
pinctrl-0 = <&swo_default>;
84+
pinctrl-names = "default";
85+
};
86+
87+
&uart0 {
88+
current-speed = <115200>;
89+
pinctrl-0 = <&uart0_default>;
90+
pinctrl-names = "default";
91+
status = "okay";
92+
};
93+
94+
&stimer0 {
95+
clk-source = <3>;
96+
};
97+
98+
&wdt0 {
99+
status = "okay";
100+
};
101+
102+
&gpio0_31 {
103+
status = "okay";
104+
};
105+
106+
&gpio32_63 {
107+
status = "okay";
108+
};
109+
110+
&gpio64_95 {
111+
status = "okay";
112+
};
113+
114+
&gpio96_127 {
115+
status = "okay";
116+
};
117+
118+
&gpio128_159 {
119+
status = "okay";
120+
};
121+
122+
&gpio160_191 {
123+
status = "okay";
124+
};
125+
126+
&gpio192_223 {
127+
status = "okay";
128+
};
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
identifier: apollo510_evb
2+
name: Apollo510 EVB
3+
type: mcu
4+
arch: arm
5+
ram: 3072
6+
flash: 4096
7+
toolchain:
8+
- zephyr
9+
- gnuarmemb
10+
supported:
11+
- uart
12+
- watchdog
13+
- gpio
14+
- clock_control
15+
testing:
16+
ignore_tags:
17+
- net
18+
- bluetooth
19+
vendor: ambiq
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
# SPDX-License-Identifier: Apache-2.0
2+
#
3+
# Copyright (c) 2025 Ambiq Micro Inc.
4+
5+
CONFIG_CONSOLE=y
6+
CONFIG_UART_CONSOLE=y
7+
CONFIG_SERIAL=y
8+
CONFIG_UART_INTERRUPT_DRIVEN=y
9+
CONFIG_HW_STACK_PROTECTION=y
10+
CONFIG_ARM_MPU=y
11+
CONFIG_PM=y
12+
CONFIG_PM_DEVICE=y
13+
CONFIG_PM_DEVICE_RUNTIME=y

boards/ambiq/apollo510_evb/board.c

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
/*
2+
* Copyright 2025 Ambiq Micro Inc.
3+
*
4+
* SPDX-License-Identifier: Apache-2.0
5+
*/
6+
7+
#include <zephyr/init.h>
8+
#include <zephyr/kernel.h>
9+
#include <am_mcu_apollo.h>
10+
11+
#if DT_HAS_CHOSEN(ambiq_xo32m)
12+
#define XTAL_HS_FREQ DT_PROP(DT_CHOSEN(ambiq_xo32m), clock_frequency)
13+
#if DT_SAME_NODE(DT_CHOSEN(ambiq_xo32m), DT_NODELABEL(xo32m_xtal))
14+
#define XTAL_HS_MODE AM_HAL_CLKMGR_XTAL_HS_MODE_XTAL
15+
#elif DT_SAME_NODE(DT_CHOSEN(ambiq_xo32m), DT_NODELABEL(xo32m_ext))
16+
#define XTAL_HS_MODE AM_HAL_CLKMGR_XTAL_HS_MODE_EXT
17+
#endif
18+
#else
19+
#define XTAL_HS_FREQ 0
20+
#define XTAL_HS_MODE AM_HAL_CLKMGR_XTAL_HS_MODE_XTAL
21+
#endif
22+
23+
#if DT_HAS_CHOSEN(ambiq_xo32k)
24+
#define XTAL_LS_FREQ DT_PROP(DT_CHOSEN(ambiq_xo32k), clock_frequency)
25+
#if DT_SAME_NODE(DT_CHOSEN(ambiq_xo32k), DT_NODELABEL(xo32k_xtal))
26+
#define XTAL_LS_MODE AM_HAL_CLKMGR_XTAL_LS_MODE_XTAL
27+
#elif DT_SAME_NODE(DT_CHOSEN(ambiq_xo32k), DT_NODELABEL(xo32k_ext))
28+
#define XTAL_LS_MODE AM_HAL_CLKMGR_XTAL_LS_MODE_EXT
29+
#endif
30+
#else
31+
#define XTAL_LS_FREQ 0
32+
#define XTAL_LS_MODE AM_HAL_CLKMGR_XTAL_LS_MODE_XTAL
33+
#endif
34+
35+
#if DT_HAS_CHOSEN(ambiq_extrefclk)
36+
#define EXTREFCLK_FREQ DT_PROP(DT_CHOSEN(ambiq_extrefclk), clock_frequency)
37+
#else
38+
#define EXTREFCLK_FREQ 0
39+
#endif
40+
41+
void board_early_init_hook(void)
42+
{
43+
/* Set board related info into clock manager */
44+
am_hal_clkmgr_board_info_t sClkmgrBoardInfo = {.sXtalHs.eXtalHsMode = XTAL_HS_MODE,
45+
.sXtalHs.ui32XtalHsFreq = XTAL_HS_FREQ,
46+
.sXtalLs.eXtalLsMode = XTAL_LS_MODE,
47+
.sXtalLs.ui32XtalLsFreq = XTAL_LS_FREQ,
48+
.ui32ExtRefClkFreq = EXTREFCLK_FREQ};
49+
am_hal_clkmgr_board_info_set(&sClkmgrBoardInfo);
50+
51+
/* Default HFRC and HFRC2 to Free Running clocks */
52+
am_hal_clkmgr_clock_config(AM_HAL_CLKMGR_CLK_ID_HFRC,
53+
AM_HAL_CLKMGR_HFRC_FREQ_FREE_RUN_APPROX_48MHZ, NULL);
54+
am_hal_clkmgr_clock_config(AM_HAL_CLKMGR_CLK_ID_HFRC2,
55+
AM_HAL_CLKMGR_HFRC2_FREQ_FREE_RUN_APPROX_250MHZ, NULL);
56+
57+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# Copyright (c) 2025 Ambiq Micro Inc.
2+
# SPDX-License-Identifier: Apache-2.0
3+
4+
board_runner_args(jlink "--device=AP510NFA-CBR" "--iface=swd" "--speed=1000")
5+
6+
include(${ZEPHYR_BASE}/boards/common/jlink.board.cmake)

0 commit comments

Comments
 (0)