boards: arm: add LPCXpresso55S16 board definition

Add board definition for the NXP LPCXpresso55S16 development
board. Only non-secure (ns) access is supported for now.

Signed-off-by: Henrik Brix Andersen <henrik@brixandersen.dk>
This commit is contained in:
Henrik Brix Andersen 2020-04-18 20:16:44 +02:00 committed by Maureen Helm
commit e7da82cef5
12 changed files with 514 additions and 0 deletions

View file

@ -0,0 +1,11 @@
#
# Copyright (c) 2020 Henrik Brix Andersen <henrik@brixandersen.dk>
#
# SPDX-License-Identifier: Apache-2.0
#
if(CONFIG_PINMUX_MCUX_LPC)
zephyr_library()
zephyr_library_include_directories(${ZEPHYR_BASE}/drivers)
zephyr_library_sources(pinmux.c)
endif()

View file

@ -0,0 +1,9 @@
# LPCXpresso55S16 board
# Copyright (c) 2020 Henrik Brix Andersen <henrik@brixandersen.dk>
# SPDX-License-Identifier: Apache-2.0
config BOARD_LPCXPRESSO55S16
bool "NXP LPCXPRESSO-55S16"
depends on SOC_SERIES_LPC55XXX
select SOC_PART_NUMBER_LPC55S16JBD100

View file

@ -0,0 +1,31 @@
# LPCXpresso55S16 board
# Copyright (c) 2020 Henrik Brix Andersen <henrik@brixandersen.dk>
# SPDX-License-Identifier: Apache-2.0
if BOARD_LPCXPRESSO55S16
config BOARD
default "lpcxpresso55S16"
if PINMUX_MCUX_LPC
config PINMUX_MCUX_LPC_PORT0
default y
config PINMUX_MCUX_LPC_PORT1
default y
endif # PINMUX_MCUX_LPC
if GPIO_MCUX_LPC
config GPIO_MCUX_LPC_PORT0
default y
config GPIO_MCUX_LPC_PORT1
default y
endif # GPIO_MCUX_LPC
endif # BOARD_LPCXPRESSO55S16

View file

@ -0,0 +1,12 @@
#
# Copyright (c) 2020 Henrik Brix Andersen <henrik@brixandersen.dk>
#
# SPDX-License-Identifier: Apache-2.0
#
board_set_debugger_ifnset(jlink)
board_set_flasher_ifnset(jlink)
board_runner_args(jlink "--device=LPC55S16")
include(${ZEPHYR_BASE}/boards/common/jlink.board.cmake)

View file

