Freedom K64F: Update README.txt; add proper (auto) LED support

This commit is contained in:
Gregory Nutt 2016-07-02 07:56:43 -06:00
parent 750659cc2b
commit 326be154ad
9 changed files with 280 additions and 887 deletions

View File

@ -208,8 +208,9 @@ config ARCH_BOARD_FREEDOM_K64F
select ARCH_HAVE_BUTTONS
select ARCH_HAVE_IRQBUTTONS
---help---
Kinetis K64 Cortex-M4 MCU. This port uses the FreeScale FREEDOM-K64F
development board.
This port uses the FreeScale FREEDOM-K64F development board. This
board uses the Kinetis K64 MK64FN1M0VLL12 Cortex-M4 MCU.
config ARCH_BOARD_FREEDOM_KL25Z
bool "Freescale Freedom KL25Z"

View File

@ -262,8 +262,8 @@ configs/fire-stm32v2
the boards are supported but only version 2 has been tested.
configs/freedom-k64f
Kinetis K64 Cortex-M4 MCU. This port uses the FreeScale FREEDOM-K64F
development board.
This port uses the FreeScale FREEDOM-K64F development board. This board
uses the Kinetis K64 MK64FN1M0VLL12 Cortex-M4 MCU.
configs/freedom-kl25z
configs/freedom-kl26z

View File

