e5dfd805e6
Add support for LPC40xx family chips * Corrected a few peripheral definitions and pin functions for the LPC17xx family. Added configuration options, chip definitions, and additional pin functions for the LPC40xx family. Added board configurations for Embedded Artists LPC4088 Quickstart board and LPC4088 Developer's kit. These configurations are still something of a work in progress. In particular, the LCD functionality is untested. * First pass rename in *.c and *.h files. * Renamed LPC17XX to LPC17XX_40XX in config files * Rplaced LPC17xx with LPC17xx/LPC40xx in .c files * Replaced LPC17xx with LPC17xx/LPC40xx in .h files * Updated some documentation * Working on moving directories * moved arch/arm/src/lpc17xx and arch/arm/include/lpc17xx to lpc17xx_40xx * Renamed LPC17_* constants / configuration options to LPC17_40_* * Updated chip family name defines * Renamed some chip-specific files * Updated references to renamed files * Updated references to lpc17_ to lpc17_40_ * Renamed source files from lpc17_* to lpc17_40_* * Clean up white space Approved-by: Gregory Nutt <gnutt@nuttx.org>
297 lines
11 KiB
Plaintext
297 lines
11 KiB
Plaintext
Architecture-Specific Code
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
Table of Contents
|
|
^^^^^^^^^^^^^^^^^
|
|
|
|
o Architecture-Specific Code
|
|
o Summary of Files
|
|
o Supported Architectures
|
|
o Configuring NuttX
|
|
|
|
Architecture-Specific Code
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
The NuttX configuration consists of:
|
|
|
|
o Processor architecture specific files. These are the files contained
|
|
in the arch/<arch-name>/ directory discussed in this README.
|
|
|
|
o Chip/SoC specific files. Each processor processor architecture
|
|
is embedded in chip or System-on-a-Chip (SoC) architecture. The
|
|
full chip architecture includes the processor architecture plus
|
|
chip-specific interrupt logic, general purpose I/O (GIO) logic, and
|
|
specialized, internal peripherals (such as UARTs, USB, etc.).
|
|
|
|
These chip-specific files are contained within chip-specific
|
|
sub-directories in the arch/<arch-name>/ directory and are selected
|
|
via the CONFIG_ARCH_name selection
|
|
|
|
o Board specific files. In order to be usable, the chip must be
|
|
contained in a board environment. The board configuration defines
|
|
additional properties of the board including such things as
|
|
peripheral LEDs, external peripherals (such as network, USB, etc.).
|
|
|
|
These board-specific configuration files can be found in the
|
|
configs/<board-name>/ sub-directories.
|
|
|
|
This README will address the processor architecture specific files
|
|
that are contained in the arch/<arch-name>/ directory. The file
|
|
include/nuttx/arch.h identifies all of the APIs that must
|
|
be provided by this architecture specific logic. (It also includes
|
|
arch/<arch-name>/arch.h as described below).
|
|
|
|
Directory Structure
|
|
^^^^^^^^^^^^^^^^^^^
|
|
|
|
The arch/ directory contains architecture-specific logic. The complete
|
|
board port is defined by the architecture-specific code in this
|
|
directory plus the board-specific configurations in the config/
|
|
subdirectory. Each architecture must provide a subdirectory <arch-name>
|
|
under arch/ with the following characteristics:
|
|
|
|
|
|
<arch-name>/
|
|
|-- include/
|
|
| |--<chip-name>/
|
|
| | `-- (chip-specific header files)
|
|
| |--<other-chips>/
|
|
| |-- arch.h
|
|
| |-- irq.h
|
|
| `-- types.h
|
|
`-- src/
|
|
|--<chip-name>/
|
|
| `-- (chip-specific source files)
|
|
|--<other-chips>/
|
|
|-- Makefile
|
|
`-- (architecture-specific source files)
|
|
|
|
Summary of Files
|
|
^^^^^^^^^^^^^^^^
|
|
|
|
include/<chip-name>/
|
|
This sub-directory contains chip-specific header files.
|
|
|
|
include/arch.h
|
|
This is a hook for any architecture specific definitions that may
|
|
be needed by the system. It is included by include/nuttx/arch.h
|
|
|
|
include/types.h
|
|
This provides architecture/toolchain-specific definitions for
|
|
standard types. This file should typedef:
|
|
|
|
_int8_t, _uint8_t, _int16_t, _uint16_t, _int32_t, _uint32_t
|
|
|
|
and if the architecture supports 64-bit integers:
|
|
|
|
_int24_t, _uint24_t, _int64_t, _uint64_t
|
|
|
|
NOTE that these type names have a leading underscore character. This
|
|
file will be included(indirectly) by include/stdint.h and typedef'ed to
|
|
the final name without the underscore character. This roundabout way of
|
|
doings things allows the stdint.h to be removed from the include/
|
|
directory in the event that the user prefers to use the definitions
|
|
provided by their toolchain header files.
|
|
|
|
irqstate_t
|
|
|
|
Must be defined to the be the size required to hold the interrupt
|
|
enable/disable state.
|
|
|
|
This file will be included by include/sys/types.h and be made
|
|
available to all files.
|
|
|
|
include/irq.h
|
|
This file needs to define some architecture-specific functions (usually
|
|
inline if the compiler supports inlining) and structures. These include:
|
|
|
|
- struct xcptcontext. This structure represents the saved context
|
|
of a thread.
|
|
|
|
- irqstate_t up_irq_save(void) -- Used to disable all interrupts.
|
|
|
|
- void upirq_restore(irqstate_t flags) -- Used to restore interrupt
|
|
enables to the same state as before up_irq_save was called.
|
|
|
|
NOTE: These interfaces are not available to application code but can
|
|
only be used within the operating system code. And, in general,
|
|
these functions should *never* be called directly, not unless you
|
|
know absolutely well what you are doing. Rather you shoudl typically
|
|
use the wrapper functions enter_critical_section() and leave_critical_section()
|
|
as prototyped in include/nuttx/irq.h.
|
|
|
|
This file must also define NR_IRQS, the total number of IRQs supported
|
|
by the board.
|
|
|
|
src/<chip-name>/
|
|
This sub-directory contains chip-specific source files.
|
|
|
|
src/Makefile
|
|
This makefile will be executed to build the targets src/libup.a and
|
|
src/up_head.o. The up_head.o file holds the entry point into the system
|
|
(power-on reset entry point, for example). It will be used in
|
|
the final link with libup.a and other system archives to generate the
|
|
final executable.
|
|
|
|
Supported Architectures
|
|
^^^^^^^^^^^^^^^^^^^^^^^
|
|
NOTE: nuttx/Documentation/NuttX.html for current information about the
|
|
state of these MCU ports.
|
|
|
|
arch/sim - Linux/Cygwin simulation
|
|
A user-mode port of NuttX to the x86 Linux platform is available.
|
|
The purpose of this port is primarily to support OS feature development.
|
|
This port does not support interrupts or a real timer (and hence no
|
|
round robin scheduler) Otherwise, it is complete.
|
|
|
|
arch/arm - ARM-based micro-controllers
|
|
This directory holds common ARM architectures. At present, this includes
|
|
the following subdirectories:
|
|
|
|
Architecture Support
|
|
arch/arm/include and arch/arm/src/common
|
|
arch/arm/src/arm and arch/arm/include/arm
|
|
arch/arm/src/armv7-a and arch/arm/include/armv6-m
|
|
arch/arm/src/armv7-a and arch/arm/include/armv7-a
|
|
arch/arm/src/armv7-m and arch/arm/include/armv7-m
|
|
arch/arm/src/armv7-r and arch/arm/include/armv7-r
|
|
|
|
MCU support
|
|
arch/arm/include/a1x and arch/arm/src/a1x
|
|
arch/arm/include/am335x and arch/arm/src/am335x
|
|
arch/arm/include/c5471 and arch/arm/src/c5471
|
|
arch/arm/include/dm320 and arch/arm/src/dm320
|
|
arch/arm/include/efm32 and arch/arm/src/efm32
|
|
arch/arm/include/imx1 and arch/arm/src/imx1
|
|
arch/arm/include/imx6 and arch/arm/src/imx6
|
|
arch/arm/include/imx6 and arch/arm/src/imrt
|
|
arch/arm/include/kinetis and arch/arm/src/kinetis
|
|
arch/arm/include/kl and arch/arm/src/kl
|
|
arch/arm/include/lpc11xx and arch/arm/src/lc823450
|
|
arch/arm/include/lpc11xx and arch/arm/src/lpc11xx
|
|
arch/arm/include/lpc17xx_40xx and arch/arm/src/lpc17xx_40xx
|
|
arch/arm/include/lpc214x and arch/arm/src/lpc214x
|
|
arch/arm/include/lpc2378 and arch/arm/src/lpc2378.
|
|
arch/arm/include/lpc31xx and arch/arm/src/lpc31xx
|
|
arch/arm/include/lpc43xx and arch/arm/src/lpc43xx
|
|
arch/arm/include/lpc43xx and arch/arm/src/lpc54xx
|
|
arch/arm/include/lpc43xx and arch/arm/src/max236xx
|
|
arch/arm/include/moxart and arch/arm/src/moxart
|
|
arch/arm/include/nuc1xx and arch/arm/src/nrf52
|
|
arch/arm/include/nuc1xx and arch/arm/src/nuc1xx
|
|
arch/arm/include/sam34 and arch/arm/src/sam34
|
|
arch/arm/include/sama45 and arch/arm/src/sama5
|
|
arch/arm/include/samd2l2 and arch/arm/src/samd2l2
|
|
arch/arm/include/samd2l2 and arch/arm/src/samd5e5
|
|
arch/arm/include/samv7 and arch/arm/src/samv7
|
|
arch/arm/include/stm32 and arch/arm/src/stm32
|
|
arch/arm/include/stm32f7 and arch/arm/src/stm32f0
|
|
arch/arm/include/stm32f7 and arch/arm/src/stm32f7
|
|
arch/arm/include/stm32l4 and arch/arm/src/stm32h7
|
|
arch/arm/include/stm32l4 and arch/arm/src/stm32l4
|
|
arch/arm/include/str71x and arch/arm/src/str71x
|
|
arch/arm/include/tiva and arch/arm/src/tiva
|
|
arch/arm/include/tms570 and arch/arm/src/tms570
|
|
arch/arm/include/tms570 and arch/arm/src/xmc4
|
|
|
|
arch/avr
|
|
This directory is dedicated to ports to the Atmel AVR (8-bit) and AVR32 (32-bit)
|
|
MCU families. STATUS: Under development.
|
|
|
|
Architecture Support
|
|
arch/avr/include/avr and arch/avr/src/avr
|
|
arch/avr/include/avr32 and arch/avr/src/avr32
|
|
|
|
MCU support
|
|
arch/avr/include/atmega and arch/avr/src/atmega
|
|
arch/avr/include/at90usb and arch/avr/src/at90usb
|
|
arch/avr/include/at32uc3 and arch/avr/src/at32uc3
|
|
|
|
arch/hc
|
|
This directory is dedicated to ports to the Freescale HC family.
|
|
|
|
arch/arm/include/m9s12 and arch/arm/src/m9s12
|
|
|
|
arch/mips
|
|
This directory is dedicated to ports to the MIPS family.
|
|
|
|
Architecture Support
|
|
arch/mips/include/mips32 and arch/mips/src/mips32
|
|
|
|
MCU support
|
|
arch/mips/include/pic32mx and arch/mips/src/pic32mx
|
|
arch/mips/include/pic32mz and arch/mips/src/pic32mz
|
|
|
|
arch/renesas - Support for Renesas and legacy Hitachi microcontrollers.
|
|
This include SuperH and M16C.
|
|
|
|
Architecture Support
|
|
arch/renesas/include and arch/renesas/src/common
|
|
|
|
MCU support
|
|
arch/renesas/include/m16c and arch/renesas/src/m16c
|
|
arch/renesas/include/sh1 and arch/renesas/src/sh1
|
|
|
|
arch/or1k
|
|
This directory is dedicated to ports to OpenRISC architectures.
|
|
|
|
arch/or1k/include/mor1k and arch/or1k/src/mor1k
|
|
|
|
arch/risc-v
|
|
This directory is dedicated to ports to the RISC-V family.
|
|
|
|
Architecture Support
|
|
arch/risc-v/include/rv32im
|
|
|
|
MCU support
|
|
arch/risc-v/include/gap8
|
|
arch/risc-v/include/nr5m100
|
|
|
|
arch/x86 - Intel x86 architectures
|
|
This directory holds related, 32- and 64-bit architectures from Intel.
|
|
At present, this includes the following subdirectories:
|
|
|
|
Architecture Support
|
|
arch/x86/include and arch/x86/src/common
|
|
|
|
MCU support
|
|
arch/x86/include/i486 and arch/x86/src/i486
|
|
arch/x86/include/qemu and arch/x86/src/qemu
|
|
|
|
arch/xtensa
|
|
|
|
Implementations based on the Cadence® Tensilica® Xtensa® processors,
|
|
such as the Xtensa LX6 dataplane processing units (DPUs). At
|
|
present, this includes the following subdirectories:
|
|
|
|
Common XTENSA support:
|
|
arch/xtensa/include and arch/xtensa/src/common
|
|
|
|
LX6 DPU support:
|
|
arch/xtensa/include/lx6 and arch/xtensa/xtensa/lx6
|
|
|
|
Expressif ESP32 implemenation of the LX6 DPU:
|
|
arch/xtensa/include/esp32 and arch/xtensa/xtensa/esp32
|
|
|
|
arch/z16 - ZiLOG 16-bit processors
|
|
This directory holds related, 16-bit architectures from ZiLOG. At
|
|
present, this includes the following subdirectories:
|
|
|
|
Architecture Support
|
|
arch/z16/include and arch/z16/src/common
|
|
|
|
MCU support
|
|
arch/z16/include/z16f and arch/z16/src/z16f
|
|
|
|
arch/z80 - ZiLOG 8-bit microcontrollers
|
|
This directory holds related, 8-bit architectures from ZiLOG. At
|
|
present, this includes the following subdirectories:
|
|
|
|
Architecture Support
|
|
arch/z80/include and arch/z80/src/common
|
|
|
|
MCU support
|
|
arch/z80/include/ez80 and arch/z80/src/ez80
|
|
arch/z80/include/z80 and arch/z80/src/z180
|
|
arch/z80/include/z8 and arch/z80/src/z8
|
|
arch/z80/include/z80 and arch/z80/src/z80
|