@ -0,0 +1,202 @@
.. _lpcxpresso55s16:
NXP LPCXpresso55S16
###################
Overview
********
The LPCXpresso55S16 board provides the ideal platform for evaluation
of the LPC55S1x/LPC551x MCU family, based on the Arm® Cortex®-M33
architecture. Arduino® UNO compatible shield connectors are included,
with additional expansion ports around the Arduino footprint, along
with a PMod/host interface port and MikroElektronika Click module
site.
.. image:: ./lpcxpresso55S16.jpg
:width: 720px
:align: center
:alt: LPCXpresso55S16
Hardware
********
- LPC55S16 Arm® Cortex®-M33 microcontroller running at up to 150 MHz
- 256 KB flash and 96 KB SRAM on-chip
- LPC-Link2 debug high speed USB probe with VCOM port
- I2C and SPI USB bridging to the LPC device via LPC-Link2 probe
- MikroElektronika Click expansion option
- LPCXpresso expansion connectors compatible with Arduino UNO
- PMod compatible expansion / host connector
- Reset, ISP, wake, and user buttons for easy testing of software functionality
- Tri-color LED
- Full-speed USB device / host port
- High-speed USB device / host port
- UART header for external serial to USB cable
- CAN Transceiver
- Stereo audio codec with in/out line
- NXP FXOS8700CQ accelerometer
For more information about the LPC55S16 SoC and LPCXPresso55S16 board, see:
- `LPC55S16 SoC Website`_
- `LPC55S16 Datasheet`_
- `LPC55S16 User Manual`_
- `LPCXpresso55S16 Website`_
- `LPCXpresso55S16 User Manual`_
- `LPCXpresso55S16 Development Board Design Files`_
Supported Features
==================
The lpcxpresso55s16 board configuration supports the following
hardware features:
+-----------+------------+-------------------------------------+
| Interface | Controller | Driver/Component |
+===========+============+=====================================+
| NVIC | on-chip | nested vector interrupt controller |
+-----------+------------+-------------------------------------+
| SYSTICK | on-chip | systick |
+-----------+------------+-------------------------------------+
| IOCON | on-chip | pinmux |
+-----------+------------+-------------------------------------+
| GPIO | on-chip | gpio |
+-----------+------------+-------------------------------------+
| USART | on-chip | serial port |
+-----------+------------+-------------------------------------+
Other hardware features are not currently enabled.
Currently available targets for this board are:
- *lpcxpresso55s16_ns* non-secure (NS) address space
Connections and IOs
===================
The LPC55S16 SoC has IOCON registers, which can be used to configure
the functionality of a pin.
+---------+-----------------+----------------------------+
| Name | Function | Usage |
+=========+=================+============================+
| PIO0_5 | GPIO | ISP SW4 |
+---------+-----------------+----------------------------+
| PIO0_29 | USART | USART RX |
+---------+-----------------+----------------------------+
| PIO0_30 | USART | USART TX |
+---------+-----------------+----------------------------+
| PIO1_4 | GPIO | RED LED |
+---------+-----------------+----------------------------+
| PIO1_6 | GPIO | BLUE_LED |
+---------+-----------------+----------------------------+
| PIO1_7 | GPIO | GREEN LED |
+---------+-----------------+----------------------------+
| PIO1_9 | GPIO | USR SW3 |
+---------+-----------------+----------------------------+
| PIO1_18 | GPIO | Wakeup SW1 |
+---------+-----------------+----------------------------+
System Clock
============
The LPC55S16 SoC is configured to use the internal FRO at 96MHz as a
source for the system clock. Other sources for the system clock are
provided in the SOC, depending on your system requirements.
Serial Port
===========
The LPC55S16 SoC has 8 FLEXCOMM interfaces for serial
communication. One is configured as USART for the console and the
remaining are not used.
Programming and Debugging
*************************
Build and flash applications as usual (see :ref:`build_an_application`
and :ref:`application_run` for more details).
Configuring a Debug Probe
=========================
A debug probe is used for both flashing and debugging the board. This
board is configured by default to use the LPC-Link2 CMSIS-DAP Onboard
Debug Probe, however the :ref:`pyocd-debug-host-tools` does not yet
support the LPC55S16 so you must reconfigure the board for one of the
J-Link debug probe instead.
First install the :ref:`jlink-debug-host-tools` and make sure they are
in your search path.
Then follow the instructions in
:ref:`lpclink2-jlink-onboard-debug-probe` to program the J-Link
firmware. Please make sure you have the latest firmware for this
board.
Configuring a Console
=====================
Connect a USB cable from your PC to J1 (LINK2), and use the serial
terminal of your choice (minicom, putty, etc.) with the following
settings:
- Speed: 115200
- Data: 8 bits
- Parity: None
- Stop bits: 1
Flashing
========
Here is an example for the :ref:`hello_world` application.
.. zephyr-app-commands::
:zephyr-app: samples/hello_world
:board: lpcxpresso55s16_ns
:goals: flash
Open a serial terminal, reset the board (press the RESET button), and you should
see the following message in the terminal:
.. code-block:: console
***** Booting Zephyr OS v2.2.0 *****
Hello World! lpcxpresso55s16_ns
Debugging
=========
Here is an example for the :ref:`hello_world` application.
.. zephyr-app-commands::
:zephyr-app: samples/hello_world
:board: lpcxpresso55s16
:goals: debug
Open a serial terminal, step through the application in your debugger, and you
should see the following message in the terminal:
.. code-block:: console
***** Booting Zephyr OS zephyr-v2.2.0 *****
Hello World! lpcxpresso55s16
.. _LPC55S16 SoC Website:
https://www.nxp.com/products/processors-and-microcontrollers/arm-microcontrollers/general-purpose-mcus/lpc5500-cortex-m33/lpc551x-s1x-baseline-arm-cortex-m33-based-microcontroller-family:LPC551X-S1X
.. _LPC55S16 Datasheet:
https://www.nxp.com/docs/en/nxp/data-sheets/LPC55S1x_PDS.pdf
.. _LPC55S16 User Manual:
https://www.nxp.com/docs/en/nxp/user-guides/UM11295.pdf
.. _LPCxpresso55S16 Website:
https://www.nxp.com/design/development-boards/lpcxpresso-boards/lpcxpresso55s16-development-board:LPC55S16-EVK
.. _LPCXpresso55S16 User Manual:
https://www.nxp.com/docs/en/user-guide/UMLPCXPRESSO55S16.pdf
.. _LPCXpresso55S16 Development Board Design Files:
https://www.nxp.com/downloads/en/design-support/LPCXPRESSSO55S16-DESIGN-FILES.zip

