diff --git a/Documentation/README.html b/Documentation/README.html
index 95fcd87f439..62dacef0f27 100644
--- a/Documentation/README.html
+++ b/Documentation/README.html
@@ -8,7 +8,7 @@
NuttX README Files
- Last Updated: April 21, 2018
+ Last Updated: May 1, 2018
|
@@ -105,6 +105,8 @@ nuttx/
| | `- README.txt
| |- flipnclick-sam3x/
| | `- README.txt
+ | |- freedom-k28f/
+ | | `- README.txt
| |- freedom-k64f/
| | `- README.txt
| |- freedom-k66f/
diff --git a/README.txt b/README.txt
index 2e221007327..9559ba74858 100644
--- a/README.txt
+++ b/README.txt
@@ -1682,6 +1682,8 @@ nuttx/
| | `- README.txt
| |- flipnclick-sam3x/
| | `- README.txt
+ | |- freedom-k28f/
+ | | `- README.txt
| |- freedom-k64f/
| | `- README.txt
| |- freedom-k66f/
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index b03af7fd8ca..b129e61ce62 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -7,7 +7,7 @@ if ARCH_ARM
comment "ARM Options"
choice
- prompt "ARM chip selection"
+ prompt "ARM MCU selection"
default ARCH_CHIP_STM32
config ARCH_CHIP_A1X
diff --git a/arch/arm/src/kinetis/chip/kinetis_k28memorymap.h b/arch/arm/src/kinetis/chip/kinetis_k28memorymap.h
index 7e17ab227be..10d7d70db93 100644
--- a/arch/arm/src/kinetis/chip/kinetis_k28memorymap.h
+++ b/arch/arm/src/kinetis/chip/kinetis_k28memorymap.h
@@ -174,7 +174,7 @@
# define KINETIS_TPM2_BASE 0x400ca000 /* TPM2 */
# define KINETIS_DAC0_ALT_BASE 0x400cc000 /* Alternate address 12-bit digital-to-analog
* converter (DAC) 0 */
-# define KINETIS_LPUART3_BASE 0x400d6000 /* LPUART3 */
+# define KINETIS_LPUART4_BASE 0x400d6000 /* LPUART4 */
# define KINETIS_QSPI0C_BASE 0x400da000 /* QSPI0 controller */
# define KINETIS_FLEXIO0_BASE 0x400df000 /* FlexIO0 */
# define KINETIS_I2C2_BASE 0x400e6000 /* I2C 2 */
diff --git a/arch/arm/src/kinetis/chip/kinetis_k28vectors.h b/arch/arm/src/kinetis/chip/kinetis_k28vectors.h
index a65b6721bc6..7464732771b 100644
--- a/arch/arm/src/kinetis/chip/kinetis_k28vectors.h
+++ b/arch/arm/src/kinetis/chip/kinetis_k28vectors.h
@@ -57,7 +57,7 @@
# else
-VECTOR(kinetis_dmach0, KINETIS_IRQ_DMACH0 /* 0: DMA channel 0, 16 transfer complete */
+VECTOR(kinetis_dmach0, KINETIS_IRQ_DMACH0) /* 0: DMA channel 0, 16 transfer complete */
VECTOR(kinetis_dmach1, KINETIS_IRQ_DMACH1) /* 1: DMA channel 1, 17 transfer complete */
VECTOR(kinetis_dmach2, KINETIS_IRQ_DMACH2) /* 2: DMA channel 2, 18 transfer complete */
VECTOR(kinetis_dmach3, KINETIS_IRQ_DMACH3) /* 3: DMA channel 3, 19 transfer complete */
diff --git a/configs/Kconfig b/configs/Kconfig
index 6554cc35686..74896c8aa52 100644
--- a/configs/Kconfig
+++ b/configs/Kconfig
@@ -220,6 +220,17 @@ config ARCH_BOARD_FLIPNCLICK_SAM3X
Like the Arduino DUE, this board features the Atmel ATSAM3X8E MCU
running at 84 MHz.
+config ARCH_BOARD_FREEDOM_K28F
+ bool "NXP Freedom-k28f development board"
+ depends on ARCH_CHIP_MK28FN2M0VMI15
+ select ARCH_HAVE_LEDS
+ select ARCH_HAVE_BUTTONS
+ select ARCH_HAVE_IRQBUTTONS
+ ---help---
+ development board.
+ This port uses the NXP/FreeScale FREEDOM-K28F development board. This
+ board uses the Kinetis K28F MK28FN2M0VMI15 Cortex-M4 MCU.
+
config ARCH_BOARD_FREEDOM_K64F
bool "NXP Freedom-k64f development board"
depends on ARCH_CHIP_MK64FN1M0VLL12
@@ -1649,6 +1660,7 @@ config ARCH_BOARD
default "fire-stm32v2" if ARCH_BOARD_FIRE_STM32
default "flipnclick-pic32mz" if ARCH_BOARD_FLIPNCLICK_PIC32MZ
default "flipnclick-sam3x" if ARCH_BOARD_FLIPNCLICK_SAM3X
+ default "freedom-k28f" if ARCH_BOARD_FREEDOM_K28F
default "freedom-k64f" if ARCH_BOARD_FREEDOM_K64F
default "freedom-k66f" if ARCH_BOARD_FREEDOM_K66F
default "freedom-kl25z" if ARCH_BOARD_FREEDOM_KL25Z
@@ -1881,6 +1893,9 @@ endif
if ARCH_BOARD_FLIPNCLICK_SAM3X
source "configs/flipnclick-sam3x/Kconfig"
endif
+if ARCH_BOARD_FREEDOM_K28F
+source "configs/freedom-k28f/Kconfig"
+endif
if ARCH_BOARD_FREEDOM_K64F
source "configs/freedom-k64f/Kconfig"
endif
diff --git a/configs/README.txt b/configs/README.txt
index cfddc48cc82..3532bb8a407 100644
--- a/configs/README.txt
+++ b/configs/README.txt
@@ -273,6 +273,10 @@ configs/flipnclick-sam3x
Arduino DUE, this board features the Atmel ATSAM3X8E MCU running at 84
MHz.
+configs/freedom-k28f
+ This port uses the NXP/FreeScale FREEDOM-K28F development board. This
+ board uses the Kinetis K28F MK28FN2M0VMI15 Cortex-M4 MCU.
+
configs/freedom-k64f
This port uses the NXP/FreeScale FREEDOM-K64F development board. This board
uses the Kinetis K64 MK64FN1M0VLL12 Cortex-M4 MCU.
diff --git a/configs/freedom-k28f/Kconfig b/configs/freedom-k28f/Kconfig
new file mode 100644
index 00000000000..8a8ba84561f
--- /dev/null
+++ b/configs/freedom-k28f/Kconfig
@@ -0,0 +1,8 @@
+#
+# For a description of the syntax of this configuration file,
+# see the file kconfig-language.txt in the NuttX tools repository.
+#
+
+if ARCH_BOARD_FREEDOM_K28F
+
+endif
diff --git a/configs/freedom-k28f/README.txt b/configs/freedom-k28f/README.txt
index cf8fa642c3b..2fb76a2da2b 100644
--- a/configs/freedom-k28f/README.txt
+++ b/configs/freedom-k28f/README.txt
@@ -27,4 +27,118 @@ README
- CMSIS-DAP debug interface over a driverless USB HID connection providing
run-control debugging and compatibility with the IDE tools.
- Virtual serial port interface.
- - Open-source CMSIS-DAP software project.
\ No newline at end of file
+ - Open-source CMSIS-DAP software project.
+
+Serial Console
+==============
+
+ ----- --------------- -------------------------------
+ GPIO LPUART FUNCTION BOARD CONFIGURATION
+ ----- --------------- -------------------------------
+ PTA1 LPUART0_RX PTA1 GPIO0
+ PTA15 LPUART0_RX PTA15 FXIO0_D21
+ PTB14 LPUART0_RX PTB14
+ PTB16 LPUART0_RX PTB16 SDRAM_D17
+ PTC25 LPUART0_RX PTC25 LPUART0_RX_TGTMCU
+ PTD6 LPUART0_RX PTD6 Arduino_D17_ADC0_SE7b
+ PTA2 LPUART0_TX PTA2 INT
+ PTA14 LPUART0_TX PTA14 FXIO0_D20
+ PTB15 LPUART0_TX N/C
+ PTB17 LPUART0_TX PTB17 SDRAM_D16
+ PTC24 LPUART0_TX PTC24 LPUART0_TX_TGTMCU
+ PTD7 LPUART0_TX PTD7 SDRAM_CKE
+ PTA3 LPUART0_RTS PTA3
+ PTA17 LPUART0_RTS PTA17 FXIO0_D23
+ PTB2 LPUART0_RTS PTB2 Arduino_D19_ADC0_SE12/I2C0_SCL/SDRAM_WE
+ PTB12 LPUART0_RTS PTB12 Arduino_D5_FTM1_CH0/FTM0_CH4
+ PTC27 LPUART0_RTS PTC27 FXOS8700CQ_RESET
+ PTD4 LPUART0_RTS PTD4 SDRAM_A10
+ PTA0 LPUART0_CTS PTA0 K28F_SWD_CLK
+ PTA16 LPUART0_CTS PTA16 FXIO0_D22
+ PTB3 LPUART0_CTS PTB3 Arduino_D18_ADC0_SE13/I2C0_SDA/SDRAM_CS0
+ PTB13 LPUART0_CTS PTB13 Arduino_D6_FTM1_CH1/FTM0_CH5
+ PTC26 LPUART0_CTS PTC26 FXOS8700CQ_INT
+ PTD5 LPUART0_CTS PTD5 SDRAM_A9
+ ----- --------------- -------------------------------
+ PTD8 LPUART1_RX PTD8 FXIO0_D24
+ PTC3 LPUART1_RX PTC3 CLKOUT
+ PTE1 LPUART1_RX PTE1 QSPIA0_SCLK
+ PTC4 LPUART1_TX PTC4 SDRAM_A19
+ PTD9 LPUART1_TX PTD9 FXIO0_D25
+ PTE0 LPUART1_TX PTE0 QSPIA0_DATA3
+ PTD10 LPUART1_RTS PTD10 FXIO0_D26
+ PTC1 LPUART1_RTS PTC1 SDRAM_A21
+ PTE3 LPUART1_RTS PTE3 QSPIA0_DATA2
+ PTC2 LPUART1_CTS PTC1 SDRAM_A21
+ PTD11 LPUART1_CTS PTD11 FXIO0_D27
+ PTE2 LPUART1_CTS PTE2 QSPIA0_DATA0
+ ----- --------------- -------------------------------
+ PTA25 LPUART2_RX PTA25 SDHC0_D0/Arduino_D0_LPUART2_RX
+ PTD2 LPUART2_RX PTD2 SDRAM_A12
+ PTE13 LPUART2_RX N/C
+ PTE17 LPUART2_RX N/C
+ PTA24 LPUART2_TX PTA24 SDHC0_D1/Arduino_D1_LPUART2_TX
+ PTD3 LPUART2_TX PTD3 SDRAM_A11
+ PTE12 LPUART2_TX PTE12 I2S0_TX_BCLK
+ PTE16 LPUART2_TX N/C
+ PTD0 LPUART2_RTS PTD0 Button_LLWU_P12
+ PTA27 LPUART2_RTS PTA27 SDHC0_CMD
+ PTE19 LPUART2_RTS N/C
+ PTA26 LPUART2_CTS PTA26 SDHC0_DCLK
+ PTD1 LPUART2_CTS PTD1 Arduino_D16_ADC0_SE5b
+ PTE18 LPUART2_CTS N/C
+ ----- --------------- -------------------------------
+ PTA29 LPUART3_RX PTA29 SDHC0_D2
+ PTB10 LPUART3_RX PTB10 SDRAM_D19
+ PTC16 LPUART3_RX PTC16 SDRAM_DQM2
+ PTE5 LPUART3_RX PTE5 QSPIA0_SS0/USB0_SOF_OUT
+ PTA28 LPUART3_TX PTA28 SDHC0_D3
+ PTB11 LPUART3_TX PTB11 SDRAM_D18
+ PTC17 LPUART3_TX PTC17 SDRAM_DQM3
+ PTE4 LPUART3_TX PTE4 QSPIA0_DATA1
+ PTB8 LPUART3_RTS PTB8 SDRAM_D21
+ PTA31 LPUART3_RTS PTA31
+ PTC18 LPUART3_RTS PTC18 Arduino_D7
+ PTE7 LPUART3_RTS PTE7 I2S0_RXD0/LEDRGB_GREEN
+ PTA30 LPUART3_CTS PTA30
+ PTB9 LPUART3_CTS PTB9 SDRAM_D20
+ PTC19 LPUART3_CTS PTC19 Arduino_D8
+ PTE6 LPUART3_CTS PTE6 I2S0_MCK/LEDRGB_RED
+ ----- --------------- -------------------------------
+ PTA21 LPUART4_RX PTA21 TE/FXIO0_D9
+ PTC14 LPUART4_RX PTC14 SDRAM_D25
+ PTE21 LPUART4_RX N/C
+ PTA20 LPUART4_TX PTA20 RD/FXIO0_D8
+ PTC15 LPUART4_TX PTC15 SDRAM_D24
+ PTE20 LPUART4_TX N/C
+ PTA23 LPUART4_RTS PTA23 WR/FXIO0_D7
+ PTC12 LPUART4_RTS PTC12 SDRAM_D27
+ PTE23 LPUART4_RTS N/C
+ PTA22 LPUART4_CTS PTA22 CS/FXIO0_D6
+ PTC13 LPUART4_CTS PTC13 SDRAM_D26
+ PTE22 LPUART4_CTS N/C
+ ----- --------------- -------------------------------
+
+ Arduino RS-232 Shield
+ ---------------------
+
+ ----- --------------- -------------------------------
+ GPIO LPUART FUNCTION BOARD CONFIGURATION
+ ----- --------------- -------------------------------
+ PTA25 LPUART2_RX PTA25 SDHC0_D0/Arduino_D0_LPUART2_RX
+ PTA24 LPUART2_TX PTA24 SDHC0_D1/Arduino_D1_LPUART2_TX
+ ----- --------------- -------------------------------
+
+ Note: PTA24 and PTA25 are shared between Micro SD Card circuit and
+ Arduino connectors. Remove R106 and R107 or R94 and R11 as necessary to
+ prevent contention.
+
+ TGTMCU
+ ------
+
+ ----- --------------- -------------------------------
+ GPIO LPUART FUNCTION BOARD CONFIGURATION
+ ----- --------------- -------------------------------
+ PTC25 LPUART0_RX PTC25 LPUART0_RX_TGTMCU
+ PTC24 LPUART0_TX PTC24 LPUART0_TX_TGTMCU
+ ----- --------------- -------------------------------
diff --git a/configs/freedom-k28f/include/board.h b/configs/freedom-k28f/include/board.h
new file mode 100644
index 00000000000..7026c9680bf
--- /dev/null
+++ b/configs/freedom-k28f/include/board.h
@@ -0,0 +1,263 @@
+/************************************************************************************
+ * configs/freedom-k28f/include/board.h
+ *
+ * Copyright (C) 2018 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt
+ *
+ * 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.
+ *
+ ************************************************************************************/
+
+#ifndef __CONFIGS_FREEDOM_K28F_INCLUDE_BOARD_H
+#define __CONFIGS_FREEDOM_K28F_INCLUDE_BOARD_H
+
+/************************************************************************************
+ * Included Files
+ ************************************************************************************/
+
+#include
+
+#ifndef __ASSEMBLY__
+# include
+# include
+#endif
+
+/************************************************************************************
+ * Pre-processor Definitions
+ ************************************************************************************/
+
+/* Clocking *************************************************************************/
+/* The freedom-k28f has a 12MHz crystal on board */
+
+#undef BOARD_EXTCLOCK /* Crystal */
+#define BOARD_EXTAL_LP /* Low Power, as opposed to Hi Gain */
+
+/* BOARD_FRDIV is MCG_C1_FRDIV_DIV512 from kinetis_mcg.h. According to the k20
+ * reference manual, when transitioning MCG clock modes to FLL Bypassed External
+ * the C1 divider must be set so that the FLL clock is between 31.25 and 39.0625 khz.
+ * For freedom-k28f that works out to a divider of 512.
+ */
+
+#define BOARD_FRDIV MCG_C1_FRDIV_DIV512
+
+#define BOARD_EXTAL_FREQ 12000000 /* 12MHz crystal frequency (REFCLK, Y2) */
+#define BOARD_XTAL32_FREQ 32768 /* 32KHz RTC Oscillator (Y1) */
+
+/* PLL Configuration. NOTE: Only even frequency crystals are supported that will
+ * produce a 2MHz reference clock to the PLL. The rated speed for the MK20DX256VLH7
+ * is 72MHz and 50MHz for the MK20DX128VLH5.
+ *
+ * MK20DX128VLH5 Rated Frequency 50MHz (selecting 48Mhz to use USB)
+ *
+ * PLL Input frequency: PLLIN = REFCLK/PRDIV = 16MHz/8 = 2MHz
+ * PLL Output frequency: PLLOUT = PLLIN*VDIV = 2Mhz*24 = 48MHz
+ * MCG Frequency: PLLOUT = 48MHz
+ *
+ * MK20DX256VLH7 Rated Frequency 72MHz
+ *
+ * PLL Input frequency: PLLIN = REFCLK/PRDIV = 16MHz/8 = 2MHz
+ * PLL Output frequency: PLLOUT = PLLIN*VDIV = 2Mhz*36 = 72MHz
+ * MCG Frequency: PLLOUT = 72MHz
+ */
+
+/* PLL Configuration */
+
+#define BOARD_PRDIV 8 /* PLL External Reference Divider */
+#define BOARD_VDIV 24 /* PLL VCO Divider (frequency multiplier) */
+
+/* SIM CLKDIV1 dividers */
+
+#define BOARD_OUTDIV1 1 /* Core = MCG, 48MHz */
+#define BOARD_OUTDIV2 1 /* Bus = MCG/1, 48MHz */
+#define BOARD_OUTDIV3 0 /* N/A = No OUTDIV3 */
+#define BOARD_OUTDIV4 2 /* Flash clock = MCG/2, 24MHz */
+
+#define BOARD_PLLIN_FREQ (BOARD_EXTAL_FREQ / BOARD_PRDIV)
+#define BOARD_PLLOUT_FREQ (BOARD_PLLIN_FREQ * BOARD_VDIV)
+#define BOARD_MCG_FREQ BOARD_PLLOUT_FREQ
+
+#define BOARD_CORECLK_FREQ (BOARD_MCG_FREQ / BOARD_OUTDIV1)
+#define BOARD_BUS_FREQ (BOARD_MCG_FREQ / BOARD_OUTDIV2)
+#define BOARD_FLEXBUS_FREQ (BOARD_MCG_FREQ / BOARD_OUTDIV3)
+#define BOARD_FLASHCLK_FREQ (BOARD_MCG_FREQ / BOARD_OUTDIV4)
+
+/* Use MCGPLLCLK as the output SIM_SOPT2 MUX selected by
+ * SIM_SOPT2[PLLFLLSEL]
+ */
+
+#define BOARD_SOPT2_PLLFLLSEL SIM_SOPT2_PLLFLLSEL_MCGPLLCLK
+#define BOARD_SOPT2_FREQ BOARD_MCG_FREQ
+
+ /* Divider output clock = Divider input clock × [ (USBFRAC+1) / (USBDIV+1) ]
+ * SIM_CLKDIV2_FREQ = BOARD_SOPT2_FREQ × [ (USBFRAC+1) / (USBDIV+1) ]
+ */
+
+#if BOARD_SOPT2_FREQ == 96000000
+ /* USBFRAC/USBDIV = 1/2 of 96Mhz clock = 48MHz */
+
+# define BOARD_SIM_CLKDIV2_USBFRAC 1
+# define BOARD_SIM_CLKDIV2_USBDIV 2
+#elif BOARD_SOPT2_FREQ == 72000000
+ /* USBFRAC/USBDIV = 2/3 of 72Mhz clock = 48MHz */
+
+# define BOARD_SIM_CLKDIV2_USBFRAC 2
+# define BOARD_SIM_CLKDIV2_USBDIV 3
+#elif BOARD_SOPT2_FREQ == 48000000
+ /* USBFRAC/USBDIV = 1/1 of 48Mhz clock = 48MHz */
+
+# define BOARD_SIM_CLKDIV2_USBFRAC 1
+# define BOARD_SIM_CLKDIV2_USBDIV 1
+#endif
+
+#define BOARD_SIM_CLKDIV2_FREQ (BOARD_SOPT2_FREQ / \
+ BOARD_SIM_CLKDIV2_USBDIV * \
+ BOARD_SIM_CLKDIV2_USBFRAC)
+
+/* Use the output of SIM_SOPT2[PLLFLLSEL] as the USB clock source */
+
+#define BOARD_USB_CLKSRC SIM_SOPT2_USBSRC
+#define BOARD_USB_FREQ BOARD_SIM_CLKDIV2_FREQ
+
+/* Allow USBOTG-FS Controller to Read from FLASH */
+
+#define BOARD_USB_FLASHACCESS
+
+/* PWM Configuration */
+/* FTM0 Channels */
+
+#define GPIO_FTM0_CH0OUT PIN_FTM0_CH0_2 /* Pin 22: PTC1 */
+#define GPIO_FTM0_CH1OUT PIN_FTM0_CH1_2 /* Pin 23: PTC2 */
+#define GPIO_FTM0_CH2OUT PIN_FTM0_CH2_2 /* Pin 9: PTC3 */
+#define GPIO_FTM0_CH3OUT PIN_FTM0_CH3 /* Pin 10: PTC4 */
+#define GPIO_FTM0_CH4OUT PIN_FTM0_CH4 /* Pin 6: PTD4 */
+#define GPIO_FTM0_CH5OUT PIN_FTM0_CH5_2 /* Pin 20: PTD5 */
+#define GPIO_FTM0_CH6OUT PIN_FTM0_CH6_2 /* Pin 21: PTD6 */
+#define GPIO_FTM0_CH7OUT PIN_FTM0_CH7_2 /* Pin 5: PTD7 */
+
+/* FTM1 Channels */
+
+#define GPIO_FTM1_CH0OUT PIN_FTM1_CH0_1 /* Pin 3: PTA12 */
+#define GPIO_FTM1_CH1OUT PIN_FTM1_CH1_1 /* Pin 4: PTA13 */
+
+/* FTM2 Channels */
+
+#define GPIO_FTM2_CH0OUT PIN_FTM2_CH0 /* Pin 25: PTB18 */
+#define GPIO_FTM2_CH1OUT PIN_FTM2_CH1 /* Pin 32: PTB19 */
+
+/* LED definitions ******************************************************************/
+/* A single LED is available driven by PTC5. The LED is grounded so bringing PTC5
+ * high will illuminate the LED.
+ */
+
+/* LED index values for use with board_userled() */
+
+#define BOARD_LED 0
+#define BOARD_NLEDS 1
+
+/* LED bits for use with board_userled_all() */
+
+#define BOARD_LED_BIT (1 << BOARD_LED)
+
+/* When CONFIG_ARCH_LEDS is defined in the NuttX configuration, NuttX will
+ * control the LED as defined below. Thus if the LED is statically on, NuttX has
+ * successfully booted and is, apparently, running normally. If the LED is
+ * flashing at approximately 2Hz, then a fatal error has been detected and the
+ * system has halted.
+ */
+
+#define LED_STARTED 0 /* STATUS LED=OFF */
+#define LED_HEAPALLOCATE 0 /* STATUS LED=OFF */
+#define LED_IRQSENABLED 0 /* STATUS LED=OFF */
+#define LED_STACKCREATED 1 /* STATUS LED=ON */
+#define LED_INIRQ 2 /* STATUS LED=no change */
+#define LED_SIGNAL 2 /* STATUS LED=no change */
+#define LED_ASSERTION 3 /* STATUS LED=no change */
+#define LED_PANIC 3 /* STATUS LED=flashing */
+
+/* Button definitions ***************************************************************/
+/* The freedom-k28f board has no standard GPIO contact buttons */
+
+/* Alternative pin resolution *******************************************************/
+/* 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).
+ */
+
+#ifdef CONFIG_KINETIS_UART0
+# define PIN_UART0_RX PIN_UART0_RX_2
+# define PIN_UART0_TX PIN_UART0_TX_2
+#endif
+
+#ifdef CONFIG_KINETIS_UART1
+# define PIN_UART0_RX PIN_UART1_RX_1
+# define PIN_UART0_TX PIN_UART1_TX_1
+#endif
+
+#ifdef CONFIG_KINETIS_I2C0
+#ifdef CONFIG_FREEDOM_K28F_I2C_ALT_PINS
+# define PIN_I2C0_SCL (PIN_I2C0_SCL_1 | PIN_ALT2_OPENDRAIN | PIN_ALT2_SLOW)
+# define PIN_I2C0_SDA (PIN_I2C0_SDA_1 | PIN_ALT2_OPENDRAIN | PIN_ALT2_SLOW)
+#else
+# define PIN_I2C0_SCL (PIN_I2C0_SCL_2 | PIN_ALT2_OPENDRAIN | PIN_ALT2_SLOW)
+# define PIN_I2C0_SDA (PIN_I2C0_SDA_2 | PIN_ALT2_OPENDRAIN | PIN_ALT2_SLOW)
+#endif
+#endif
+
+/* REVISIT: Added only for clean compilation with I2C1 enabled. */
+
+#ifdef CONFIG_KINETIS_I2C1
+#ifdef CONFIG_FREEDOM_K28F_I2C_ALT_PINS
+# define PIN_I2C1_SCL (PIN_I2C1_SCL_1 | PIN_ALT2_OPENDRAIN | PIN_ALT2_SLOW)
+# define PIN_I2C1_SDA (PIN_I2C1_SDA_1 | PIN_ALT2_OPENDRAIN | PIN_ALT2_SLOW)
+#else
+# define PIN_I2C1_SCL (PIN_I2C1_SCL_2 | PIN_ALT2_OPENDRAIN | PIN_ALT2_SLOW)
+# define PIN_I2C1_SDA (PIN_I2C1_SDA_2 | PIN_ALT2_OPENDRAIN | PIN_ALT2_SLOW)
+#endif
+#endif
+
+#endif /* __CONFIGS_FREEDOM_K28F_INCLUDE_BOARD_H */
diff --git a/configs/freedom-k28f/nsh/defconfig b/configs/freedom-k28f/nsh/defconfig
new file mode 100644
index 00000000000..3cb34a6836d
--- /dev/null
+++ b/configs/freedom-k28f/nsh/defconfig
@@ -0,0 +1,49 @@
+# CONFIG_ARCH_FPU is not set
+# CONFIG_NSH_ARGCAT is not set
+# CONFIG_NSH_CMDOPT_HEXDUMP is not set
+# CONFIG_NSH_CMDPARMS is not set
+# CONFIG_NSH_DISABLE_IFCONFIG is not set
+# CONFIG_NSH_DISABLE_PS is not set
+CONFIG_ARCH="arm"
+CONFIG_ARCH_BOARD="freedom-k28f"
+CONFIG_ARCH_BOARD_FREEDOM_K28F=y
+CONFIG_ARCH_CHIP_KINETIS=y
+CONFIG_ARCH_CHIP_MK28FN2M0VMI15=y
+CONFIG_ARCH_STACKDUMP=y
+CONFIG_ARMV7M_TOOLCHAIN_GNU_EABIL=y
+CONFIG_BOARD_LOOPSPERMSEC=6024
+CONFIG_BUILTIN=y
+CONFIG_DEBUG_FULLOPT=y
+CONFIG_DEBUG_SYMBOLS=y
+CONFIG_DISABLE_POLL=y
+CONFIG_EXAMPLES_NSH=y
+CONFIG_HOST_WINDOWS=y
+CONFIG_INTELHEX_BINARY=y
+CONFIG_KINETIS_SERIALBRK_BSDCOMPAT=y
+CONFIG_KINETIS_UART0=y
+CONFIG_KINETIS_UARTFIFOS=y
+CONFIG_KINETIS_UART_BREAKS=y
+CONFIG_MAX_TASKS=16
+CONFIG_MAX_WDOGPARMS=2
+CONFIG_NFILE_DESCRIPTORS=8
+CONFIG_NFILE_STREAMS=8
+CONFIG_NSH_BUILTIN_APPS=y
+CONFIG_NSH_FILEIOSIZE=512
+CONFIG_NSH_LINELEN=64
+CONFIG_NSH_READLINE=y
+CONFIG_PREALLOC_MQ_MSGS=4
+CONFIG_PREALLOC_TIMERS=4
+CONFIG_PREALLOC_WDOGS=16
+CONFIG_RAM_SIZE=65536
+CONFIG_RAM_START=0x1fff8000
+CONFIG_RAW_BINARY=y
+CONFIG_RR_INTERVAL=200
+CONFIG_SCHED_WAITPID=y
+CONFIG_SDCLONE_DISABLE=y
+CONFIG_SERIAL_TERMIOS=y
+CONFIG_SPI=y
+CONFIG_START_DAY=2
+CONFIG_START_MONTH=5
+CONFIG_TASK_NAME_SIZE=0
+CONFIG_UART0_SERIAL_CONSOLE=y
+CONFIG_USER_ENTRYPOINT="nsh_main"
diff --git a/configs/freedom-k28f/scripts/Make.defs b/configs/freedom-k28f/scripts/Make.defs
new file mode 100644
index 00000000000..073fcdeac31
--- /dev/null
+++ b/configs/freedom-k28f/scripts/Make.defs
@@ -0,0 +1,114 @@
+############################################################################
+# configs/freedom-k28f/scripts/Make.defs
+#
+# Copyright (C) 2018 Gregory Nutt. All rights reserved.
+# Author: Gregory Nutt
+#
+# 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.
+#
+############################################################################
+
+include ${TOPDIR}/.config
+include ${TOPDIR}/tools/Config.mk
+include ${TOPDIR}/arch/arm/src/armv7-m/Toolchain.defs
+
+LDSCRIPT = flash.ld
+
+ifeq ($(WINTOOL),y)
+ # Windows-native toolchains
+ DIRLINK = $(TOPDIR)/tools/copydir.sh
+ DIRUNLINK = $(TOPDIR)/tools/unlink.sh
+ MKDEP = $(TOPDIR)/tools/mkwindeps.sh
+ ARCHINCLUDES = -I. -isystem "${shell cygpath -w $(TOPDIR)/include}"
+ ARCHXXINCLUDES = -I. -isystem "${shell cygpath -w $(TOPDIR)/include}" -isystem "${shell cygpath -w $(TOPDIR)/include/cxx}"
+ ARCHSCRIPT = -T "${shell cygpath -w $(TOPDIR)/configs/$(CONFIG_ARCH_BOARD)/scripts/$(LDSCRIPT)}"
+else
+ # Linux/Cygwin-native toolchain
+ MKDEP = $(TOPDIR)/tools/mkdeps$(HOSTEXEEXT)
+ ARCHINCLUDES = -I. -isystem $(TOPDIR)/include
+ ARCHXXINCLUDES = -I. -isystem $(TOPDIR)/include -isystem $(TOPDIR)/include/cxx
+ ARCHSCRIPT = -T$(TOPDIR)/configs/$(CONFIG_ARCH_BOARD)/scripts/$(LDSCRIPT)
+endif
+
+CC = $(CROSSDEV)gcc
+CXX = $(CROSSDEV)g++
+CPP = $(CROSSDEV)gcc -E
+LD = $(CROSSDEV)ld
+STRIP = $(CROSSDEV)strip --strip-unneeded
+AR = $(ARCROSSDEV)ar rcs
+NM = $(ARCROSSDEV)nm
+OBJCOPY = $(CROSSDEV)objcopy
+OBJDUMP = $(CROSSDEV)objdump
+
+ARCHCCVERSION = ${shell $(CC) -v 2>&1 | sed -n '/^gcc version/p' | sed -e 's/^gcc version \([0-9\.]\)/\1/g' -e 's/[-\ ].*//g' -e '1q'}
+ARCHCCMAJOR = ${shell echo $(ARCHCCVERSION) | cut -d'.' -f1}
+
+ifeq ($(CONFIG_DEBUG_SYMBOLS),y)
+ ARCHOPTIMIZATION = -g
+endif
+
+ifneq ($(CONFIG_DEBUG_NOOPT),y)
+ ARCHOPTIMIZATION += $(MAXOPTIMIZATION) -fno-strict-aliasing -fno-strength-reduce -fomit-frame-pointer
+endif
+
+ARCHCFLAGS = -fno-builtin
+ARCHCXXFLAGS = -fno-builtin -fno-exceptions -fcheck-new -fno-rtti
+ARCHWARNINGS = -Wall -Wstrict-prototypes -Wshadow -Wundef
+ARCHWARNINGSXX = -Wall -Wshadow -Wundef
+ARCHDEFINES =
+ARCHPICFLAGS = -fpic -msingle-pic-base -mpic-register=r10
+
+CFLAGS = $(ARCHCFLAGS) $(ARCHWARNINGS) $(ARCHOPTIMIZATION) $(ARCHCPUFLAGS) $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRADEFINES) -pipe
+CPICFLAGS = $(ARCHPICFLAGS) $(CFLAGS)
+CXXFLAGS = $(ARCHCXXFLAGS) $(ARCHWARNINGSXX) $(ARCHOPTIMIZATION) $(ARCHCPUFLAGS) $(ARCHXXINCLUDES) $(ARCHDEFINES) $(EXTRADEFINES) -pipe
+CXXPICFLAGS = $(ARCHPICFLAGS) $(CXXFLAGS)
+CPPFLAGS = $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRADEFINES)
+AFLAGS = $(CFLAGS) -D__ASSEMBLY__
+
+NXFLATLDFLAGS1 = -r -d -warn-common
+NXFLATLDFLAGS2 = $(NXFLATLDFLAGS1) -T$(TOPDIR)/binfmt/libnxflat/gnu-nxflat-pcrel.ld -no-check-sections
+LDNXFLATFLAGS = -e main -s 2048
+
+ASMEXT = .S
+OBJEXT = .o
+LIBEXT = .a
+EXEEXT =
+
+ifneq ($(CROSSDEV),arm-nuttx-elf-)
+ LDFLAGS += -nostartfiles -nodefaultlibs
+endif
+ifeq ($(CONFIG_DEBUG_SYMBOLS),y)
+ LDFLAGS += -g
+endif
+
+
+HOSTCC = gcc
+HOSTINCLUDES = -I.
+HOSTCFLAGS = -Wall -Wstrict-prototypes -Wshadow -Wundef -g -pipe
+HOSTLDFLAGS =
+
diff --git a/configs/freedom-k28f/scripts/flash.ld b/configs/freedom-k28f/scripts/flash.ld
new file mode 100644
index 00000000000..e28f3cf80f7
--- /dev/null
+++ b/configs/freedom-k28f/scripts/flash.ld
@@ -0,0 +1,160 @@
+/****************************************************************************
+ * configs/freedom-k28f/scripts/flash.ld
+ *
+ * Copyright (C) 2018 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt
+ *
+ * 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 MK28FN2M0VMI15 has 2Mb of FLASH beginning at address 0x0000:0000 and
+ * 1024Kb of SRAM as follows.
+
+ * This device contains TCRAM that is tightly coupled to the ARM Cortex-M4
+ * core as well as OCRAM that is not tightly coupled to ARM Cortex-M4 core.
+ * The TCRAM is split into SRAM_L and SRAM_U regions where the SRAM_L and
+ * SRAM_U ranges form a contiguous block in the memory map anchored at
+ * address 0x20000000. As such:
+ *
+ * - SRAM_L is anchored at address 0x20000000 and occupies the space below
+ * this address, that is, addresses less than 0x20000000.
+ * - SRAM_U is anchored at address 0x2000_0000 and occupies the space at and
+ * above this beginning address, that is, addresses greater than or equal
+ * to 0x20000000.
+ *
+ * FLASH is arranged as 4 blocks of 512 kB of program flash each block
+ * consisting of 4Kb sectors. The first part of the K28F FLASH region is
+ * reserved for interrupt vectflash.
+ */
+
+MEMORY
+{
+ vectflash (rx) : ORIGIN = 0x00000000, LENGTH = 1K
+ cfmprotect (rx) : ORIGIN = 0x00000400, LENGTH = 16
+ progflash (rx) : ORIGIN = 0x00000800, LENGTH = 1M - 2K
+ tcm (rwx) : ORIGIN = 0x1ffc0000, LENGTH = 512K
+ ocram (rwx) : ORIGIN = 0x34000000, LENGTH = 512K
+}
+
+OUTPUT_ARCH(arm)
+ENTRY(_stext)
+EXTERN(__flashconfigbytes)
+SECTIONS
+{
+ .vectors :
+ {
+ _svectors = ABSOLUTE(.);
+ *(.vectors)
+ _evectors = ABSOLUTE(.);
+ } > vectflash
+
+ .cfmprotect :
+ {
+ KEEP(*(.cfmconfig))
+ } > cfmprotect
+
+ .text :
+ {
+ _stext = ABSOLUTE(.);
+ *(.text .text.*)
+ *(.fixup)
+ *(.gnu.warning)
+ *(.rodata .rodata.*)
+ *(.gnu.linkonce.t.*)
+ *(.glue_7)
+ *(.glue_7t)
+ *(.got)
+ *(.gcc_except_table)
+ *(.gnu.linkonce.r.*)
+ _etext = ABSOLUTE(.);
+ } > progflash
+
+ .init_section :
+ {
+ _sinit = ABSOLUTE(.);
+ *(.init_array .init_array.*)
+ _einit = ABSOLUTE(.);
+ } > progflash
+
+ .ARM.extab :
+ {
+ *(.ARM.extab*)
+ } > progflash
+
+ __exidx_start = ABSOLUTE(.);
+ .ARM.exidx :
+ {
+ *(.ARM.exidx*)
+ } > progflash
+ __exidx_end = ABSOLUTE(.);
+
+ .data :
+ {
+ _sdata = ABSOLUTE(.);
+ *(.data .data.*)
+ *(.gnu.linkonce.d.*)
+ CONSTRUCTORS
+ _edata = ABSOLUTE(.);
+ } > ocram AT > progflash
+
+ _eronly = LOADADDR(.data);
+
+ .ramfunc ALIGN(4):
+ {
+ _sramfuncs = ABSOLUTE(.);
+ *(.ramfunc .ramfunc.*)
+ _eramfuncs = ABSOLUTE(.);
+ } > ocram AT > progflash
+
+ _framfuncs = LOADADDR(.ramfunc);
+
+ .bss :
+ {
+ _sbss = ABSOLUTE(.);
+ *(.bss .bss.*)
+ *(.gnu.linkonce.b.*)
+ *(COMMON)
+ _ebss = ABSOLUTE(.);
+ } > ocram
+
+ /* Stabs debugging sections. */
+
+ .stab 0 : { *(.stab) }
+ .stabstr 0 : { *(.stabstr) }
+ .stab.excl 0 : { *(.stab.excl) }
+ .stab.exclstr 0 : { *(.stab.exclstr) }
+ .stab.index 0 : { *(.stab.index) }
+ .stab.indexstr 0 : { *(.stab.indexstr) }
+ .comment 0 : { *(.comment) }
+ .debug_abbrev 0 : { *(.debug_abbrev) }
+ .debug_info 0 : { *(.debug_info) }
+ .debug_line 0 : { *(.debug_line) }
+ .debug_pubnames 0 : { *(.debug_pubnames) }
+ .debug_aranges 0 : { *(.debug_aranges) }
+}
diff --git a/configs/freedom-k28f/src/.gitignore b/configs/freedom-k28f/src/.gitignore
new file mode 100644
index 00000000000..726d936e1e3
--- /dev/null
+++ b/configs/freedom-k28f/src/.gitignore
@@ -0,0 +1,2 @@
+/.depend
+/Make.dep
diff --git a/configs/freedom-k28f/src/Makefile b/configs/freedom-k28f/src/Makefile
new file mode 100644
index 00000000000..143b7ff361a
--- /dev/null
+++ b/configs/freedom-k28f/src/Makefile
@@ -0,0 +1,58 @@
+############################################################################
+# configs/freedom-k28f/src/Makefile
+#
+# Copyright (C) 2018 Gregory Nutt. All rights reserved.
+# Author: Gregory Nutt
+#
+# 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.
+#
+############################################################################
+
+-include $(TOPDIR)/Make.defs
+
+ASRCS =
+CSRCS = k28_boot.c k28_bringup.c k28_spi.c k28_i2c.c
+
+ifeq ($(CONFIG_ARCH_LEDS),y)
+CSRCS += k28_autoleds.c
+else
+CSRCS += k28_userleds.c
+endif
+ifeq ($(CONFIG_KINETIS_USBOTG),y)
+CSRCS += k28_usbdev.c
+endif
+
+ifeq ($(CONFIG_LIB_BOARDCTL),y)
+CSRCS += k28_appinit.c
+endif
+
+ifeq ($(CONFIG_PWM),y)
+CSRCS += k28_pwm.c
+endif
+
+include $(TOPDIR)/configs/Board.mk
diff --git a/configs/freedom-k28f/src/freedom-k28f.h b/configs/freedom-k28f/src/freedom-k28f.h
new file mode 100644
index 00000000000..ef2fc08bcbd
--- /dev/null
+++ b/configs/freedom-k28f/src/freedom-k28f.h
@@ -0,0 +1,135 @@
+/****************************************************************************
+ * configs/freedom-k28f/src/freedom-k28f.h
+ *
+ * Copyright (C) 2018 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt
+ *
+ * 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.
+ *
+ ****************************************************************************/
+
+#ifndef __CONFIGS_FREEDOM_K28F_SRC_FREEDOM_K28F_H
+#define __CONFIGS_FREEDOM_K28F_SRC_FREEDOM_K28F_H
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include
+#include
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
+/* Freedom-K28F GPIOs *******************************************************/
+
+/****************************************************************************
+ * Public Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public data
+ ****************************************************************************/
+
+#ifndef __ASSEMBLY__
+
+struct i2c_master_s; /* Forward reference */
+
+#ifdef CONFIG_KINETIS_I2C0
+extern FAR struct i2c_master_s* g_i2c0_dev;
+#endif
+#ifdef CONFIG_KINETIS_I2C1
+extern FAR struct i2c_master_s* g_i2c1_dev;
+#endif
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: k28_bringup
+ *
+ * Description:
+ * Perform architecture-specific initialization
+ *
+ * CONFIG_BOARD_INITIALIZE=y :
+ * Called from board_initialize().
+ *
+ * CONFIG_BOARD_INITIALIZE=y && CONFIG_LIB_BOARDCTL=y :
+ * Called from the NSH library
+ *
+ ****************************************************************************/
+
+int k28_bringup(void);
+
+/****************************************************************************
+ * Name: k28_spidev_initialize
+ *
+ * Description:
+ * Called to configure SPI chip select GPIO pins for the KwikStik-K40
+ * board.
+ *
+ ****************************************************************************/
+
+void weak_function k28_spidev_initialize(void);
+
+/****************************************************************************
+ * Name: k28_i2cdev_initialize
+ *
+ * Description:
+ * Called to configure I2C
+ *
+ *****************************************************************************/
+
+void k28_i2cdev_initialize(void);
+
+/****************************************************************************
+ * Name: k28_usbdev_initialize
+ *
+ * Description:
+ * Called to setup USB-related GPIO pins for the Freedom K28F board.
+ *
+ ****************************************************************************/
+
+extern void weak_function k28_usbdev_initialize(void);
+
+/****************************************************************************
+ * Name: k28_pwm_setup
+ *
+ * Description:
+ * Initialize PWM and register the PWM device.
+ *
+ ****************************************************************************/
+
+#ifdef CONFIG_PWM
+int k28_pwm_setup(void);
+#endif
+
+#endif /* __ASSEMBLY__ */
+#endif /* __CONFIGS_FREEDOM_K28F_SRC_FREEDOM_K28F_H */
diff --git a/configs/freedom-k28f/src/k28_appinit.c b/configs/freedom-k28f/src/k28_appinit.c
new file mode 100644
index 00000000000..9b0d7146387
--- /dev/null
+++ b/configs/freedom-k28f/src/k28_appinit.c
@@ -0,0 +1,102 @@
+/****************************************************************************
+ * config/freedom-k28f/src/k28_appinit.c
+ *
+ * Copyright (C) 2018 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt
+ *
+ * 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
+
+#include
+#include
+
+#include
+
+#include "kinetis_usbotg.h"
+#include "freedom-k28f.h"
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
+#ifndef OK
+# define OK 0
+#endif
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: board_app_initialize
+ *
+ * Description:
+ * Perform application specific initialization. This function is never
+ * called directly from application code, but only indirectly via the
+ * (non-standard) boardctl() interface using the command BOARDIOC_INIT.
+ *
+ * Input Parameters:
+ * arg - The boardctl() argument is passed to the board_app_initialize()
+ * implementation without modification. The argument has no
+ * meaning to NuttX; the meaning of the argument is a contract
+ * between the board-specific initialization logic and the
+ * matching application logic. The value cold be such things as a
+ * mode enumeration value, a set of DIP switch switch settings, a
+ * pointer to configuration data read from a file or serial FLASH,
+ * or whatever you would like to do with it. Every implementation
+ * should accept zero/NULL as a default configuration.
+ *
+ * Returned Value:
+ * Zero (OK) is returned on success; a negated errno value is returned on
+ * any failure to indicate the nature of the failure.
+ *
+ ****************************************************************************/
+
+int board_app_initialize(uintptr_t arg)
+{
+#ifdef CONFIG_BOARD_INITIALIZE
+ /* Board initialization already performed by board_initialize() */
+
+ return OK;
+#else
+ /* Perform board-specific initialization */
+
+ return k28_bringup();
+#endif
+}
diff --git a/configs/freedom-k28f/src/k28_autoleds.c b/configs/freedom-k28f/src/k28_autoleds.c
new file mode 100644
index 00000000000..02329cbb787
--- /dev/null
+++ b/configs/freedom-k28f/src/k28_autoleds.c
@@ -0,0 +1,92 @@
+/****************************************************************************
+ * configs/freedom-k28f/src/k28_autoleds.c
+ *
+ * Copyright (C) 2015 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt
+ *
+ * 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
+
+#include
+
+#include
+
+#include "kinetis.h"
+#include "freedom-k28f.h"
+
+#ifdef CONFIG_ARCH_LEDS
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: board_autoled_initialize
+ *
+ * Description:
+ * Initialize LED GPIOs so that LEDs can be controlled.
+ *
+ ****************************************************************************/
+
+void board_autoled_initialize(void)
+{
+ kinetis_pinconfig(GPIO_LED);
+}
+
+/****************************************************************************
+ * Name: board_autoled_on
+ ****************************************************************************/
+
+void board_autoled_on(int led)
+{
+ if (led != 2)
+ {
+ kinetis_gpiowrite(GPIO_LED, (led != 0));
+ }
+}
+
+/****************************************************************************
+ * Name: board_autoled_off
+ ****************************************************************************/
+
+void board_autoled_off(int led)
+{
+ if (led != 2)
+ {
+ kinetis_gpiowrite(GPIO_LED, false);
+ }
+}
+
+#endif /* CONFIG_ARCH_LEDS */
diff --git a/configs/freedom-k28f/src/k28_boot.c b/configs/freedom-k28f/src/k28_boot.c
new file mode 100644
index 00000000000..065850eb85d
--- /dev/null
+++ b/configs/freedom-k28f/src/k28_boot.c
@@ -0,0 +1,103 @@
+/************************************************************************************
+ * configs/freedom-k28f/src/k28_boot.c
+ *
+ * Copyright (C) 2018 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt
+ *
+ * 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
+
+#include
+
+#include
+#include
+
+#include "freedom-k28f.h"
+
+/************************************************************************************
+ * Public Functions
+ ************************************************************************************/
+
+/************************************************************************************
+ * Name: kinetis_boardinitialize
+ *
+ * Description:
+ * All Kinetis architectures must provide the following entry point. This entry
+ * point is called early in the initialization -- after all memory has been
+ * configured and mapped but before any devices have been initialized.
+ *
+ ************************************************************************************/
+
+void kinetis_boardinitialize(void)
+{
+#if defined(CONFIG_KINETIS_SPI1) || defined(CONFIG_KINETIS_SPI2)
+ /* Configure SPI chip selects if 1) SPI is not disabled, and 2) the weak function
+ * k28_spidev_initialize() has been brought into the link.
+ */
+
+ if (k28_spidev_initialize)
+ {
+ k28_spidev_initialize();
+ }
+#endif
+
+#ifdef CONFIG_ARCH_LEDS
+ /* Configure on-board LEDs if LED support has been selected. */
+
+ board_autoled_initialize();
+#endif
+}
+
+/****************************************************************************
+ * Name: board_initialize
+ *
+ * Description:
+ * If CONFIG_BOARD_INITIALIZE is selected, then an additional
+ * initialization call will be performed in the boot-up sequence to a
+ * function called board_initialize(). board_initialize() will be
+ * called immediately after up_initialize() is called and just before the
+ * initial application is started. This additional initialization phase
+ * may be used, for example, to initialize board-specific device drivers.
+ *
+ ****************************************************************************/
+
+#ifdef CONFIG_BOARD_INITIALIZE
+void board_initialize(void)
+{
+ /* Perform board-specific initialization */
+
+ (void)k28_bringup();
+}
+#endif
diff --git a/configs/freedom-k28f/src/k28_bringup.c b/configs/freedom-k28f/src/k28_bringup.c
new file mode 100644
index 00000000000..374af659b58
--- /dev/null
+++ b/configs/freedom-k28f/src/k28_bringup.c
@@ -0,0 +1,98 @@
+/****************************************************************************
+ * config/freedom-k28f/src/k28_bringup.c
+ *
+ * Copyright (C) 2018 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt
+ *
+ * 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
+
+#include
+#include
+#include
+#include
+#include
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: k28_bringup
+ *
+ * Description:
+ * Perform architecture-specific initialization
+ *
+ * CONFIG_BOARD_INITIALIZE=y :
+ * Called from board_initialize().
+ *
+ * CONFIG_BOARD_INITIALIZE=n && CONFIG_LIB_BOARDCTL=y :
+ * Called from the NSH library
+ *
+ ****************************************************************************/
+
+int k28_bringup(void)
+{
+ int ret;
+
+#ifdef CONFIG_FS_PROCFS
+ /* Mount the procfs file system */
+
+ ret = mount(NULL, "/proc", "procfs", 0, NULL);
+ if (ret < 0)
+ {
+ syslog(LOG_ERR, "ERROR: Failed to mount procfs at /proc: %d\n", ret);
+ }
+#endif
+
+#ifdef CONFIG_PWM
+ /* Initialize PWM and register the PWM device. */
+
+ ret = k28_pwm_setup();
+ if (ret < 0)
+ {
+ syslog(LOG_ERR, "ERROR: k28_pwm_setup() failed: %d\n", ret);
+ }
+#endif
+
+#if defined(CONFIG_KINETIS_I2C0) || defined(CONFIG_KINETIS_I2C1)
+ /* Initialize I2C busses */
+
+ k28_i2cdev_initialize();
+#endif
+
+ UNUSED(ret);
+ return OK;
+}
diff --git a/configs/freedom-k28f/src/k28_i2c.c b/configs/freedom-k28f/src/k28_i2c.c
new file mode 100644
index 00000000000..31eb98d63e5
--- /dev/null
+++ b/configs/freedom-k28f/src/k28_i2c.c
@@ -0,0 +1,118 @@
+/****************************************************************************
+ * configs/freedom-k28f/src/k28_i2c.c
+ *
+ * Copyright (C) 2018 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt
+ *
+ * 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
+
+#include
+#include
+#include
+
+#include
+
+#include "up_arch.h"
+#include "chip.h"
+#include "kinetis.h"
+#include "kinetis_i2c.h"
+#include "freedom-k28f.h"
+
+#include
+
+#if defined(CONFIG_KINETIS_I2C0) || defined(CONFIG_KINETIS_I2C1)
+
+/************************************************************************************
+ * Public Data
+ ************************************************************************************/
+
+#ifdef CONFIG_KINETIS_I2C0
+FAR struct i2c_master_s* g_i2c0_dev;
+#endif
+#ifdef CONFIG_KINETIS_I2C1
+FAR struct i2c_master_s* g_i2c1_dev;
+#endif
+
+/************************************************************************************
+ * Public Functions
+ ************************************************************************************/
+
+/************************************************************************************
+ * Name: k28_i2cdev_initialize
+ *
+ * Description:
+ * Called to configure I2C
+ *
+ ************************************************************************************/
+
+void k28_i2cdev_initialize(void)
+{
+ int ret = OK;
+
+#ifdef CONFIG_KINETIS_I2C0
+ g_i2c0_dev = kinetis_i2cbus_initialize(0);
+ if (g_i2c0_dev == NULL)
+ {
+ syslog(LOG_ERR, "ERROR: kinetis_i2cbus_initialize(0) failed: %d\n", ret);
+ ret = -ENODEV;
+ }
+ else
+ {
+#ifdef CONFIG_I2C_DRIVER
+ ret = i2c_register(g_i2c0_dev, 0);
+#endif
+ }
+#endif
+
+#ifdef CONFIG_KINETIS_I2C1
+ g_i2c1_dev = kinetis_i2cbus_initialize(1);
+ if (g_i2c1_dev == NULL)
+ {
+ syslog(LOG_ERR, "ERROR: kinetis_i2cbus_initialize(1) failed: %d\n", ret);
+ ret = -ENODEV;
+ }
+ else
+ {
+#ifdef CONFIG_I2C_DRIVER
+ ret = i2c_register(g_i2c1_dev, 1);
+#endif
+ }
+#endif
+
+ return ret;
+}
+
+#endif /* CONFIG_KINETIS_I2C0 || CONFIG_KINETIS_I2C1 */
diff --git a/configs/freedom-k28f/src/k28_pwm.c b/configs/freedom-k28f/src/k28_pwm.c
new file mode 100644
index 00000000000..8e039f9cf30
--- /dev/null
+++ b/configs/freedom-k28f/src/k28_pwm.c
@@ -0,0 +1,143 @@
+/************************************************************************************
+ * configs/freedom-k28f/src/k28_pwm.c
+ *
+ * Copyright (C) 2018 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt
+ *
+ * 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
+
+#include
+#include
+#include
+
+#include
+#include
+
+#include "chip.h"
+#include "up_arch.h"
+#include "kinetis_pwm.h"
+
+#include
+
+#ifdef CONFIG_PWM
+
+/************************************************************************************
+ * Public Functions
+ ************************************************************************************/
+
+/************************************************************************************
+ * Name: k28_pwm_setup
+ *
+ * Description:
+ * Initialize PWM and register the PWM device.
+ *
+ ************************************************************************************/
+
+int k28_pwm_setup(void)
+{
+ static bool initialized = false;
+ struct pwm_lowerhalf_s *pwm;
+ int ret;
+
+ /* Have we already initialized? */
+
+ if (!initialized)
+ {
+#ifdef CONFIG_KINETIS_FTM0_PWM
+ /* Call kinetis_pwminitialize() to get an instance of the PWM interface */
+
+ pwm = kinetis_pwminitialize(0);
+ if (!pwm)
+ {
+ aerr("ERROR: Failed to get the KL20 PWM lower half\n");
+ return -ENODEV;
+ }
+
+ /* Register the PWM driver at "/dev/pwm0" */
+
+ ret = pwm_register("/dev/pwm0", pwm);
+ if (ret < 0)
+ {
+ aerr("ERROR: pwm_register failed: %d\n", ret);
+ return ret;
+ }
+#endif
+
+#ifdef CONFIG_KINETIS_FTM1_PWM
+ pwm = kinetis_pwminitialize(1);
+ if (!pwm)
+ {
+ aerr("ERROR: Failed to get the KL20 PWM lower half\n");
+ return -ENODEV;
+ }
+
+ /* Register the PWM driver at "/dev/pwm1" */
+
+ ret = pwm_register("/dev/pwm1", pwm);
+ if (ret < 0)
+ {
+ aerr("ERROR: pwm_register failed: %d\n", ret);
+ return ret;
+ }
+#endif
+
+#ifdef CONFIG_KINETIS_FTM2_PWM
+ pwm = kinetis_pwminitialize(2);
+ if (!pwm)
+ {
+ aerr("ERROR: Failed to get the KL20 PWM lower half\n");
+ return -ENODEV;
+ }
+
+ /* Register the PWM driver at "/dev/pwm2" */
+
+ ret = pwm_register("/dev/pwm2", pwm);
+ if (ret < 0)
+ {
+ aerr("ERROR: pwm_register failed: %d\n", ret);
+ return ret;
+ }
+#endif
+
+ /* Now we are initialized */
+
+ initialized = true;
+ }
+
+ return OK;
+}
+
+#endif /* CONFIG_PWM */
diff --git a/configs/freedom-k28f/src/k28_spi.c b/configs/freedom-k28f/src/k28_spi.c
new file mode 100644
index 00000000000..b6460b764b6
--- /dev/null
+++ b/configs/freedom-k28f/src/k28_spi.c
@@ -0,0 +1,142 @@
+/************************************************************************************
+ * configs/freedom-k28f/src/k28_spi.c
+ *
+ * Copyright (C) 2018 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt
+ *
+ * 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
+
+#include
+#include
+#include
+
+#include
+
+#include "up_arch.h"
+#include "chip.h"
+#include "kinetis.h"
+#include "freedom-k28f.h"
+
+#include
+
+#if defined(CONFIG_KINETIS_SPI0) || defined(CONFIG_KINETIS_SPI1) || \
+ defined(CONFIG_KINETIS_SPI2)
+
+/************************************************************************************
+ * Public Functions
+ ************************************************************************************/
+
+/************************************************************************************
+ * Name: k28_spidev_initialize
+ *
+ * Description:
+ * Called to configure SPI chip select GPIO pins for the KwikStik-K40 board.
+ *
+ ************************************************************************************/
+
+void weak_function k28_spidev_initialize(void)
+{
+# warning "Missing logic"
+}
+
+/************************************************************************************
+ * Name: kinetis_spi0/1/2select and kinetis_spi0/1/2status
+ *
+ * Description:
+ * The external functions, kinetis_spi0/1/2select and kinetis_spi0/1/2status must be
+ * provided by board-specific logic. They are implementations of the select
+ * and status methods of the SPI interface defined by struct spi_ops_s (see
+ * include/nuttx/spi/spi.h). All other methods (including kinetis_spibus_initialize())
+ * are provided by common Kinetis logic. To use this common SPI logic on your
+ * board:
+ *
+ * 1. Provide logic in kinetis_boardinitialize() to configure SPI chip select
+ * pins.
+ * 2. Provide kinetis_spi0/1/2select() and kinetis_spi0/1/2status() functions in your
+ * board-specific logic. These functions will perform chip selection and
+ * status operations using GPIOs in the way your board is configured.
+ * 3. Add a calls to kinetis_spibus_initialize() in your low level application
+ * initialization logic
+ * 4. The handle returned by kinetis_spibus_initialize() may then be used to bind the
+ * SPI driver to higher level logic (e.g., calling
+ * mmcsd_spislotinitialize(), for example, will bind the SPI driver to
+ * the SPI MMC/SD driver).
+ *
+ ************************************************************************************/
+
+#ifdef CONFIG_KINETIS_SPI0
+void kinetis_spi0select(FAR struct spi_dev_s *dev, uint32_t devid, bool selected)
+{
+ spiinfo("devid: %d CS: %s\n", (int)devid, selected ? "assert" : "de-assert");
+# warning "Missing logic"
+}
+
+uint8_t kinetis_spi0status(FAR struct spi_dev_s *dev, uint32_t devid)
+{
+# warning "Missing logic"
+ return SPI_STATUS_PRESENT;
+}
+#endif
+
+#ifdef CONFIG_KINETIS_SPI1
+void kinetis_spi1select(FAR struct spi_dev_s *dev, uint32_t devid, bool selected)
+{
+ spiinfo("devid: %d CS: %s\n", (int)devid, selected ? "assert" : "de-assert");
+# warning "Missing logic"
+}
+
+uint8_t kinetis_spi1status(FAR struct spi_dev_s *dev, uint32_t devid)
+{
+# warning "Missing logic"
+ return SPI_STATUS_PRESENT;
+}
+#endif
+
+#ifdef CONFIG_KINETIS_SPI2
+void kinetis_spi2select(FAR struct spi_dev_s *dev, uint32_t devid, bool selected)
+{
+ spiinfo("devid: %d CS: %s\n", (int)devid, selected ? "assert" : "de-assert");
+# warning "Missing logic"
+}
+
+uint8_t kinetis_spi2status(FAR struct spi_dev_s *dev, uint32_t devid)
+{
+# warning "Missing logic"
+ return SPI_STATUS_PRESENT;
+}
+#endif
+
+#endif /* CONFIG_KINETIS_SPI0 || CONFIG_KINETIS_SPI1 || CONFIG_KINETIS_SPI2 */
diff --git a/configs/freedom-k28f/src/k28_usbdev.c b/configs/freedom-k28f/src/k28_usbdev.c
new file mode 100644
index 00000000000..3eec89b6994
--- /dev/null
+++ b/configs/freedom-k28f/src/k28_usbdev.c
@@ -0,0 +1,140 @@
+/************************************************************************************
+ * configs/freedom-k28f/src/k28_usbdev.c
+ *
+ * Copyright (C) 2018 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt
+ *
+ * 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
+
+#include
+#include
+#include
+#include
+
+#include
+#include
+
+#include "up_arch.h"
+#include "kinetis.h"
+#include "kinetis_usbotg.h"
+#include "chip/kinetis_sim.h"
+#include "freedom-k28f.h"
+
+/************************************************************************************
+ * Pre-processor Definitions
+ ************************************************************************************/
+
+#define khci_getreg(addr) getreg8(addr)
+#define khci_putreg(val,addr) putreg8(val,addr)
+
+/************************************************************************************
+ * Public Functions
+ ************************************************************************************/
+
+/************************************************************************************
+ * Name: k28_usbdev_initialize
+ *
+ * Description:
+ * Called to setup USB-related GPIO pins for the KwikStik-K40 board.
+ *
+ ************************************************************************************/
+
+void k28_usbdev_initialize(void)
+{
+}
+
+/************************************************************************************
+ * Name: kinetis_usbpullup
+ *
+ * Description:
+ * If USB is supported and the board supports a pullup via GPIO (for USB software
+ * connect and disconnect), then the board software must provide kinetis_pullup.
+ * See include/nuttx/usb/usbdev.h for additional description of this method.
+ * Alternatively, if no pull-up GPIO the following EXTERN can be redefined to be
+ * NULL.
+ *
+ ************************************************************************************/
+
+int kinetis_usbpullup(FAR struct usbdev_s *dev, bool enable)
+{
+ usbtrace(TRACE_DEVPULLUP, (uint16_t)enable);
+#if 0
+ uint32_t regval;
+#endif
+
+ if (enable)
+ {
+ khci_putreg(USB_CONTROL_DPPULLUPNONOTG, KINETIS_USB0_CONTROL);
+ }
+ else
+ {
+ khci_putreg(0,KINETIS_USB0_CONTROL);
+ }
+
+#if 0
+ regval = khci_getreg(KINETIS_USB0_OTGCTL);
+
+ if (enable)
+ {
+ regval |= (1 << 2);
+ }
+ else
+ {
+ regval &= ~(1 << 2);
+ }
+
+ khci_putreg(regval,KINETIS_USB0_OTGCTL);
+#endif
+
+ return OK;
+}
+
+/************************************************************************************
+ * Name: kinetis_usbsuspend
+ *
+ * Description:
+ * Board logic must provide the kinetis_usbsuspend logic if the USBDEV driver is
+ * used. This function is called whenever the USB enters or leaves suspend mode.
+ * This is an opportunity for the board logic to shutdown clocks, power, etc.
+ * while the USB is suspended.
+ *
+ ************************************************************************************/
+
+void kinetis_usbsuspend(FAR struct usbdev_s *dev, bool resume)
+{
+ uinfo("resume: %d\n", resume);
+#warning "Missing logic"
+}
diff --git a/configs/freedom-k28f/src/k28_userleds.c b/configs/freedom-k28f/src/k28_userleds.c
new file mode 100644
index 00000000000..e329b006e2a
--- /dev/null
+++ b/configs/freedom-k28f/src/k28_userleds.c
@@ -0,0 +1,84 @@
+/****************************************************************************
+ * configs/freedom-k28f/src/kinetis_userleds.c
+ *
+ * Copyright (C) 2018 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt
+ *
+ * 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
+
+#include
+#include
+
+#include "kinetis.h"
+#include "freedom-k28f.h"
+
+#ifndef CONFIG_ARCH_LEDS
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: board_userled_initialize
+ ****************************************************************************/
+
+void board_userled_initialize(void)
+{
+ kinetis_pinconfig(GPIO_LED);
+}
+
+/****************************************************************************
+ * Name: board_userled
+ ****************************************************************************/
+
+void board_userled(int led, bool ledon)
+{
+ if (led == BOARD_LED)
+ {
+ kinetis_gpiowrite(GPIO_LED, ledon);
+ }
+}
+
+/****************************************************************************
+ * Name: board_userled_all
+ ****************************************************************************/
+
+void board_userled_all(uint8_t ledset)
+{
+ kinetis_gpiowrite(GPIO_LED, (ledset & BOARD_LED_BIT) != 0);
+}
+
+#endif /* !CONFIG_ARCH_LEDS */