From 70a277575a73e79da9f57b38fff2c27a46f56234 Mon Sep 17 00:00:00 2001 From: Maxime Bittan Date: Wed, 18 Mar 2020 19:04:43 +0100 Subject: [PATCH] boards: arm: add support for lpcxpresso11u68 board This patch adds support for the LPC11U68 LPCXpresso board based on the LPC11U68 SoC. Signed-off-by: Maxime Bittan Signed-off-by: Simon Guinot --- boards/arm/lpcxpresso11u68/CMakeLists.txt | 8 + boards/arm/lpcxpresso11u68/Kconfig.board | 9 + boards/arm/lpcxpresso11u68/Kconfig.defconfig | 11 ++ boards/arm/lpcxpresso11u68/board.cmake | 5 + boards/arm/lpcxpresso11u68/doc/index.rst | 164 ++++++++++++++++++ .../lpcxpresso11u68/doc/lpcxpresso11u68.png | Bin 0 -> 53256 bytes .../arm/lpcxpresso11u68/lpcxpresso11u68.dts | 125 +++++++++++++ .../arm/lpcxpresso11u68/lpcxpresso11u68.yaml | 13 ++ .../lpcxpresso11u68/lpcxpresso11u68_defconfig | 18 ++ boards/arm/lpcxpresso11u68/pre_dt_board.cmake | 5 + .../arm/lpcxpresso11u68/support/openocd.cfg | 42 +++++ 11 files changed, 400 insertions(+) create mode 100644 boards/arm/lpcxpresso11u68/CMakeLists.txt create mode 100644 boards/arm/lpcxpresso11u68/Kconfig.board create mode 100644 boards/arm/lpcxpresso11u68/Kconfig.defconfig create mode 100644 boards/arm/lpcxpresso11u68/board.cmake create mode 100644 boards/arm/lpcxpresso11u68/doc/index.rst create mode 100644 boards/arm/lpcxpresso11u68/doc/lpcxpresso11u68.png create mode 100644 boards/arm/lpcxpresso11u68/lpcxpresso11u68.dts create mode 100644 boards/arm/lpcxpresso11u68/lpcxpresso11u68.yaml create mode 100644 boards/arm/lpcxpresso11u68/lpcxpresso11u68_defconfig create mode 100644 boards/arm/lpcxpresso11u68/pre_dt_board.cmake create mode 100644 boards/arm/lpcxpresso11u68/support/openocd.cfg diff --git a/boards/arm/lpcxpresso11u68/CMakeLists.txt b/boards/arm/lpcxpresso11u68/CMakeLists.txt new file mode 100644 index 00000000000..ca6c4a4be99 --- /dev/null +++ b/boards/arm/lpcxpresso11u68/CMakeLists.txt @@ -0,0 +1,8 @@ +# SPDX-License-Identifier: Apache-2.0 + +set_property(GLOBAL APPEND PROPERTY extra_post_build_commands + # Insert checksum (verified by the bootloader) into the zephyr.bin + # and zephyr.hex images. + COMMAND lpc_checksum -f hex ${CMAKE_BINARY_DIR}/zephyr/zephyr.hex + COMMAND lpc_checksum -f bin ${CMAKE_BINARY_DIR}/zephyr/zephyr.bin + ) diff --git a/boards/arm/lpcxpresso11u68/Kconfig.board b/boards/arm/lpcxpresso11u68/Kconfig.board new file mode 100644 index 00000000000..721104975a2 --- /dev/null +++ b/boards/arm/lpcxpresso11u68/Kconfig.board @@ -0,0 +1,9 @@ +# LPCXpresso11U68 board + +# Copyright (c) 2020, Seagate +# SPDX-License-Identifier: Apache-2.0 + +config BOARD_LPCXPRESSO11U68 + bool "NXP LPCXPRESSO-11U68" + depends on SOC_SERIES_LPC11U6X + select SOC_PART_NUMBER_LPC11U68JBD100 diff --git a/boards/arm/lpcxpresso11u68/Kconfig.defconfig b/boards/arm/lpcxpresso11u68/Kconfig.defconfig new file mode 100644 index 00000000000..da0fd7aacac --- /dev/null +++ b/boards/arm/lpcxpresso11u68/Kconfig.defconfig @@ -0,0 +1,11 @@ +# LPCXpresso11U68 board + +# Copyright (c) 2020, Seagate +# SPDX-License-Identifier: Apache-2.0 + +if BOARD_LPCXPRESSO11U68 + +config BOARD + default "lpcxpresso11u68" + +endif # BOARD_LPCXPRESSO11U68 diff --git a/boards/arm/lpcxpresso11u68/board.cmake b/boards/arm/lpcxpresso11u68/board.cmake new file mode 100644 index 00000000000..02b54f7ca0d --- /dev/null +++ b/boards/arm/lpcxpresso11u68/board.cmake @@ -0,0 +1,5 @@ +# +# SPDX-License-Identifier: Apache-2.0 +# + +include(${ZEPHYR_BASE}/boards/common/openocd.board.cmake) diff --git a/boards/arm/lpcxpresso11u68/doc/index.rst b/boards/arm/lpcxpresso11u68/doc/index.rst new file mode 100644 index 00000000000..aa880af08cb --- /dev/null +++ b/boards/arm/lpcxpresso11u68/doc/index.rst @@ -0,0 +1,164 @@ +.. _lpcxpresso11u68: + +NXP LPCXpresso11U68 +################### + +Overview +******** + +The LPCXpresso11u68 development board uses an NXP LPC11U68 MCU based +on an ARM Cortex-M0+ core. + +.. figure:: lpcxpresso11u68.png + :width: 800px + :align: center + :alt: LPCXpresso11U68 + +Hardware +******** + +The LPCxpresso 11U68 board provides the following hardware components: + +- LPC11U68 microcontroller in LQFP100 package +- ARM Cortex-M0+ +- Memory: + + - 256KB of flash memory + - 32KB of SRAM + - 2x2KB of additional SRAM + - 4 KB EEPROM +- USB: + + - USB 2.0 Full-Speed device controller +- DMA controller +- 5x USART +- 2x I2C +- 2x SSP with DMA support +- Board power supply: through USB bus or external power supply (3V and 5V) +- Arduino connectors compatible with the 'Arduino UNO' platform +- Tri-color user LED, Power On Led, Reset LED +- Three push buttons: target reset, ISP and user + +More information can be found here: + +- `LPC11UXX SoC Website`_ +- `LPC11U6X Datasheet`_ +- `LPC11U6X Reference Manual`_ +- `LPCXPRESSO11U68 Website`_ +- `LPCXPRESSO11U68 Schematics`_ + +Supported Features +================== + +The lpcxpresso11U68 supports the following features: + ++-----------+------------+-------------------------------------+ +| Interface | Controller | Driver/Component | ++===========+============+=====================================+ +| NVIC | on-chip | nested vector interrupt controller | ++-----------+------------+-------------------------------------+ +| SYSTICK | on-chip | systick | ++-----------+------------+-------------------------------------+ +| IOCON | on-chip | pinmux | ++-----------+------------+-------------------------------------+ +| CLOCK | on-chip | clock and reset control | ++-----------+------------+-------------------------------------+ +| GPIO | on-chip | gpio | ++-----------+------------+-------------------------------------+ +| I2C | on-chip | i2c master/slave controller | ++-----------+------------+-------------------------------------+ +| UART | on-chip | serial port-polling; | +| | | serial port interrupt | ++-----------+------------+-------------------------------------+ +| EEPROM | on-chip | eeprom | ++-----------+------------+-------------------------------------+ + +Other hardware is not yet supported on Zephyr. + +Connections and IOs +=================== + +The IOCON controller can be used to configure the LPC11U68 pins. + ++---------+-----------------+----------------------------+ +| Name | Function | Usage | ++=========+=================+============================+ +| PIO2_11 | UART | USART RX | ++---------+-----------------+----------------------------+ +| PIO2_12 | UART | USART TX | ++---------+-----------------+----------------------------+ +| PIO2_16 | GPIO | GREEN LED | ++---------+-----------------+----------------------------+ +| PIO2_17 | GPIO | RED LED | ++---------+-----------------+----------------------------+ +| PIO2_18 | GPIO | BLUE_LED | ++---------+-----------------+----------------------------+ +| PIO0_4 | I2C | I2C SCL | ++---------+-----------------+----------------------------+ +| PIO0_5 | I2C | I2C SDA | ++---------+-----------------+----------------------------+ + + +Programming and Debugging +************************* + +Flashing +======== + +The LPCXpresso11U68 board can be flashed by using the on-board LPC-Link2 debug +probe (based on a NXP LPC43xx MCU). This MCU provides either a CMSIS-DAP or +a J-Link interface. It depends on the embedded firmware image. The default +OpenOCD configuration supports the the CMSIS-DAP interface. If you want to +switch to J-Link, then you need to edit the +``boards/arm/lpcxpresso11u68/support/openocd.cfg`` file and to replace:: + + source [find interface/cmsis-dap.cfg] + +with:: + + source [find interface/jlink.cfg] + +.. note:: + The firmware image of the LPC-Link2 can be updated using the + `LPCScrypt tool `_. + +.. note:: + The `Mbed project `_ also provides some firmware images + `here `_. + In addition to a CMSIS-DAP interface, they also provide a convenient update + mechanism through a pseudo USB disk. + +Here are the steps to flash a firmware you built into a LPCXpresso11U68 board: + +#. Connect the "Link" micro-B USB port to your host computer. +#. Next, simply run the ``west flash`` command + +Debugging +========= + +Please refer to the `Flashing`_ section and run the ``west debug`` command +instead of ``west flash``. + +References +********** + +- `LPC11UXX SoC Website`_ +- `LPC11U6X Datasheet`_ +- `LPC11U6X Reference Manual`_ +- `LPCXPRESSO11U68 Website`_ +- `LPCXPRESSO11U68 Schematics`_ + +.. _LPC11UXX SoC Website: + https://www.nxp.com/products/processors-and-microcontrollers/arm-microcontrollers/general-purpose-mcus/lpc1100-cortex-m0-plus-m0/scalable-entry-level-32-bit-microcontroller-mcu-based-on-arm-cortex-m0-plus-and-cortex-m0-cores:LPC11U00 + +.. _LPC11U6X Datasheet: + https://www.nxp.com/docs/en/data-sheet/LPC11U6X.pdf + +.. _LPC11U6x Reference Manual: + https://www.nxp.com/webapp/Download?colCode=UM10732 + +.. _LPCXPRESSO11U68 Website: + https://www.nxp.com/design/microcontrollers-developer-resources/lpc-microcontroller-utilities/lpcxpresso-board-for-lpc11u68:OM13058 + +.. _LPCXPRESSO11U68 Schematics: + https://www.nxp.com/downloads/en/schematics/LPC11U68_Xpresso_v2_Schematic_RevC_1.pdf diff --git a/boards/arm/lpcxpresso11u68/doc/lpcxpresso11u68.png b/boards/arm/lpcxpresso11u68/doc/lpcxpresso11u68.png new file mode 100644 index 0000000000000000000000000000000000000000..6c247f766de3e864c6ace9bd0b0ac52b12471010 GIT binary patch literal 53256 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 literal 0 HcmV?d00001 diff --git a/boards/arm/lpcxpresso11u68/lpcxpresso11u68.dts b/boards/arm/lpcxpresso11u68/lpcxpresso11u68.dts new file mode 100644 index 00000000000..7fcebd2fe74 --- /dev/null +++ b/boards/arm/lpcxpresso11u68/lpcxpresso11u68.dts @@ -0,0 +1,125 @@ +/* + * Copyright (c) 2020 Seagate Technology LLC + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/dts-v1/; + +#include +#include + +/ { + model = "NXP LPCXPRESSO11U68 board"; + compatible = "lpcxpresso11u68", "nxp,lpc"; + chosen { + zephyr,sram = &sram0; + zephyr,flash = &flash0; + zephyr,console = &uart4; + }; + + /* These aliases are provided for compatibility with samples. */ + aliases { + led0 = &led0; + led1 = &led1; + led2 = &led2; + sw0 = &isp_button; + sw1 = &wake_up_button; + eeprom-0 = &eeprom0; + }; + + gpio_keys { + compatible = "gpio-keys"; + isp_button: button_0 { + gpios = <&gpio0 1 GPIO_ACTIVE_HIGH>; + label = "ISP enable button"; + }; + wake_up_button: button_1 { + gpios = <&gpio0 16 GPIO_ACTIVE_HIGH>; + label = "Wake-up button"; + }; + }; + + leds { + compatible = "gpio-leds"; + led0: led_0 { + gpios = <&gpio2 16 GPIO_ACTIVE_LOW>; + label = "Green LED 0"; + }; + led1: led_1 { + gpios = <&gpio2 17 GPIO_ACTIVE_LOW>; + label = "Red LED 1"; + }; + led2: led_2 { + gpios = <&gpio2 18 GPIO_ACTIVE_LOW>; + label = "Blue LED 2"; + }; + }; + + arduino_header: connector { + compatible = "arduino-header-r3"; + #gpio-cells = <2>; + gpio-map-mask = <0xffffffff 0xffffffc0>; + gpio-map-pass-thru = <0 0x3f>; + gpio-map = <0 0 &gpio1 9 0>, /* A0 */ + <1 0 &gpio0 14 0>, /* A1 */ + <2 0 &gpio0 13 0>, /* A2 */ + <3 0 &gpio0 12 0>, /* A3 */ + <4 0 &gpio0 23 0>, /* A4 */ + <5 0 &gpio0 11 0>, /* A5 */ + <6 0 &gpio2 11 0>, /* D0 */ + <7 0 &gpio2 12 0>, /* D1 */ + <8 0 &gpio1 18 0>, /* D2 */ + <9 0 &gpio1 24 0>, /* D3 */ + <10 0 &gpio1 19 0>, /* D4 */ + <11 0 &gpio1 26 0>, /* D5 */ + <12 0 &gpio1 27 0>, /* D6 */ + <13 0 &gpio1 25 0>, /* D7 */ + <14 0 &gpio1 28 0>, /* D8 */ + <15 0 &gpio2 3 0>, /* D9 */ + <16 0 &gpio0 2 0>, /* D10 */ + <17 0 &gpio0 9 0>, /* D11 */ + <18 0 &gpio0 9 0>, /* D12 */ + <19 0 &gpio1 29 0>, /* D13 */ + <20 0 &gpio0 5 0>, /* D14 */ + <21 0 &gpio0 4 0>; /* D15 */ + }; + +}; + +&uart0 { + pinmuxs = <&pinmux1 26 IOCON_FUNC2>, <&pinmux1 27 IOCON_FUNC2>; + pinmux-names = "RXD", "TXD"; + current-speed = <115200>; + status = "okay"; +}; + +arduino_serial: &uart4 { + pinmuxs = <&pinmux2 11 IOCON_FUNC1>, <&pinmux2 12 IOCON_FUNC1>; + pinmux-names = "RXD", "TXD"; + current-speed = <115200>; + status = "okay"; +}; + +arduino_i2c: &i2c0 { + pinmuxs = <&pinmux0 4 IOCON_FUNC1>, + <&pinmux0 5 IOCON_FUNC1>; + pinmux-names = "SCL", "SDA"; + status = "okay"; +}; + +&cpu0 { + clock-frequency = <48000000>; +}; + +&gpio0 { + status = "okay"; +}; + +&gpio1 { + status = "okay"; +}; + +&gpio2 { + status = "okay"; +}; diff --git a/boards/arm/lpcxpresso11u68/lpcxpresso11u68.yaml b/boards/arm/lpcxpresso11u68/lpcxpresso11u68.yaml new file mode 100644 index 00000000000..dd8b3e681bd --- /dev/null +++ b/boards/arm/lpcxpresso11u68/lpcxpresso11u68.yaml @@ -0,0 +1,13 @@ +identifier: lpcxpresso11u68 +name: NXP LPCxpresso 11U68 +type: mcu +arch: arm +toolchain: + - zephyr +supported: + - clock_controller + - pinmux + - gpio + - i2c + - serial + - eeprom diff --git a/boards/arm/lpcxpresso11u68/lpcxpresso11u68_defconfig b/boards/arm/lpcxpresso11u68/lpcxpresso11u68_defconfig new file mode 100644 index 00000000000..70ed07a2178 --- /dev/null +++ b/boards/arm/lpcxpresso11u68/lpcxpresso11u68_defconfig @@ -0,0 +1,18 @@ +CONFIG_UART_INTERRUPT_DRIVEN=y +CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC=48000000 +CONFIG_GPIO=y +CONFIG_CORTEX_M_SYSTICK=y +CONFIG_SOC_SERIES_LPC11U6X=y +# Since the board has little memory (32k), stack sizes are lowered +# so that the application has more RAM for itself. +CONFIG_MAIN_STACK_SIZE=512 +CONFIG_ISR_STACK_SIZE=768 +CONFIG_CONSOLE=y +CONFIG_UART_CONSOLE=y +CONFIG_SERIAL=y +CONFIG_GPIO_LPC11U6X=y +CONFIG_CLOCK_CONTROL_LPC11U6X_ENABLE_SRAM1=y +CONFIG_CLOCK_CONTROL_LPC11U6X_ENABLE_USB_RAM=y +CONFIG_CLOCK_CONTROL_LPC11U6X_PLL_SRC_SYSOSC=y +CONFIG_EEPROM=y +CONFIG_EEPROM_LPC11U6X=y diff --git a/boards/arm/lpcxpresso11u68/pre_dt_board.cmake b/boards/arm/lpcxpresso11u68/pre_dt_board.cmake new file mode 100644 index 00000000000..d34042bb2c2 --- /dev/null +++ b/boards/arm/lpcxpresso11u68/pre_dt_board.cmake @@ -0,0 +1,5 @@ +# Copyright (c) 2019, NXP +# SPDX-License-Identifier: Apache-2.0 + +# Suppress DTC warnings due to all GPIO nodes sharing the same register address. +list(APPEND EXTRA_DTC_FLAGS "-Wno-simple_bus_reg") diff --git a/boards/arm/lpcxpresso11u68/support/openocd.cfg b/boards/arm/lpcxpresso11u68/support/openocd.cfg new file mode 100644 index 00000000000..3a59e2b51a5 --- /dev/null +++ b/boards/arm/lpcxpresso11u68/support/openocd.cfg @@ -0,0 +1,42 @@ +# +# NXP LPCXpresso11U68 (evaluation board OM13058) +# +# http://www.nxp.com/board/OM13058.html +# https://www.embeddedartists.com/products/lpc11u68-lpcxpresso/ +# https://os.mbed.com/platforms/LPCXpresso11U68/ +# + +# The on-board LPC-Link2 debug probe (based on a NXP LPC43xx MCU) provides +# either a CMSIS-DAP or a J-Link interface. It depends on the version of the +# embedded firmware. Uncomment the line corresponding to yours. +source [find interface/cmsis-dap.cfg] +# source [find interface/jlink.cfg] + +# NXP LPC11U68 Cortex-M0 with 256kB flash and 32kB + 4kB SRAM. +set WORKAREASIZE 0x5000 + +source [find target/lpc11xx.cfg] + +# This ensures that the interrupt vectors (0x0000-0x0200) are re-mapped to +# flash after the "reset halt" command. Else the load/verify functions won't +# work correctly. +# +# Table 8. System memory remap register (SYSMEMREMAP, address 0x40048000) bit +# description +# Bit Symbol Value Description +# 1:0 MAP System memory remap +# 0x0 Boot Loader Mode. Interrupt vectors are re-mapped to +# Boot ROM. +# 0x1 User RAM Mode. Interrupt vectors are re-mapped to +# Static RAM. +# 0x2 User Flash Mode. Interrupt vectors are not re-mapped +# and reside in Flash. +# 31:2 - - Reserved. +$_TARGETNAME configure -event reset-end { + mww 0x40048000 0x02 +} + +# Enable Zephyr thread awareness. +$_TARGETNAME configure -rtos Zephyr + +adapter_khz 100