Binary file not shown.

After

Width:  |  Height:  |  Size: 119 KiB

View file

@ -0,0 +1,63 @@
/*
* Copyright (c) 2020 Henrik Brix Andersen <henrik@brixandersen.dk>
*
* SPDX-License-Identifier: Apache-2.0
*/
/ {
chosen {
zephyr,sram = &sram0;
zephyr,flash = &flash0;
zephyr,code-partition = &sramx;
zephyr,console = &flexcomm0;
zephyr,shell-uart = &flexcomm0;
};
aliases{
led0 = &red_led;
led1 = &green_led;
led2 = &blue_led;
sw0 = &btn_wk;
sw1 = &btn_usr;
sw2 = &btn_isp;
usart-0 = &flexcomm0;
};
leds {
compatible = "gpio-leds";
red_led: led_0 {
gpios = <&gpio1 4 0>;
label = "Red LED";
};
green_led: led_1 {
gpios = <&gpio1 7 0>;
label = "Green LED";
};
blue_led: led_2 {
gpios = <&gpio1 6 0>;
label = "Blue LED";
};
};
gpio_keys {
compatible = "gpio-keys";
btn_wk: button_0 {
label = "Wakeup button";
gpios = <&gpio1 18 GPIO_ACTIVE_LOW>;
};
btn_usr: button_1 {
label = "USR button";
gpios = <&gpio1 9 GPIO_ACTIVE_LOW>;
};
btn_isp: button_2 {
label = "ISP button";
gpios = <&gpio0 5 GPIO_ACTIVE_LOW>;
};
};
};
&flexcomm0 {
status = "okay";
compatible = "nxp,lpc-usart";
current-speed = <115200>;
};

View file

@ -0,0 +1,15 @@
/*
* Copyright (c) 2020 Henrik Brix Andersen <henrik@brixandersen.dk>
*
* SPDX-License-Identifier: Apache-2.0
*/
/dts-v1/;
#include <nxp/nxp_lpc55S16_ns.dtsi>
#include "lpcxpresso55s16_common.dtsi"
/ {
model = "NXP LPCXpresso55S16 board (non-secure)";
compatible = "nxp,lpc55xxx", "nxp,lpc";
};

View file

@ -0,0 +1,18 @@
#
# Copyright (c) 2020 Henrik Brix Andersen <henrik@brixandersen.dk>
#
# SPDX-License-Identifier: Apache-2.0
#
identifier: lpcxpresso55s16_ns
name: NXP LPCXpresso55S16
type: mcu
arch: arm
ram: 96
flash: 256
toolchain:
- zephyr
- gnuarmemb
- xtools
supported:
- gpio

View file

@ -0,0 +1,23 @@
#
# Copyright (c) 2020 Henrik Brix Andersen <henrik@brixandersen.dk>
#
# SPDX-License-Identifier: Apache-2.0
#
CONFIG_SOC_SERIES_LPC55XXX=y
CONFIG_SOC_LPC55S16=y
CONFIG_BOARD_LPCXPRESSO55S16=y
CONFIG_CONSOLE=y
CONFIG_UART_CONSOLE=y
CONFIG_SERIAL=y
CONFIG_UART_INTERRUPT_DRIVEN=y
CONFIG_CORTEX_M_SYSTICK=y
CONFIG_GPIO=y
CONFIG_PINMUX=y
CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC=96000000
CONFIG_ARM_MPU=y
# TrustZone-M non-secure
CONFIG_TRUSTED_EXECUTION_NONSECURE=y
CONFIG_RUNTIME_NMI=y

View file

