801b9d6e5f
Remove support for the Codesourcery, Atollic, DevKitArm, Raisonance, and CodeRed toolchains. Not only are these tools old and no longer used but they are all equivalent to standard ARM EABI toolchains. Retaining specific support has no effect (they are still supported, but now just as generic EABI toolchains).
337 lines
10 KiB
Plaintext
337 lines
10 KiB
Plaintext
README
|
|
^^^^^^
|
|
|
|
This README discusses issues unique to NuttX configurations for the
|
|
MCU-123 LPC2148 development board.
|
|
|
|
Contents
|
|
--------
|
|
|
|
o Development Environment
|
|
o GNU Toolchain Options
|
|
o NuttX buildroot Toolchain
|
|
o Flash Tools
|
|
- In System Programming (ISP) Mode
|
|
- LPC21ISP (Linux)
|
|
- FlashMagic (Windows/MAC)
|
|
- OpenOCD
|
|
o ARM/LPC214X-specific Configuration Options
|
|
o Configurations
|
|
|
|
Development Environment
|
|
^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
Either Linux or Cygwin on Windows can be used for the development environment.
|
|
The source has been built only using the GNU toolchain (see below). Other
|
|
toolchains will likely cause problems.
|
|
|
|
GNU Toolchain Options
|
|
^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
The NuttX make system has been modified to support the following different
|
|
toolchain options.
|
|
|
|
1. The NuttX buildroot Toolchain (see below), or
|
|
2. The GNU EABI toolchain,
|
|
|
|
All testing has been conducted using the NuttX buildroot toolchain. To use
|
|
the CodeSourcery or devkitARM GNU toolchain, you simply need to build the
|
|
system as follows:
|
|
|
|
make # Will build for the NuttX buildroot toolchain
|
|
make CROSSDEV=arm-eabi- # Will build for the devkitARM toolchain
|
|
make CROSSDEV=arm-none-eabi- # Will build for the ARM EABI toolchain
|
|
make CROSSDEV=arm-nuttx-elf- # Will build for the NuttX buildroot toolchain
|
|
|
|
Of course, hard coding this CROSS_COMPILE value in Make.defs file will save
|
|
some repetitive typing.
|
|
|
|
NuttX buildroot Toolchain
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
A GNU GCC-based toolchain is assumed. The PATH environment variable should
|
|
be modified to point to the correct path to the Cortex-M3 GCC toolchain (if
|
|
different from the default in your PATH variable).
|
|
|
|
If you have no Cortex-M3 toolchain, one can be downloaded from the NuttX
|
|
Bitbucket download site (https://bitbucket.org/nuttx/buildroot/downloads/).
|
|
This GNU toolchain builds and executes in the Linux or Cygwin environment.
|
|
|
|
1. You must have already configured Nuttx in <some-dir>/nuttx.
|
|
|
|
tools/configure.sh eagle100:<sub-dir>
|
|
|
|
2. Download the latest buildroot package into <some-dir>
|
|
|
|
3. unpack the buildroot tarball. The resulting directory may
|
|
have versioning information on it like buildroot-x.y.z. If so,
|
|
rename <some-dir>/buildroot-x.y.z to <some-dir>/buildroot.
|
|
|
|
4. cd <some-dir>/buildroot
|
|
|
|
5. cp boards/arm7tdmi-defconfig-4.3.3 .config
|
|
|
|
6. make oldconfig
|
|
|
|
7. make
|
|
|
|
8. Make sure that the PATH variable includes the path to the newly built
|
|
binaries.
|
|
|
|
See the file boards/README.txt in the buildroot source tree. That has more
|
|
detailed PLUS some special instructions that you will need to follow if you are
|
|
building a Cortex-M3 toolchain for Cygwin under Windows.
|
|
|
|
Flash Tools
|
|
^^^^^^^^^^^
|
|
|
|
In System Programming (ISP) Mode
|
|
--------------------------------
|
|
|
|
1. Make sure you exit minicom (or whatever terminal emulator you are
|
|
using). It will interfere with the download.
|
|
|
|
2. On the MCU123 board, I need to put a jumper on JP3-INT. On that board,
|
|
JP3-INT is connected to P0.14 of LPC214x. When P0.14 is low and RTS is
|
|
changed from high to low, the LPC214x will enter ISP (In System
|
|
Programming) state.
|
|
|
|
J2-RST: When J2 is shorted, the reset pin of CPU is controlled by
|
|
the DTR signal of UART0. Short J2 to enable ISP automatic download.
|
|
|
|
Alternatively, you can just press the INT1 button while resetting.
|
|
The LEDs will be off if the LPC2148 successfully enters ISP mode.
|
|
|
|
Resetting the board will enter ISP mode when the jumper is connected.
|
|
|
|
LPC21ISP (Linux)
|
|
----------------
|
|
|
|
(ca. 2008)
|
|
I use the lpc21isp tool to load NuttX into FLASH. In the older version
|
|
1.60 of lpc21isp for Linux, I had to make several changes. This changesi
|
|
are shown in lpc21ips-1.60.diff.
|
|
|
|
I use the script lpc21isp.sh to perform the actual download. You will
|
|
probably have to make some changes to this script in order to use it.
|
|
For example, the path to the built lpc21isp binary will most likely
|
|
have to change. Then move this script to the top level NuttX
|
|
directory and simply execute it to load NuttX onto the board (after
|
|
entering ISP mode).
|
|
|
|
Here are the detailed steps I use:
|
|
|
|
1. Setup ISP (In System Programming) mode (see above).
|
|
|
|
3. Start lpc21isp.sh
|
|
|
|
4. Reset the board to
|
|
|
|
FlashMagic (Windows/MAC)
|
|
------------------------
|
|
|
|
(ca. 2012)
|
|
You download FlashMagic for Windows or MAC here: http://www.flashmagictool.com
|
|
|
|
1. Setup ISP (In System Programming) mode (see above).
|
|
|
|
2. Start FlashMagic and setup communication parameters.
|
|
|
|
Device: LPC2148
|
|
COM Port: (will vary with PC)
|
|
Baud: 38400 (I am sure it can go faster).
|
|
Interface: None (ISP)
|
|
Oscillator (MHz): 12
|
|
|
|
Check "Erase all Flash+Code Rd Prot"
|
|
|
|
3. Select the nuttx.hex file
|
|
|
|
4. Options: Verify after programming
|
|
|
|
5. Start and reset the board to entry ISP mode. Or hold the INT1
|
|
button down after reset after you press start.
|
|
|
|
NOTE: FlashMagic will complain if the data section overlaps
|
|
0x4000000-0x400001ff.
|
|
|
|
OpenOCD
|
|
-------
|
|
|
|
I have the (really old) Olimex software installed at C:/gccfd. Under
|
|
Cygwin, I can do the following:
|
|
|
|
1. Create a .cfg file:
|
|
|
|
$ cat /cygdrive/c/gccfd/openocd/lib/openocd/interface/arm-usb-ocd.cfg /cygdrive/c/gccfd/openocd/lib/openocd/target/lpc2148.cfg > lpc2148.cfg
|
|
|
|
2. Start OpenOCD:
|
|
|
|
/cygdrive/c/gccfd/openocd/bin/openocd-ftd2xx.exe -f lpc2148.cfg -s . &
|
|
|
|
3. Start arm-*-gdb (whichever GDB your toolchain uses).
|
|
|
|
ARM/LPC214X-specific Configuration Options
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
CONFIG_ARCH - Identifies the arch/ subdirectory. This should
|
|
be set to:
|
|
|
|
CONFIG_ARCH=arm
|
|
|
|
CONFIG_ARCH_family - For use in C code:
|
|
|
|
CONFIG_ARCH_ARM=y
|
|
|
|
CONFIG_ARCH_architecture - For use in C code:
|
|
|
|
CONFIG_ARCH_ARM7TDMI=y
|
|
|
|
CONFIG_ARCH_CHIP - Identifies the arch/*/chip subdirectory
|
|
|
|
CONFIG_ARCH_CHIP=lpc214x
|
|
|
|
CONFIG_ARCH_CHIP_name - For use in C code
|
|
|
|
CONFIG_ARCH_CHIP_LPC214X
|
|
|
|
CONFIG_ARCH_BOARD - Identifies the boards/ subdirectory and
|
|
hence, the board that supports the particular chip or SoC.
|
|
|
|
CONFIG_ARCH_BOARD=mcu123-lpc214x
|
|
|
|
CONFIG_ARCH_BOARD_name - For use in C code
|
|
|
|
CONFIG_ARCH_BOARD_MCU123_LPC214X (for theMCU123 LPC214x board)
|
|
|
|
CONFIG_ARCH_LOOPSPERMSEC - Must be calibrated for correct operation
|
|
of delay loops
|
|
|
|
CONFIG_ENDIAN_BIG - define if big endian (default is little
|
|
endian)
|
|
|
|
CONFIG_RAM_SIZE - Describes the installed RAM.
|
|
|
|
CONFIG_RAM_START - The start address of installed RAM
|
|
|
|
CONFIG_ARCH_LEDS - Use LEDs to show state. Unique to boards that
|
|
have LEDs
|
|
|
|
CONFIG_ARCH_INTERRUPTSTACK - This architecture supports an interrupt
|
|
stack. If defined, this symbol is the size of the interrupt
|
|
stack in bytes. If not defined, the user task stacks will be
|
|
used during interrupt handling.
|
|
|
|
CONFIG_ARCH_STACKDUMP - Do stack dumps after assertions
|
|
|
|
LPC2148 specific chip initialization
|
|
|
|
These provide register setup values:
|
|
CONFIG_EXTMEM_MODE, CONFIG_RAM_MODE, CONFIG_CODE_BASE, CONFIG_PLL_SETUP,
|
|
CONFIG_MAM_SETUP, CONFIG_APBDIV_SETUP, CONFIG_EMC_SETUP, CONFIG_BCFG0_SETUP,
|
|
CONFIG_BCFG1_SETUP, CONFIG_BCFG2_SETUP, CONFIG_BCFG3_SETUP, CONFIG_ADC_SETUP
|
|
|
|
CONFIG_LPC214x_FIO - Enable fast GPIO (vs. legacy, "old" GPIO).
|
|
|
|
LPC214X specific device driver settings
|
|
|
|
CONFIG_UARTn_SERIAL_CONSOLE - selects the UARTn for the
|
|
console and ttys0 (default is the UART0).
|
|
|
|
CONFIG_UARTn_RXBUFSIZE - Characters are buffered as received.
|
|
This specific the size of the receive buffer
|
|
|
|
CONFIG_UARTn_TXBUFSIZE - Characters are buffered before
|
|
being sent. This specific the size of the transmit buffer
|
|
|
|
CONFIG_UARTn_BAUD - The configure BAUD of the UART.
|
|
|
|
CONFIG_UARTn_BITS - The number of bits. Must be either 7 or 8.
|
|
|
|
CONFIG_UARTn_PARTIY - 0=no parity, 1=odd parity, 2=even parity, 3=mark 1, 4=space 0
|
|
|
|
CONFIG_UARTn_2STOP - Two stop bits
|
|
|
|
LPC214X USB Configuration
|
|
|
|
CONFIG_LPC214X_USBDEV_FRAME_INTERRUPT
|
|
Handle USB Start-Of-Frame events.
|
|
Enable reading SOF from interrupt handler vs. simply reading on demand.
|
|
Probably a bad idea... Unless there is some issue with sampling the SOF
|
|
from hardware asynchronously.
|
|
|
|
CONFIG_LPC214X_USBDEV_EPFAST_INTERRUPT
|
|
Enable high priority interrupts. I have no idea why you might want to
|
|
do that
|
|
|
|
CONFIG_LPC214X_USBDEV_NDMADESCRIPTORS
|
|
Number of DMA descriptors to allocate in the 8Kb USB RAM. This is a
|
|
tradeoff between the number of DMA channels that can be supported vs
|
|
the size of the DMA buffers available.
|
|
|
|
CONFIG_LPC214X_USBDEV_DMA
|
|
Enable lpc214x-specific DMA support
|
|
|
|
Configurations
|
|
^^^^^^^^^^^^^^
|
|
|
|
1. Each NXP LPC214x configuration is maintained in a sub-directory and
|
|
can be selected as follow:
|
|
|
|
tools/configure.sh mcu123-lpc214x:<subdir>
|
|
|
|
Where <subdir> is one of the configuration sub-directories described in
|
|
the following paragraph.
|
|
|
|
2. These configurations use the mconf-based configuration tool. To
|
|
change a configurations using that tool, you should:
|
|
|
|
a. Build and install the kconfig-mconf tool. See nuttx/README.txt
|
|
see additional README.txt files in the NuttX tools repository.
|
|
|
|
b. Execute 'make menuconfig' in nuttx/ in order to start the
|
|
reconfiguration process.
|
|
|
|
3. By default, all configurations assume the NuttX Buildroot toolchain
|
|
under Linux (should work under Windows with Cygwin as well). This
|
|
is easily reconfigured:
|
|
|
|
CONFIG_HOST_LINUX=y
|
|
CONFIG_ARM_TOOLCHAIN_BUILDROOT=y
|
|
|
|
composite:
|
|
----------
|
|
|
|
A simple test of the USB Composite Device (see
|
|
apps/examples/README.txt and apps/system/composite)
|
|
|
|
NOTE: I could not get this to work! Perhaps this is a consequence of the
|
|
last USB driver checking (r4359). But backing this change out did not fix
|
|
the configuration.
|
|
|
|
nsh:
|
|
----
|
|
|
|
Configures the NuttShell (nsh) located at examples/nsh. The
|
|
Configuration enables only the serial NSH interfaces.
|
|
|
|
usbserial:
|
|
----------
|
|
|
|
This configuration directory exercises the USB serial class
|
|
driver at examples/usbserial. See examples/README.txt for
|
|
more information.
|
|
|
|
NOTE: If you have problems with this configuration, perhaps it is a
|
|
consequence of the last USB driver checking (r4359)
|
|
|
|
usbmsc:
|
|
-------
|
|
|
|
This configuration directory exercises the USB mass storage
|
|
class driver at system/usbmsc. See examples/README.txt for
|
|
more information.
|
|
|
|
NOTE: If you have problems with this configuration, perhaps it is a
|
|
consequence of the last USB driver checking (r4359)
|