nuttx/configs/teensy-3.1
2015-06-09 07:03:25 -06:00
..
README.txt Update/add README.txt files 2015-06-09 07:03:25 -06:00

README
======

  This is a README file for the port of NuttX to the Teensy-3.1 from PJRC
  (https://www.pjrc.com/).  The Teensy-3.1 features the Freescale
  MK30DX256VLH7 chip (now NXP).  The MK30DX256VLH7 is a 64-pin Cortex-M4
  running at 72MHz.  It has 256KiB of program FLASH memory and 64KiB of
  SRAM.  For more information about the Teensy 3.1, see
  
    https://www.pjrc.com/teensy/teensy31.html
    https://www.pjrc.com/store/teensy31.html

Contents
========

  o STATUS
  o Pin Configuration
  o Serial Console
  o LEDs
  o Using the Halfkey Loader
  o Teensy-3.1 Configuration settings
  o Configurations

STATUS
======

  2005-08-08:
    At present, this README is merely a placeholder for a planned port of
    NuttX to the Teensy-3.1

Pin Configuration
=================

  Nearly all pins are available to the user.  The few port pins used on
  board are listed below:

    ----- --------------------------------------
    P0RT  BOARD USAGE
    ----- --------------------------------------
    PTA0  MINI54TAN / Bootloader
    PTA1  MINI54TAN / Bootloader
    PTA2  MINI54TAN / Bootloader
    PTA3  MINI54TAN / Bootloader
    PTA18 16MHz XTAL  (XTAL32 is not populated).
    PTA19 16MHz XTAL
    PTB1  MINI54TAN / Bootloader
    PTB2  MINI54TAN / Bootloader
    PTC5  LED
    ----- --------------------------------------

Serial Console
==============

  The K20 has three UARTs with pin availability as follows:

    --------- ------ ----------- -------------------------
    UART      PORT   BOARD       PJRC PINOUT DESCRIPTION
    FUNCTION         LABEL
    --------- ------ ----------- -------------------------
    UART0_RX  PTA1   (See above) MINI54TAN / Bootloader
              PTB16  Pin 0       RX1 / Touch
              PTD6   Pin 21 / A7 RX1 / CS / PWM
    UART0_TX  PTA2   (See above) MINI54TAN / Bootloader
              PTB17  Pin 1       TX1 / Touch
              PTD7   Pin 5       TX1 / PWM
    --------- ------ ----------- -------------------------
    UART1_RX  PTC3   Pin 9       RX2 / CS / PWM
              PTE1   Pad 26      (Pad on back of board)
    UART1_TX  PTC4   Pin 10      TX2 / CS / PWM
              PTE0   Pad 31      (Pad on back of board)
    --------- ------ ----------- -------------------------
    UART2_RX  PTD2   Pin 7       RX3 / DOUT
    UART2_TX  PTD3   Pin 8       TX3 / DIN
    --------- ------ ----------- -------------------------

  The default serial console is UART0 on pins 0 (RX) and 1 (TX).

LEDs
====

  A single LED is available driven by PTC5.  The LED is grounded
  so bringing PTC5 high will illuminate the LED.

  When CONFIG_ARCH_LEDS is defined in the NuttX configuration, NuttX will
  control the LED as follows:

    SYMBOL              Meaning                 LED
    ------------------- ----------------------- ------
    LED_STARTED         NuttX has been started  OFF
    LED_HEAPALLOCATE    Heap has been allocated OFF
    LED_IRQSENABLED     Interrupts enabled      OFF
    LED_STACKCREATED    Idle stack created      ON
    LED_INIRQ           In an interrupt         N/C
    LED_SIGNAL          In a signal handler     N/C
    LED_ASSERTION       An assertion failed     N/C
    LED_PANIC           The system has crashed  FLASH

  Thus is LED is statically on, NuttX has successfully  booted and is,
  apparently, running normally.  If LED is flashing at approximately
  2Hz, then a fatal error has been detected and the system has halted.

Using the Halfkey Loader
========================

  See https://www.pjrc.com/teensy/first_use.html
      https://www.pjrc.com/teensy/loader_cli.html

Teensy-3.1 Configuration settings
=================================

    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_CORTEXM4=y

    CONFIG_ARCH_CHIP - Identifies the arch/*/chip subdirectory

       CONFIG_ARCH_CHIP="kinetis"

    CONFIG_ARCH_CHIP_name - For use in C code to identify the exact
       chip:

       CONFIG_ARCH_CHIP_MK20DX256VLH7=y

    CONFIG_ARCH_BOARD - Identifies the configs subdirectory and
       hence, the board that supports the particular chip or SoC.

       CONFIG_ARCH_BOARD="teensy-3.1"

    CONFIG_ARCH_BOARD_name - For use in C code

       CONFIG_ARCH_BOARD_TEENSY_31=y

    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 DRAM (SRAM in this case):

       CONFIG_RAM_SIZE=0x00008000 (32Kb)

    CONFIG_RAM_START - The start address of installed DRAM

       CONFIG_RAM_START=0x20000000

    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

    CONFIG_ARCH_CALIBRATION - Enables some build in instrumentation that
       cause a 100 second delay during boot-up.  This 100 second delay
       serves no purpose other than it allows you to calibrate
       CONFIG_ARCH_LOOPSPERMSEC.  You simply use a stop watch to measure
       the 100 second delay then adjust CONFIG_ARCH_LOOPSPERMSEC until
       the delay actually is 100 seconds.

  Individual subsystems can be enabled:

    To be provided

Configurations
==============

  Common Configuration Information
  --------------------------------
  Each Teensy-3.1 configurations are maintained in sub-directories and
  can be selected as follow:

    cd tools
    ./configure.sh teensy-3.1/<subdir>
    cd -
    make oldconfig
    . ./setenv.sh

  Before sourcing the setenv.sh file above, you should examine it and
  perform edits as necessary so that TOOLCHAIN_BIN is the correct path to
  the directory than holds your toolchain binaries.

  If this is a Windows native build, then configure.bat should be used
  instead of configure.sh:

    configure.bat teensy-3.1\<subdir>

  And then build NuttX by simply typing the following.  At the conclusion of
  the make, the nuttx binary will reside in an ELF file called, simply,
  nuttx.

    make oldconfig
    make

  The <subdir> that is provided above as an argument to the
  tools/configure.sh must be is one of the directories listed below.

NOTES:

  1. These configurations use the mconf-based configuration tool.  To
     change any of these configurations using that tool, you should:

    a. Build and install the kconfig-mconf tool.  See nuttx/README.txt
       and misc/tools/

    b. Execute 'make menuconfig' in nuttx/ in order to start the
       reconfiguration process.

  2. Unless stated otherwise, all configurations generate console
     output on [To be provided].

  3. All of these configurations are set up to build under Windows using the
     "GNU Tools for ARM Embedded Processors" that is maintained by ARM
     (unless stated otherwise in the description of the configuration).

       https://launchpad.net/gcc-arm-embedded

     As of this writing (2015-03-11), full support is difficult to find
     for the Cortex-M&, but is supported by at least this realeasse of
     the ARM GNU tools:

       https://launchpadlibrarian.net/192228215/release.txt

     That toolchain selection can easily be reconfigured using
     'make menuconfig'.  Here are the relevant current settings:

     Build Setup:
       CONFIG_HOST_WINDOWS=y               : Window environment
       CONFIG_WINDOWS_CYGWIN=y             : Cywin under Windows

     System Type -> Toolchain:
       CONFIG_ARMV7M_TOOLCHAIN_GNU_EABIW=y : GNU ARM EABI toolchain

     NOTE: As of this writing, there are issues with using this tool at
     the -Os level of optimization.  This has not been proven to be a
     compiler issue (as least not one that might not be fixed with a
     well placed volatile qualifier).  However, in any event, it is
     recommend that you use not more that -O2 optimization.

  Configuration sub-directories
  -----------------------------

  nsh:

    Configures the NuttShell (nsh) located at apps/examples/nsh.

    NOTES:

    1. This configuration uses the mconf-based configuration tool.  To
       change this configuration using that tool, you should:

       a. Build and install the kconfig-mconf tool.  See nuttx/README.txt
          and misc/tools/

       b. Execute 'make menuconfig' in nuttx/ in order to start the
          reconfiguration process.

    2. By default, this configuration uses the CodeSourcery toolchain
       for Windows and builds under Cygwin (or probably MSYS).  That
       can easily be reconfigured, of course.

       CONFIG_HOST_WINDOWS=y                   : Builds under Windows
       CONFIG_WINDOWS_CYGWIN=y                 : Using Cygwin
       CONFIG_ARMV7M_TOOLCHAIN_CODESOURCERYW=y : CodeSourcery for Windows

 Support
    for  builtin applications is enabled, but in the base configuration
    no builtin applications are selected (see NOTES below).