@ -0,0 +1,125 @@
/*
* Copyright (c) 2020 Henrik Brix Andersen <henrik@brixandersen.dk>
* SPDX-License-Identifier: Apache-2.0
*/
#include <init.h>
#include <drivers/pinmux.h>
#include <fsl_common.h>
#include <fsl_iocon.h>
#include <soc.h>
static int lpcxpresso_55s16_pinmux_init(struct device *dev)
{
ARG_UNUSED(dev);
#ifdef CONFIG_PINMUX_MCUX_LPC_PORT0
__unused struct device *port0 =
device_get_binding(CONFIG_PINMUX_MCUX_LPC_PORT0_NAME);
#endif
#ifdef CONFIG_PINMUX_MCUX_LPC_PORT1
__unused struct device *port1 =
device_get_binding(CONFIG_PINMUX_MCUX_LPC_PORT1_NAME);
#endif
#if DT_PHA_HAS_CELL(DT_ALIAS(sw0), gpios, pin)
/* Wakeup button */
const u32_t sw0_config = (
IOCON_PIO_FUNC0 |
IOCON_PIO_INV_DI |
IOCON_PIO_DIGITAL_EN |
IOCON_PIO_INPFILT_OFF |
IOCON_PIO_OPENDRAIN_DI
);
pinmux_pin_set(port1, DT_GPIO_PIN(DT_ALIAS(sw0), gpios), sw0_config);
#endif
#if DT_PHA_HAS_CELL(DT_ALIAS(sw1), gpios, pin)
/* USR button */
const u32_t sw1_config = (
IOCON_PIO_FUNC0 |
IOCON_PIO_INV_DI |
IOCON_PIO_DIGITAL_EN |
IOCON_PIO_INPFILT_OFF |
IOCON_PIO_OPENDRAIN_DI
);
pinmux_pin_set(port1, DT_GPIO_PIN(DT_ALIAS(sw1), gpios), sw1_config);
#endif
#if DT_PHA_HAS_CELL(DT_ALIAS(sw2), gpios, pin)
/* ISP button */
const u32_t sw2_config = (
IOCON_PIO_FUNC0 |
IOCON_PIO_INV_DI |
IOCON_PIO_DIGITAL_EN |
IOCON_PIO_INPFILT_OFF |
IOCON_PIO_OPENDRAIN_DI
);
pinmux_pin_set(port0, DT_GPIO_PIN(DT_ALIAS(sw2), gpios), sw2_config);
#endif
#if DT_PHA_HAS_CELL(DT_ALIAS(led0), gpios, pin)
/* Red LED */
const u32_t led0_config = (
IOCON_PIO_FUNC0 |
IOCON_PIO_INV_DI |
IOCON_PIO_DIGITAL_EN |
IOCON_PIO_INPFILT_OFF |
IOCON_PIO_OPENDRAIN_DI
);
pinmux_pin_set(port1, DT_GPIO_PIN(DT_ALIAS(led0), gpios), led0_config);
#endif
#if DT_PHA_HAS_CELL(DT_ALIAS(led1), gpios, pin)
/* Green LED */
const u32_t led1_config = (
IOCON_PIO_FUNC0 |
IOCON_PIO_INV_DI |
IOCON_PIO_DIGITAL_EN |
IOCON_PIO_INPFILT_OFF |
IOCON_PIO_OPENDRAIN_DI
);
pinmux_pin_set(port1, DT_GPIO_PIN(DT_ALIAS(led1), gpios), led1_config);
#endif
#if DT_PHA_HAS_CELL(DT_ALIAS(led2), gpios, pin)
/* Blue LED */
const u32_t led2_config = (
IOCON_PIO_FUNC0 |
IOCON_PIO_INV_DI |
IOCON_PIO_DIGITAL_EN |
IOCON_PIO_INPFILT_OFF |
IOCON_PIO_OPENDRAIN_DI
);
pinmux_pin_set(port1, DT_GPIO_PIN(DT_ALIAS(led2), gpios), led2_config);
#endif
#if DT_HAS_NODE(DT_NODELABEL(flexcomm0)) && \
DT_NODE_HAS_COMPAT(DT_NODELABEL(flexcomm0), nxp_lpc_usart)
/* USART0 RX, TX */
const u32_t port0_pin29_config = (
IOCON_PIO_FUNC1 |
IOCON_PIO_MODE_INACT |
IOCON_PIO_INV_DI |
IOCON_PIO_DIGITAL_EN |
IOCON_PIO_SLEW_STANDARD |
IOCON_PIO_OPENDRAIN_DI
);
const u32_t port0_pin30_config = (
IOCON_PIO_FUNC1 |
IOCON_PIO_MODE_INACT |
IOCON_PIO_INV_DI |
IOCON_PIO_DIGITAL_EN |
IOCON_PIO_SLEW_STANDARD |
IOCON_PIO_OPENDRAIN_DI
);
pinmux_pin_set(port0, 29, port0_pin29_config);
pinmux_pin_set(port0, 30, port0_pin30_config);
#endif
return 0;
}
SYS_INIT(lpcxpresso_55s16_pinmux_init, PRE_KERNEL_1,
CONFIG_PINMUX_INIT_PRIORITY);

View file

@ -0,0 +1,5 @@
# Copyright (c) 2020 Henrik Brix Andersen <henrik@brixandersen.dk>
# SPDX-License-Identifier: Apache-2.0
# Suppress "simple_bus_reg" on LPC boards as all GPIO ports use the same register.
list(APPEND EXTRA_DTC_FLAGS "-Wno-simple_bus_reg")