@ -4,283 +4,88 @@ README.txt
This is the README file for the port of NuttX to the Freescale Freedom-K64F
develoment board.
REVISIT: At present, this is just a clone of the TWR-K60N512 README file.
Contents
========
o Kinetis TWR-K60N512 Features
o Kinetis TWR-K60N512 Pin Configuration
- On-Board Connections
- Connections via the General Purpose Tower Plug-in (TWRPI) Socket
- Connections via the Tower Primary Connector Side A
- Connections via the Tower Primary Connector Side B
- TWR-SER Serial Board Connection
o LEDs
o Freedom K64F Features
o Serial Console
o LEDs and Buttons
o Development Environment
o GNU Toolchain Options
o IDEs
o NuttX EABI "buildroot" Toolchain
o NuttX OABI "buildroot" Toolchain
o NXFLAT Toolchain
Kinetis TWR-K60N512 Features:
=============================
o K60N512 in 144 MAPBGA, K60N512VMD100
o Capacitive Touch Pads
o Integrated, Open-Source JTAG
o SD Card Slot
o MMA7660 3-axis accelerometer
o Tower Plug-In (TWRPI) Socket for expansion (sensors, etc.)
o Touch TWRPI Socket adds support for various capacitive touch boards
(e.g. keypads, rotary dials, sliders, etc.)
o Tower connectivity for access to USB, Ethernet, RS232/RS485, CAN, SPI,
I²C, Flexbus, etc.
o Plus: Potentiometer, 4 LEDs, 2 pushbuttons, infrared port
The features of the FRDM-K64F hardware are as follows:
Kinetis TWR-K60N512 Pin Configuration
=====================================
- MK64FN1M0VLL12 MCU (120 MHz, 1 MB flash memory, 256 KB RAM, low-power,
crystal-less USB, and 100 LQFP)
- Dual role USB interface with micro-B USB connector
- RGB LED
- FXOS8700CQ - accelerometer and magnetometer
- Two user push buttons
- Flexible power supply option - OpenSDAv2 USB, K64 USB, and external
source
- Easy access to MCU input/output through Arduino R3TM compatible I/O
connectors
- Programmable OpenSDAv2 debug circuit supporting the CMSIS-DAP Interface
software that provides:
o Mass storage device (MSD) flash programming interface
o CMSIS-DAP debug interface over a driver-less USB HID connection
providing run-control debugging and compatibility with IDE tools
o Virtual serial port interface
o Open-source CMSIS-DAP software project: github.com/mbedmicro/CMSIS-DAP.
- Ethernet
- SDHC
- Add-on RF module: nRF24L01+ Nordic 2.4GHz Radio
- Add-on Bluetooth module: JY-MCU BT board V1.05 BT
On-Board Connections
-------------------- ------------------------- -------- -------------------
FEATURE CONNECTION PORT/PIN PIN FUNCTION
-------------------- ------------------------- -------- -------------------
OSJTAG USB-to-serial OSJTAG Bridge RX Data PTE9 UART5_RX
Bridge OSJTAG Bridge TX Data PTE8 UART5_TX
SD Card Slot SD Clock PTE2 SDHC0_DCLK
SD Command PTE3 SDHC0_CMD
SD Data0 PTE1 SDHC0_D0
SD Data1 PTE0 SDHC0_D1
SD Data2 PTE5 SDHC0_D2
SD Data3 PTE4 SDHC0_D3
SD Card Detect PTE28 PTE28
SD Write Protect PTE27 PTE27
Infrared Port IR Transmit PTD7 CMT_IRO
IR Receive PTC6 CMP0_IN0
Pushbuttons SW1 (IRQ0) PTA19 PTA19
SW2 (IRQ1) PTE26 PTE26
SW3 (RESET) RESET_b RESET_b
Touch Pads E1 / Touch PTA4 TSI0_CH5
E2 / Touch PTB3 TSI0_CH8
E3 / Touch PTB2 TSI0_CH7
E4 / Touch PTB16 TSI0_CH9
LEDs E1 / Orange LED PTA11 PTA11
E2 / Yellow LED PTA28 PTA28
E3 / Green LED PTA29 PTA29
E4 / Blue LED PTA10 PTA10
Potentiometer Potentiometer (R71) ? ADC1_DM1
Accelerometer I2C SDA PTD9 I2C0_SDA
I2C SCL PTD8 I2C0_SCL
IRQ PTD10 PTD10
Touch Pad / Segment Electrode 0 (J3 Pin 3) PTB0 TSI0_CH0
LCD TWRPI Socket Electrode 1 (J3 Pin 5) PTB1 TSI0_CH6
Electrode 2 (J3 Pin 7) PTB2 TSI0_CH7
Electrode 3 (J3 Pin 8) PTB3 TSI0_CH8
Electrode 4 (J3 Pin 9) PTC0 TSI0_CH13
Electrode 5 (J3 Pin 10) PTC1 TSI0_CH14
Electrode 6 (J3 Pin 11) PTC2 TSI0_CH15
Electrode 7 (J3 Pin 12) PTA4 TSI0_CH5
Electrode 8 (J3 Pin 13) PTB16 TSI0_CH9
Electrode 9 (J3 Pin 14) PTB17 TSI0_CH10
Electrode 10 (J3 Pin 15) PTB18 TSI0_CH11
Electrode 11 (J3 Pin 16) PTB19 TSI0_CH12
TWRPI ID0 (J3 Pin 17) ? ADC1_DP1
TWRPI ID1 (J3 Pin 18) ? ADC1_SE16
OpenSDAv2
=========
Connections via the General Purpose Tower Plug-in (TWRPI) Socket
-------------------- ------------------------- -------- -------------------
FEATURE CONNECTION PORT/PIN PIN FUNCTION
-------------------- ------------------------- -------- -------------------
General Purpose TWRPI AN0 (J4 Pin 8) ? ADC0_DP0/ADC1_DP3
TWRPI Socket TWRPI AN1 (J4 Pin 9) ? ADC0_DM0/ADC1_DM3
TWRPI AN2 (J4 Pin 12) ? ADC1_DP0/ADC0_DP3
TWRPI ID0 (J4 Pin 17) ? ADC0_DP1
TWRPI ID1 (J4 Pin 18) ? ADC0_DM1
TWRPI I2C SCL (J5 Pin 3) PTD8 I2C0_SCL
TWRPI I2C SDA (J5 Pin 4) PTD9 I2C0_SDA
TWRPI SPI MISO (J5 Pin 9) PTD14 SPI2_SIN
TWRPI SPI MOSI (J5 Pin 10) PTD13 SPI2_SOUT
TWRPI SPI SS (J5 Pin 11) PTD15 SPI2_PCS0
TWRPI SPI CLK (J5 Pin 12) PTD12 SPI2_SCK
TWRPI GPIO0 (J5 Pin 15) PTD10 PTD10
TWRPI GPIO1 (J5 Pin 16) PTB8 PTB8
TWRPI GPIO2 (J5 Pin 17) PTB9 PTB9
TWRPI GPIO3 (J5 Pin 18) PTA19 PTA19
TWRPI GPIO4 (J5 Pin 19) PTE26 PTE26
The FRDM-K64F platform features OpenSDAv2, the Freescale open-source
hardware embedded serial and debug adapter running an open-source
bootloader. This circuit offers several options for serial communication,
flash programming, and run-control debugging. OpenSDAv2 is an mbed
HDK-compatible debug interface preloaded with the open-source CMSIS-DAP
Interface firmware (mbed interface) for rapid prototyping and product
development.
The TWR-K60N512 features two expansion card-edge connectors that interface
to the Primary and Secondary Elevator boards in a Tower system. The Primary
Connector (comprised of sides A and B) is utilized by the TWR-K60N512 while
the Secondary Connector (comprised of sides C and D) only makes connections
to the GND pins.
Serial Console
==============
Connections via the Tower Primary Connector Side A
--- -------------------- --------------------------------
PIN NAME USAGE
--- -------------------- --------------------------------
A7 SCL0 PTD8
A8 SDA0 PTD9
A9 GPIO9 / CTS1 PTC19
A10 GPIO8 / SDHC_D2 PTE5
A11 GPIO7 / SD_WP_DET PTE27
A13 ETH_MDC PTB1
A14 ETH_MDIO PTB0
A16 ETH_RXDV PTA14
A19 ETH_RXD1 PTA12
A20 ETH_RXD0 PTA13
A21 SSI_MCLK PTE6
A22 SSI_BCLK PTE12
A23 SSI_FS PTE11
A24 SSI_RXD PTE7
A25 SSI_TXD PTE10
A27 AN3 PGA0_DP/ADC0_DP0/ADC1_DP3
A28 AN2 PGA0_DM/ADC0_DM0/ADC1_DM3
A29 AN1 PGA1_DP/ADC1_DP0/ADC0_DP3
A30 AN0 PGA1_DM/ADC1_DM0/ADC0_DM3
A33 TMR1 PTA9
A34 TMR0 PTA8
A35 GPIO6 PTB9
A37 PWM3 PTA6
A38 PWM2 PTC3
A39 PWM1 PTC2
A40 PWM0 PTC1
A41 RXD0 PTE25
A42 TXD0 PTE24
A43 RXD1 PTC16
A44 TXD1 PTC17
A64 CLKOUT0 PTC3
A66 EBI_AD14 PTC0
A67 EBI_AD13 PTC1
A68 EBI_AD12 PTC2
A69 EBI_AD11 PTC4
A70 EBI_AD10 PTC5
A71 EBI_AD9 PTC6
A71 EBI_R/W_b PTC11
A72 EBI_AD8 PTC7
A73 EBI_AD7 PTC8
A74 EBI_AD6 PTC9
A75 EBI_AD5 PTC10
A76 EBI_AD4 PTD2
A77 EBI_AD3 PTD3
A78 EBI_AD2 PTD4
A79 EBI_AD1 PTD5
A80 EBI_AD0 PTD6
The primary serial port interface signals are PTB16 UART1_RX and PTB17
UART1_TX. These signals are connected to the OpenSDAv2 circuit.
Connections via the Tower Primary Connector Side B
--- -------------------- --------------------------------
PIN NAME USAGE
--- -------------------- --------------------------------
B7 SDHC_CLK / SPI1_CLK PTE2
B9 SDHC_D3 / SPI1_CS0_b PTE4
B10 SDHC_CMD / SPI1_MOSI PTE1
B11 SDHC_D0 / SPI1_MISO PTE3
B13 ETH_RXER PTA5
B15 ETH_TXEN PTA15
B19 ETH_TXD1 PTA17
B20 ETH_TXD0 PTA16
B21 GPIO1 / RTS1 PTC18
B22 GPIO2 / SDHC_D1 PTE0
B23 GPIO3 PTE28
B24 CLKIN0 PTA18
B25 CLKOUT1 PTE26
B27 AN7 PTB7
B28 AN6 PTB6
B29 AN5 PTB5
B30 AN4 PTB4
B34 TMR2 PTD6
B35 GPIO4 PTB8
B37 PWM7 PTA2
B38 PWM6 PTA1
B39 PWM5 PTD5
B40 PWM4 PTA7
B41 CANRX0 PTE25
B42 CANTX0 PTE24
B44 SPI0_MISO PTD14
B45 SPI0_MOSI PTD13
B46 SPI0_CS0_b PTD11
B47 SPI0_CS1_b PTD15
B48 SPI0_CLK PTD12
B50 SCL1 PTD8
B51 SDA1 PTD9
B52 GPIO5 / SD_CARD_DET PTE28
B55 IRQ_H PTA24
B56 IRQ_G PTA24
B57 IRQ_F PTA25
B58 IRQ_E PTA25
B59 IRQ_D PTA26
B60 IRQ_C PTA26
B61 IRQ_B PTA27
B62 IRQ_A PTA27
B63 EBI_ALE / EBI_CS1_b PTD0
B64 EBI_CS0_b PTD1
B66 EBI_AD15 PTB18
B67 EBI_AD16 PTB17
B68 EBI_AD17 PTB16
B69 EBI_AD18 PTB11
B70 EBI_AD19 PTB10
B72 EBI_OE_b PTB19
B73 EBI_D7 PTB20
B74 EBI_D6 PTB21
B75 EBI_D5 PTB22
B76 EBI_D4 PTB23
B77 EBI_D3 PTC12
B78 EBI_D2 PTC13
B79 EBI_D1 PTC14
B80 EBI_D0 PTC15
LEDs and Buttons
================
TWR-SER Serial Board Connection
===============================
RGB LED
-------
An RGB LED is connected through GPIO as shown below:
The serial board connects into the tower and then maps to the tower pins to
yet other functions (see TWR-SER.pdf).
LED K64
------ -------------------------------------------------------
RED PTB22/SPI2_SOUT/FB_AD29/CMP2_OUT
BLUE PTB21/SPI2_SCK/FB_AD30/CMP1_OUT
GREEN PTE26/ENET_1588_CLKIN/UART4_CTS_b/RTC_CLKOUT/USB0_CLKIN
For the serial port, the following jumpers are required:
If CONFIG_ARCH_LEDs is defined, then NuttX will control the LED on board the
Freedom KL25Z. Usage of these LEDs is defined in include/board.h and
src/k64_leds.c. The following definitions describe how NuttX controls the LEDs:
J15: 1-2 (default)
J17: 1-2 (default)
J18: 1-2 (default)
J19: 1-2 (default)
The two connections map as follows:
A41 RXD0 - Not connected
A42 TXD0 - Not connected
A43 RXD1 - ELE_RXD (connects indirectory to DB-9 connector J8)
A44 TXD1 - ELE_TXD (connects indirectory to DB-9 connector J8)
Finally, we can conclude that:
UART4 (PTE24/25) is not connected, and
UART3 (PTC16/17) is associated with the DB9 connector
NOTE: UART5 is associated with OSJTAG bridge and may also be usable.
LEDs
====
The TWR-K60N100 board has four LEDs labeled D2..D4 on the board. Usage of
these LEDs is defined in include/board.h and src/up_leds.c. They are encoded
as follows:
SYMBOL Meaning LED1* LED2 LED3 LED4
------------------- ----------------------- ------- ------- ------- ------
LED_STARTED NuttX has been started ON OFF OFF OFF
LED_HEAPALLOCATE Heap has been allocated OFF ON OFF OFF
LED_IRQSENABLED Interrupts enabled ON ON OFF OFF
LED_STACKCREATED Idle stack created OFF OFF ON OFF
LED_INIRQ In an interrupt** ON N/C N/C OFF
LED_SIGNAL In a signal handler*** N/C ON N/C OFF
LED_ASSERTION An assertion failed ON ON N/C OFF
LED_PANIC The system has crashed N/C N/C N/C ON
LED_IDLE STM32 is is sleep mode (Optional, not used)
* If LED1, LED2, LED3 are statically on, then NuttX probably failed to boot
and these LEDs will give you some indication of where the failure was
** The normal state is LED3 ON and LED1 faintly glowing. This faint glow
is because of timer interrupts that result in the LED being illuminated
on a small proportion of the time.
*** LED2 may also flicker normally if signals are processed.
SYMBOL Meaning LED state
RED GREEN BLUE
------------------- ----------------------- -----------------
LED_STARTED NuttX has been started OFF OFF OFF
LED_HEAPALLOCATE Heap has been allocated OFF OFF ON
LED_IRQSENABLED Interrupts enabled OFF OFF ON
LED_STACKCREATED Idle stack created OFF ON OFF
LED_INIRQ In an interrupt (no change)
LED_SIGNAL In a signal handler (no change)
LED_ASSERTION An assertion failed (no change)
LED_PANIC The system has crashed FLASH OFF OFF
LED_IDLE K64 is in sleep mode (Optional, not used)
Development Environment
=======================
@ -293,29 +98,22 @@ Development Environment
GNU Toolchain Options
=====================
The NuttX make system has been modified to support the following different
toolchain options.
The NuttX make system supports several GNU-based toolchains under Linux,
Cygwin under Windows, and Windoes native. To select a toolchain:
1. The CodeSourcery GNU toolchain,
2. The devkitARM GNU toolchain,
3. The NuttX buildroot Toolchain (see below).
1. Use 'make menuconfig' and select the toolchain that you are using
under the System Type menu.
2. The default toolchain is the NuttX buildroot under Linux or Cygwin:
All testing has been conducted using the CodeSourcery Windows toolchain. To
use the devkitARM or the NuttX GNU toolchain, you simply need to change the
the following configuration options to your .config (or defconfig) file:
CONFIG_ARMV7M_TOOLCHAIN_BUILDROOT=y
CONFIG_ARMV7M_TOOLCHAIN_CODESOURCERYW=y : CodeSourcery under Windows
CONFIG_ARMV7M_TOOLCHAIN_CODESOURCERYL=y : CodeSourcery under Linux
CONFIG_ARMV7M_TOOLCHAIN_DEVKITARM=y : devkitARM under Windows
CONFIG_ARMV7M_TOOLCHAIN_BUILDROOT=y : NuttX buildroot under Linux or Cygwin (default)
If you are not using CONFIG_ARMV7M_TOOLCHAIN_BUILDROOT, then you may
also have to modify the PATH in the setenv.h file if your make cannot
find the tools.
If you are not using CONFIG_ARMV7M_TOOLCHAIN_BUILDROOT, then you may also have to modify
the PATH in the setenv.h file if your make cannot find the tools.
NOTE: the CodeSourcery (for Windows) and devkitARM toolchains are
Windows native toolchains. The CodeSourcey (for Linux) and NuttX buildroot
toolchains are Cygwin and/or Linux native toolchains. There are several limitations
to using a Windows based toolchain in a Cygwin environment. The three biggest are:
NOTE: Using native Windows toolchains under Cygwin has some limitations.
This incuudes the CodeSourcery (for Windows) and devkitARM toolchains are
Windows native toolchains. The biggest limitations are:
1. The Windows toolchain cannot follow Cygwin paths. Path conversions are
performed automatically in the Cygwin makefiles using the 'cygpath' utility
@ -334,143 +132,8 @@ GNU Toolchain Options
An alias in your .bashrc file might make that less painful.
NOTE 1: The CodeSourcery toolchain (2009q1) does not work with default optimization
level of -Os (See Make.defs). It will work with -O0, -O1, or -O2, but not with
-Os.
NOTE 2: The devkitARM toolchain includes a version of MSYS make. Make sure that
the paths to Cygwin's /bin and /usr/bin directories appear BEFORE the devkitARM
path or will get the wrong version of make.
IDEs
====
NuttX is built using command-line make. It can be used with an IDE, but some
effort will be required to create the project.
Makefile Build
--------------
Under Eclipse, it is pretty easy to set up an "empty makefile project" and
simply use the NuttX makefile to build the system. That is almost for free
under Linux. Under Windows, you will need to set up the "Cygwin GCC" empty
makefile project in order to work with Windows (Google for "Eclipse Cygwin" -
there is a lot of help on the internet).
Native Build
------------
Here are a few tips before you start that effort:
1) Select the toolchain that you will be using in your .config file
2) Start the NuttX build at least one time from the Cygwin command line
before trying to create your project. This is necessary to create
certain auto-generated files and directories that will be needed.
3) Set up include pathes: You will need include/, arch/arm/src/k40,
arch/arm/src/common, arch/arm/src/armv7-m, and sched/.
4) All assembly files need to have the definition option -D __ASSEMBLY__
on the command line.
Startup files will probably cause you some headaches. The NuttX startup file
is arch/arm/src/kinetis/k40_vectors.S.
NuttX EABI "buildroot" Toolchain
================================
A GNU GCC-based toolchain is assumed. The files */setenv.sh should
be modified to point to the correct path to the Cortex-M4 GCC toolchain (if
different from the default in your PATH variable).
If you have no Cortex-M4 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.
NOTE: The NuttX toolchain may not include optimizations for Cortex-M4 (ARMv7E-M).
1. You must have already configured Nuttx in <some-dir>/nuttx.
cd tools
./configure.sh twr-k60n512/<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 configs/cortexm3-eabi-defconfig-4.6.3 .config
6. make oldconfig
7. make
8. Edit setenv.h, if necessary, so that the PATH variable includes
the path to the newly built binaries.
See the file configs/README.txt in the buildroot source tree. That has more
details PLUS some special instructions that you will need to follow if you are
building a Cortex-M4 toolchain for Cygwin under Windows.
NOTE: Unfortunately, the 4.6.3 EABI toolchain is not compatible with the
the NXFLAT tools. See the top-level TODO file (under "Binary loaders") for
more information about this problem. If you plan to use NXFLAT, please do not
use the GCC 4.6.3 EABI toochain; instead use the GCC 4.3.3 OABI toolchain.
See instructions below.
NuttX OABI "buildroot" Toolchain
================================
The older, OABI buildroot toolchain is also available. To use the OABI
toolchain:
1. When building the buildroot toolchain, either (1) modify the cortexm3-eabi-defconfig-4.6.3
configuration to use EABI (using 'make menuconfig'), or (2) use an exising OABI
configuration such as cortexm3-defconfig-4.3.3
2. Modify the Make.defs file to use the OABI conventions:
+CROSSDEV = arm-nuttx-elf-
+ARCHCPUFLAGS = -mtune=cortex-m3 -march=armv7-m -mfloat-abi=soft
+NXFLATLDFLAGS2 = $(NXFLATLDFLAGS1) -T$(TOPDIR)/binfmt/libnxflat/gnu-nxflat-gotoff.ld -no-check-sections
-CROSSDEV = arm-nuttx-eabi-
-ARCHCPUFLAGS = -mcpu=cortex-m3 -mthumb -mfloat-abi=soft
-NXFLATLDFLAGS2 = $(NXFLATLDFLAGS1) -T$(TOPDIR)/binfmt/libnxflat/gnu-nxflat-pcrel.ld -no-check-sections
NXFLAT Toolchain
================
If you are *not* using the NuttX buildroot toolchain and you want to use
the NXFLAT tools, then you will still have to build a portion of the buildroot
tools -- just the NXFLAT tools. The buildroot with the NXFLAT tools can
be downloaded from the NuttX Bitbucket download site
(https://bitbucket.org/nuttx/nuttx/downloads/).
This GNU toolchain builds and executes in the Linux or Cygwin environment.
1. You must have already configured Nuttx in <some-dir>/nuttx.
cd tools
./configure.sh lpcxpresso-lpc1768/<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 configs/cortexm3-defconfig-nxflat .config
6. make oldconfig
7. make
8. Edit setenv.h, if necessary, so that the PATH variable includes
the path to the newly builtNXFLAT binaries.
TWR-K60N512-specific Configuration Options
==========================================
Freedom K64F Configuration Options
==================================
CONFIG_ARCH - Identifies the arch/ subdirectory. This sould
be set to:
@ -487,21 +150,21 @@ TWR-K60N512-specific Configuration Options
CONFIG_ARCH_CHIP - Identifies the arch/*/chip subdirectory
CONFIG_ARCH_CHIP=k40
CONFIG_ARCH_CHIP=kinetis
CONFIG_ARCH_CHIP_name - For use in C code to identify the exact
chip:
CONFIG_ARCH_CHIP_MK60N512VMD100
CONFIG_ARCH_CHIP_MK64FN1M0VLL12
CONFIG_ARCH_BOARD - Identifies the configs subdirectory and
hence, the board that supports the particular chip or SoC.
CONFIG_ARCH_BOARD=twr-k60n512 (for the TWR-K60N512 development board)
CONFIG_ARCH_BOARD="freedom-k64f" (for the Freedom K64F development board)
CONFIG_ARCH_BOARD_name - For use in C code
CONFIG_ARCH_BOARD_TWR_K60N512=y
CONFIG_ARCH_BOARD_FREEDOM_K64F=y
CONFIG_ARCH_LOOPSPERMSEC - Must be calibrated for correct operation
of delay loops

View File

@ -124,24 +124,30 @@
#endif
/* LED definitions ******************************************************************/
/* The FREEDOM-K64F has four LEDs:
/* The Freedom K64F has a single RGB LED driven by the K64F as follows:
*
* 1. E1 / Orange LED PTA11
* 2. E2 / Yellow LED PTA28
* 3. E3 / Green LED PTA29
* 4 E4 / Blue LED PTA10
* LED K64
* ------ -------------------------------------------------------
* RED PTB22/SPI2_SOUT/FB_AD29/CMP2_OUT
* BLUE PTB21/SPI2_SCK/FB_AD30/CMP1_OUT
* GREEN PTE26/ENET_1588_CLKIN/UART4_CTS_b/RTC_CLKOUT/USB0_CLKIN
*
* The 4 LEDs are encoded as follows:
*/
#define LED_STARTED 0 /* LED1 */
#define LED_HEAPALLOCATE 1 /* LED2 */
#define LED_IRQSENABLED 2 /* LED1 + LED2 */
#define LED_STACKCREATED 3 /* LED3 */
#define LED_INIRQ 4 /* LED1 + LED3 */
#define LED_SIGNAL 5 /* LED2 + LED3 */
#define LED_ASSERTION 6 /* LED1 + LED2 + LED3 */
#define LED_PANIC 7 /* N/C + N/C + N/C + LED4 */
* If CONFIG_ARCH_LEDs is defined, then NuttX will control the LED on board
* the Freedom K64F. The following definitions describe how NuttX controls
* the LEDs:
*
* SYMBOL Meaning LED state
* RED GREEN BLUE
* ------------------- ----------------------- ----------------- */
#define LED_STARTED 1 /* NuttX has been started OFF OFF OFF */
#define LED_HEAPALLOCATE 2 /* Heap has been allocated OFF OFF ON */
#define LED_IRQSENABLED 0 /* Interrupts enabled OFF OFF ON */
#define LED_STACKCREATED 3 /* Idle stack created OFF ON OFF */
#define LED_INIRQ 0 /* In an interrupt (no change) */
#define LED_SIGNAL 0 /* In a signal handler (no change) */
#define LED_ASSERTION 0 /* An assertion failed (no change) */
#define LED_PANIC 4 /* The system has crashed FLASH OFF OFF */
#undef LED_IDLE /* K64 is in sleep mode (Not used) */
/* Button definitions ***************************************************************/
/* The FREEDOM-K64F has user buttons (plus a reset button):

View File

@ -39,7 +39,7 @@ ASRCS =
CSRCS = k64_boot.c k64_spi.c
ifeq ($(CONFIG_ARCH_LEDS),y)
CSRCS += k64_leds.c
CSRCS += k64_autoleds.c
endif
ifeq ($(CONFIG_ARCH_BUTTONS),y)

View File

@ -62,52 +62,6 @@
#endif
/* FREEDOM-K64F GPIOs ****************************************************************/
/* On-Board Connections
* -------------------- ------------------------- -------- -------------------
* FEATURE CONNECTION PORT/PIN PIN FUNCTION
* -------------------- ------------------------- -------- -------------------
* OSJTAG USB-to-serial OSJTAG Bridge RX Data PTE9 UART5_RX
* Bridge OSJTAG Bridge TX Data PTE8 UART5_TX
* SD Card Slot SD Clock PTE2 SDHC0_DCLK
* SD Command PTE3 SDHC0_CMD
* SD Data0 PTE1 SDHC0_D0
* SD Data1 PTE0 SDHC0_D1
* SD Data2 PTE5 SDHC0_D2
* SD Data3 PTE4 SDHC0_D3
* SD Card Detect PTE28 PTE28
* SD Write Protect PTE27 PTE27
* Infrared Port IR Transmit PTD7 CMT_IRO
* IR Receive PTC6 CMP0_IN0
* Pushbuttons SW1 (IRQ0) PTA19 PTA19
* SW2 (IRQ1) PTE26 PTE26
* SW3 (RESET) RESET_b RESET_b
* Touch Pads E1 / Touch PTA4 TSI0_CH5
* E2 / Touch PTB3 TSI0_CH8
* E3 / Touch PTB2 TSI0_CH7
* E4 / Touch PTB16 TSI0_CH9
* LEDs E1 / Orange LED PTA11 PTA11
* E2 / Yellow LED PTA28 PTA28
* E3 / Green LED PTA29 PTA29
* E4 / Blue LED PTA10 PTA10
* Potentiometer Potentiometer (R71) ? ADC1_DM1
* Accelerometer I2C SDA PTD9 I2C0_SDA
* I2C SCL PTD8 I2C0_SCL
* IRQ PTD10 PTD10
* Touch Pad / Segment Electrode 0 (J3 Pin 3) PTB0 TSI0_CH0
* LCD TWRPI Socket Electrode 1 (J3 Pin 5) PTB1 TSI0_CH6
* Electrode 2 (J3 Pin 7) PTB2 TSI0_CH7
* Electrode 3 (J3 Pin 8) PTB3 TSI0_CH8
* Electrode 4 (J3 Pin 9) PTC0 TSI0_CH13
* Electrode 5 (J3 Pin 10) PTC1 TSI0_CH14
* Electrode 6 (J3 Pin 11) PTC2 TSI0_CH15
* Electrode 7 (J3 Pin 12) PTA4 TSI0_CH5
* Electrode 8 (J3 Pin 13) PTB16 TSI0_CH9
* Electrode 9 (J3 Pin 14) PTB17 TSI0_CH10
* Electrode 10 (J3 Pin 15) PTB18 TSI0_CH11
* Electrode 11 (J3 Pin 16) PTB19 TSI0_CH12
* TWRPI ID0 (J3 Pin 17) ? ADC1_DP1
* TWRPI ID1 (J3 Pin 18) ? ADC1_SE16
*/
#define GPIO_SD_CARDDETECT (GPIO_PULLUP | PIN_INT_BOTH | PIN_PORTE | PIN28)
#define GPIO_SD_WRPROTECT (GPIO_PULLUP | PIN_PORTE | PIN27)
@ -115,148 +69,18 @@
#define GPIO_SW1 (GPIO_PULLUP | PIN_INT_BOTH | PIN_PORTA | PIN19)
#define GPIO_SW2 (GPIO_PULLUP | PIN_INT_BOTH | PIN_PORTE | PIN26)
#define GPIO_LED1 (GPIO_LOWDRIVE | GPIO_OUTPUT_ZER0 | PIN_PORTA | PIN11)
#define GPIO_LED2 (GPIO_LOWDRIVE | GPIO_OUTPUT_ZER0 | PIN_PORTA | PIN28)
#define GPIO_LED3 (GPIO_LOWDRIVE | GPIO_OUTPUT_ZER0 | PIN_PORTA | PIN29)
#define GPIO_LED4 (GPIO_LOWDRIVE | GPIO_OUTPUT_ZER0 | PIN_PORTA | PIN10)
/* Connections via the General Purpose Tower Plug-in (TWRPI) Socket
* -------------------- ------------------------- -------- -------------------
* FEATURE CONNECTION PORT/PIN PIN FUNCTION
* -------------------- ------------------------- -------- -------------------
* General Purpose TWRPI AN0 (J4 Pin 8) ? ADC0_DP0/ADC1_DP3
* TWRPI Socket TWRPI AN1 (J4 Pin 9) ? ADC0_DM0/ADC1_DM3
* TWRPI AN2 (J4 Pin 12) ? ADC1_DP0/ADC0_DP3
* TWRPI ID0 (J4 Pin 17) ? ADC0_DP1
* TWRPI ID1 (J4 Pin 18) ? ADC0_DM1
* TWRPI I2C SCL (J5 Pin 3) PTD8 I2C0_SCL
* TWRPI I2C SDA (J5 Pin 4) PTD9 I2C0_SDA
* TWRPI SPI MISO (J5 Pin 9) PTD14 SPI2_SIN
* TWRPI SPI MOSI (J5 Pin 10) PTD13 SPI2_SOUT
* TWRPI SPI SS (J5 Pin 11) PTD15 SPI2_PCS0
* TWRPI SPI CLK (J5 Pin 12) PTD12 SPI2_SCK
* TWRPI GPIO0 (J5 Pin 15) PTD10 PTD10
* TWRPI GPIO1 (J5 Pin 16) PTB8 PTB8
* TWRPI GPIO2 (J5 Pin 17) PTB9 PTB9
* TWRPI GPIO3 (J5 Pin 18) PTA19 PTA19
* TWRPI GPIO4 (J5 Pin 19) PTE26 PTE26
/* An RGB LED is connected through GPIO as shown below:
*
* LED K64
* ------ -------------------------------------------------------
* RED PTB22/SPI2_SOUT/FB_AD29/CMP2_OUT
* BLUE PTB21/SPI2_SCK/FB_AD30/CMP1_OUT
* GREEN PTE26/ENET_1588_CLKIN/UART4_CTS_b/RTC_CLKOUT/USB0_CLKIN
*/
/* Connections via the Tower Primary Connector Side A
* --- -------------------- --------------------------------
* PIN NAME USAGE
* --- -------------------- --------------------------------
* A7 SCL0 PTD8
* A8 SDA0 PTD9
* A9 GPIO9 / CTS1 PTC19
* A10 GPIO8 / SDHC_D2 PTE5
* A11 GPIO7 / SD_WP_DET PTE27
* A13 ETH_MDC PTB1
* A14 ETH_MDIO PTB0
* A16 ETH_RXDV PTA14
* A19 ETH_RXD1 PTA12
* A20 ETH_RXD0 PTA13
* A21 SSI_MCLK PTE6
* A22 SSI_BCLK PTE12
* A23 SSI_FS PTE11
* A24 SSI_RXD PTE7
* A25 SSI_TXD PTE10
* A27 AN3 PGA0_DP/ADC0_DP0/ADC1_DP3
* A28 AN2 PGA0_DM/ADC0_DM0/ADC1_DM3
* A29 AN1 PGA1_DP/ADC1_DP0/ADC0_DP3
* A30 AN0 PGA1_DM/ADC1_DM0/ADC0_DM3
* A33 TMR1 PTA9
* A34 TMR0 PTA8
* A35 GPIO6 PTB9
* A37 PWM3 PTA6
* A38 PWM2 PTC3
* A39 PWM1 PTC2
* A40 PWM0 PTC1
* A41 RXD0 PTE25
* A42 TXD0 PTE24
* A43 RXD1 PTC16
* A44 TXD1 PTC17
* A64 CLKOUT0 PTC3
* A66 EBI_AD14 PTC0
* A67 EBI_AD13 PTC1
* A68 EBI_AD12 PTC2
* A69 EBI_AD11 PTC4
* A70 EBI_AD10 PTC5
* A71 EBI_AD9 PTC6
* A71 EBI_R/W_b PTC11
* A72 EBI_AD8 PTC7
* A73 EBI_AD7 PTC8
* A74 EBI_AD6 PTC9
* A75 EBI_AD5 PTC10
* A76 EBI_AD4 PTD2
* A77 EBI_AD3 PTD3
* A78 EBI_AD2 PTD4
* A79 EBI_AD1 PTD5
* A80 EBI_AD0 PTD6
*/
/* Connections via the Tower Primary Connector Side B
* --- -------------------- --------------------------------
* PIN NAME USAGE
* --- -------------------- --------------------------------
* B7 SDHC_CLK / SPI1_CLK PTE2
* B9 SDHC_D3 / SPI1_CS0_b PTE4
* B10 SDHC_CMD / SPI1_MOSI PTE1
* B11 SDHC_D0 / SPI1_MISO PTE3
* B13 ETH_RXER PTA5
* B15 ETH_TXEN PTA15
* B19 ETH_TXD1 PTA17
* B20 ETH_TXD0 PTA16
* B21 GPIO1 / RTS1 PTC18
* B22 GPIO2 / SDHC_D1 PTE0
* B23 GPIO3 PTE28
* B24 CLKIN0 PTA18
* B25 CLKOUT1 PTE26
* B27 AN7 PTB7
* B28 AN6 PTB6
* B29 AN5 PTB5
* B30 AN4 PTB4
* B34 TMR2 PTD6
* B35 GPIO4 PTB8
* B37 PWM7 PTA2
* B38 PWM6 PTA1
* B39 PWM5 PTD5
* B40 PWM4 PTA7
* B41 CANRX0 PTE25
* B42 CANTX0 PTE24
* B44 SPI0_MISO PTD14
* B45 SPI0_MOSI PTD13
* B46 SPI0_CS0_b PTD11
* B47 SPI0_CS1_b PTD15
* B48 SPI0_CLK PTD12
* B50 SCL1 PTD8
* B51 SDA1 PTD9
* B52 GPIO5 / SD_CARD_DET PTE28
* B55 IRQ_H PTA24
* B56 IRQ_G PTA24
* B57 IRQ_F PTA25
* B58 IRQ_E PTA25
* B59 IRQ_D PTA26
* B60 IRQ_C PTA26
* B61 IRQ_B PTA27
* B62 IRQ_A PTA27
* B63 EBI_ALE / EBI_CS1_b PTD0
* B64 EBI_CS0_b PTD1
* B66 EBI_AD15 PTB18
* B67 EBI_AD16 PTB17
* B68 EBI_AD17 PTB16
* B69 EBI_AD18 PTB11
* B70 EBI_AD19 PTB10
* B72 EBI_OE_b PTB19
* B73 EBI_D7 PTB20
* B74 EBI_D6 PTB21
* B75 EBI_D5 PTB22
* B76 EBI_D4 PTB23
* B77 EBI_D3 PTC12
* B78 EBI_D2 PTC13
* B79 EBI_D1 PTC14
* B80 EBI_D0 PTC15
*/
#define GPIO_LED_R (GPIO_LOWDRIVE | GPIO_OUTPUT_ONE | PIN_PORTB | PIN22)
#define GPIO_LED_G (GPIO_LOWDRIVE | GPIO_OUTPUT_ONE | PIN_PORTB | PIN21)
#define GPIO_LED_B (GPIO_LOWDRIVE | GPIO_OUTPUT_ONE | PIN_PORTE | PIN26)
/************************************************************************************
* Public Types

View File

@ -0,0 +1,162 @@
/****************************************************************************
* configs/freedom-k64f/src/k64_autoleds.c
*
* Copyright (C) 2016 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <gnutt@nuttx.org>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* 3. Neither the name NuttX nor the names of its contributors may be
* used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
****************************************************************************/
/* The Freedom K64F has a single RGB LED driven by the K64F as follows:
*
* LED K64
* ------ -------------------------------------------------------
* RED PTB22/SPI2_SOUT/FB_AD29/CMP2_OUT
* BLUE PTB21/SPI2_SCK/FB_AD30/CMP1_OUT
* GREEN PTE26/ENET_1588_CLKIN/UART4_CTS_b/RTC_CLKOUT/USB0_CLKIN
*
* If CONFIG_ARCH_LEDs is defined, then NuttX will control the LED on board
* the Freedom K64F. The following definitions describe how NuttX controls
* the LEDs:
*
* SYMBOL Meaning LED state
* RED GREEN BLUE
* ------------------- ----------------------- -----------------
* LED_STARTED NuttX has been started OFF OFF OFF
* LED_HEAPALLOCATE Heap has been allocated OFF OFF ON
* LED_IRQSENABLED Interrupts enabled OFF OFF ON
* LED_STACKCREATED Idle stack created OFF ON OFF
* LED_INIRQ In an interrupt (no change)
* LED_SIGNAL In a signal handler (no change)
* LED_ASSERTION An assertion failed (no change)
* LED_PANIC The system has crashed FLASH OFF OFF
* LED_IDLE K64 is in sleep mode (Optional, not used)
*/
/****************************************************************************
* Included Files
****************************************************************************/
#include <nuttx/config.h>
#include <stdint.h>
#include <stdbool.h>
#include <debug.h>
#include <nuttx/board.h>
#include <arch/board/board.h>
#include "chip.h"
#include "kinetis.h"
#include "freedom-k64f.h"
#ifdef CONFIG_ARCH_LEDS
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
/* Summary of all possible settings */
#define LED_NOCHANGE 0 /* LED_IRQSENABLED, LED_INIRQ, LED_SIGNAL, LED_ASSERTION */
#define LED_OFF_OFF_OFF 1 /* LED_STARTED */
#define LED_OFF_OFF_ON 2 /* LED_HEAPALLOCATE */
#define LED_OFF_ON_OFF 3 /* LED_STACKCREATED */
#define LED_ON_OFF_OFF 4 /* LED_PANIC */
/****************************************************************************
* Public Functions
****************************************************************************/
/****************************************************************************
* Name: board_autoled_initialize
*
* Description:
* Initialize the on-board LED
*
****************************************************************************/
void board_autoled_initialize(void)
{
kinetis_pinconfig(GPIO_LED_R);
kinetis_pinconfig(GPIO_LED_G);
kinetis_pinconfig(GPIO_LED_B);
}
/****************************************************************************
* Name: board_autoled_on
****************************************************************************/
void board_autoled_on(int led)
{
if (led != LED_NOCHANGE)
{
bool redoff = true;
bool greenoff = true;
bool blueoff = true;
switch (led)
{
default:
case LED_OFF_OFF_OFF:
break;
case LED_OFF_OFF_ON:
blueoff = false;
break;
case LED_OFF_ON_OFF:
greenoff = false;
break;
case LED_ON_OFF_OFF:
redoff = false;
break;
}
kinetis_gpiowrite(GPIO_LED_R, redoff);
kinetis_gpiowrite(GPIO_LED_G, greenoff);
kinetis_gpiowrite(GPIO_LED_B, blueoff);
}
}
/****************************************************************************
* Name: board_autoled_off
****************************************************************************/
void board_autoled_off(int led)
{
if (led == LED_ON_OFF_OFF)
{
kinetis_gpiowrite(GPIO_LED_R, true);
kinetis_gpiowrite(GPIO_LED_G, true);
kinetis_gpiowrite(GPIO_LED_B, true);
}
}
#endif /* CONFIG_ARCH_LEDS */

View File

@ -1,251 +0,0 @@
/****************************************************************************
* configs/freedom-k64f/src/k64_leds.c
*
* Copyright (C) 2016 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <gnutt@nuttx.org>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* 3. Neither the name NuttX nor the names of its contributors may be
* used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
****************************************************************************/
/****************************************************************************
* Included Files
****************************************************************************/
#include <nuttx/config.h>
#include <debug.h>
#include <nuttx/board.h>
#include "kinetis.h"
#include "freedom-k64f.h"
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
/* The FREEDOM-K64F has four LEDs:
*
* 1. E1 / Orange LED PTA11
* 2. E2 / Yellow LED PTA28
* 3. E3 / Green LED PTA29
* 4 E4 / Blue LED PTA10
*/
/* The following definitions map the encoded LED setting to GPIO settings */
#define K64_LED1 (1 << 0)
#define K64_LED2 (1 << 1)
#define K64_LED3 (1 << 2)
#define K64_LED4 (1 << 3)
#define ON_SETBITS_SHIFT (0)
#define ON_CLRBITS_SHIFT (4)
#define OFF_SETBITS_SHIFT (8)
#define OFF_CLRBITS_SHIFT (12)
#define ON_BITS(v) ((v) & 0xff)
#define OFF_BITS(v) (((v) >> 8) & 0x0ff)
#define SETBITS(b) ((b) & 0x0f)
#define CLRBITS(b) (((b) >> 4) & 0x0f)
#define ON_SETBITS(v) (SETBITS(ON_BITS(v))
#define ON_CLRBITS(v) (CLRBITS(ON_BITS(v))
#define OFF_SETBITS(v) (SETBITS(OFF_BITS(v))
#define OFF_CLRBITS(v) (CLRBITS(OFF_BITS(v))
#define LED_STARTED_ON_SETBITS ((K64_LED1) << ON_SETBITS_SHIFT)
#define LED_STARTED_ON_CLRBITS ((K64_LED2|K64_LED3|K64_LED4) << ON_CLRBITS_SHIFT)
#define LED_STARTED_OFF_SETBITS (0 << OFF_SETBITS_SHIFT)
#define LED_STARTED_OFF_CLRBITS ((K64_LED1|K64_LED2|K64_LED3|K64_LED4) << OFF_CLRBITS_SHIFT)
#define LED_HEAPALLOCATE_ON_SETBITS ((K64_LED2) << ON_SETBITS_SHIFT)
#define LED_HEAPALLOCATE_ON_CLRBITS ((K64_LED1|K64_LED3|K64_LED4) << ON_CLRBITS_SHIFT)
#define LED_HEAPALLOCATE_OFF_SETBITS ((K64_LED1) << OFF_SETBITS_SHIFT)
#define LED_HEAPALLOCATE_OFF_CLRBITS ((K64_LED2|K64_LED3|K64_LED4) << OFF_CLRBITS_SHIFT)
#define LED_IRQSENABLED_ON_SETBITS ((K64_LED1|K64_LED2) << ON_SETBITS_SHIFT)
#define LED_IRQSENABLED_ON_CLRBITS ((K64_LED3|K64_LED4) << ON_CLRBITS_SHIFT)
#define LED_IRQSENABLED_OFF_SETBITS ((K64_LED2) << OFF_SETBITS_SHIFT)
#define LED_IRQSENABLED_OFF_CLRBITS ((K64_LED1|K64_LED3|K64_LED4) << OFF_CLRBITS_SHIFT)
#define LED_STACKCREATED_ON_SETBITS ((K64_LED3) << ON_SETBITS_SHIFT)
#define LED_STACKCREATED_ON_CLRBITS ((K64_LED1|K64_LED2|K64_LED4) << ON_CLRBITS_SHIFT)
#define LED_STACKCREATED_OFF_SETBITS ((K64_LED1|K64_LED2) << OFF_SETBITS_SHIFT)
#define LED_STACKCREATED_OFF_CLRBITS ((K64_LED3|K64_LED4) << OFF_CLRBITS_SHIFT)
#define LED_INIRQ_ON_SETBITS ((K64_LED1) << ON_SETBITS_SHIFT)
#define LED_INIRQ_ON_CLRBITS ((0) << ON_CLRBITS_SHIFT)
#define LED_INIRQ_OFF_SETBITS ((0) << OFF_SETBITS_SHIFT)
#define LED_INIRQ_OFF_CLRBITS ((K64_LED1) << OFF_CLRBITS_SHIFT)
#define LED_SIGNAL_ON_SETBITS ((K64_LED2) << ON_SETBITS_SHIFT)
#define LED_SIGNAL_ON_CLRBITS ((0) << ON_CLRBITS_SHIFT)
#define LED_SIGNAL_OFF_SETBITS ((0) << OFF_SETBITS_SHIFT)
#define LED_SIGNAL_OFF_CLRBITS ((K64_LED2) << OFF_CLRBITS_SHIFT)
#define LED_ASSERTION_ON_SETBITS ((K64_LED4) << ON_SETBITS_SHIFT)
#define LED_ASSERTION_ON_CLRBITS ((0) << ON_CLRBITS_SHIFT)
#define LED_ASSERTION_OFF_SETBITS ((0) << OFF_SETBITS_SHIFT)
#define LED_ASSERTION_OFF_CLRBITS ((K64_LED4) << OFF_CLRBITS_SHIFT)
#define LED_PANIC_ON_SETBITS ((K64_LED4) << ON_SETBITS_SHIFT)
#define LED_PANIC_ON_CLRBITS ((0) << ON_CLRBITS_SHIFT)
#define LED_PANIC_OFF_SETBITS ((0) << OFF_SETBITS_SHIFT)
#define LED_PANIC_OFF_CLRBITS ((K64_LED4) << OFF_CLRBITS_SHIFT)
/****************************************************************************
* Private Data
****************************************************************************/
static const uint16_t g_ledbits[8] =
{
(LED_STARTED_ON_SETBITS | LED_STARTED_ON_CLRBITS |
LED_STARTED_OFF_SETBITS | LED_STARTED_OFF_CLRBITS),
(LED_HEAPALLOCATE_ON_SETBITS | LED_HEAPALLOCATE_ON_CLRBITS |
LED_HEAPALLOCATE_OFF_SETBITS | LED_HEAPALLOCATE_OFF_CLRBITS),
(LED_IRQSENABLED_ON_SETBITS | LED_IRQSENABLED_ON_CLRBITS |
LED_IRQSENABLED_OFF_SETBITS | LED_IRQSENABLED_OFF_CLRBITS),
(LED_STACKCREATED_ON_SETBITS | LED_STACKCREATED_ON_CLRBITS |
LED_STACKCREATED_OFF_SETBITS | LED_STACKCREATED_OFF_CLRBITS),
(LED_INIRQ_ON_SETBITS | LED_INIRQ_ON_CLRBITS |
LED_INIRQ_OFF_SETBITS | LED_INIRQ_OFF_CLRBITS),
(LED_SIGNAL_ON_SETBITS | LED_SIGNAL_ON_CLRBITS |
LED_SIGNAL_OFF_SETBITS | LED_SIGNAL_OFF_CLRBITS),
(LED_ASSERTION_ON_SETBITS | LED_ASSERTION_ON_CLRBITS |
LED_ASSERTION_OFF_SETBITS | LED_ASSERTION_OFF_CLRBITS),
(LED_PANIC_ON_SETBITS | LED_PANIC_ON_CLRBITS |
LED_PANIC_OFF_SETBITS | LED_PANIC_OFF_CLRBITS)
};
/****************************************************************************
* Private Functions
****************************************************************************/
static inline void led_clrbits(unsigned int clrbits)
{
if ((clrbits & K64_LED1) != 0)
{
kinetis_gpiowrite(GPIO_LED1, false);
}
if ((clrbits & K64_LED2) != 0)
{
kinetis_gpiowrite(GPIO_LED2, false);
}
if ((clrbits & K64_LED3) != 0)
{
kinetis_gpiowrite(GPIO_LED3, false);
}
if ((clrbits & K64_LED4) != 0)
{
kinetis_gpiowrite(GPIO_LED4, false);
}
}
static inline void led_setbits(unsigned int setbits)
{
if ((setbits & K64_LED1) != 0)
{
kinetis_gpiowrite(GPIO_LED1, true);
}
if ((setbits & K64_LED2) != 0)
{
kinetis_gpiowrite(GPIO_LED2, true);
}
if ((setbits & K64_LED3) != 0)
{
kinetis_gpiowrite(GPIO_LED3, true);
}
if ((setbits & K64_LED4) != 0)
{
kinetis_gpiowrite(GPIO_LED4, true);
}
}
static void led_setonoff(unsigned int bits)
{
led_clrbits(CLRBITS(bits));
led_setbits(SETBITS(bits));
}
/****************************************************************************
* Public Functions
****************************************************************************/
/****************************************************************************
* Name: board_autoled_initialize
*
* Description:
* Initialize LED GPIOs so that LEDs can be controlled.
*
****************************************************************************/
#ifdef CONFIG_ARCH_LEDS
void board_autoled_initialize(void)
{
/* Configure LED1-4 GPIOs for output */
kinetis_pinconfig(GPIO_LED1);
kinetis_pinconfig(GPIO_LED2);
kinetis_pinconfig(GPIO_LED3);
kinetis_pinconfig(GPIO_LED4);
}
/****************************************************************************
* Name: board_autoled_on
****************************************************************************/
void board_autoled_on(int led)
{
led_setonoff(ON_BITS(g_ledbits[led]));
}
/****************************************************************************
* Name: board_autoled_off
****************************************************************************/
void board_autoled_off(int led)
{
led_setonoff(OFF_BITS(g_ledbits[led]));
}
#endif /* CONFIG_ARCH_LEDS */

View File

@ -48,18 +48,6 @@
#ifdef CONFIG_ARCH_LEDS
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
/****************************************************************************
* Private Data
****************************************************************************/
/****************************************************************************
* Private Functions
****************************************************************************/
/****************************************************************************
* Public Functions
****************************************************************************/