Squashed commit of the following:
configs/freedom-k28f: Add button and LED support. arch/arm/src/kinetis: Fix a couple of additional compile problems. arch/arm/src/kinetis/chip and configs/freedom-k28f: Add things needed for a successful build. Still need board LED definitions.
This commit is contained in:
parent
3755b0b6ef
commit
8c81b97148
@ -217,8 +217,10 @@
|
||||
# define KINETIS_MCG_PLL_REF_MIN 8000000 /* OSCCLK/PLL_R minimum */
|
||||
# define KINETIS_MCG_PLL_REF_MAX 16000000 /* OSCCLK/PLL_R maximum */
|
||||
|
||||
/* TODO: The following configuration parameters have not been verified */
|
||||
#warning Unverified values from K66F
|
||||
/* TODO: The following configuration parameters have not been verified. They were
|
||||
* taken wholesale from the K66F. The K66F is very similar and, most likely, the
|
||||
* settings are corred.
|
||||
*/
|
||||
|
||||
# define KINETIS_MCG_PLL_INTERNAL_DIVBY 2 /* The PLL clock is divided by 2 before VCO divider */
|
||||
# define KINETIS_MCG_HAS_PLL_EXTRA_DIVBY 1 /* Is PLL clock divided by 1 before MCG PLL/FLL clock selection in the SIM module */
|
||||
|
@ -183,6 +183,12 @@
|
||||
* purpose input/output module that shares the
|
||||
* crossbar switch slave port with the AIPS-Lite
|
||||
* is accessed at this address. */
|
||||
# define KINETIS_GPIO_BASE(n) (0x400ff000 + ((n) << 6))
|
||||
# define KINETIS_GPIOA_BASE 0x400ff000 /* GPIO PORTA registers */
|
||||
# define KINETIS_GPIOB_BASE 0x400ff040 /* GPIO PORTB registers */
|
||||
# define KINETIS_GPIOC_BASE 0x400ff080 /* GPIO PORTC registers */
|
||||
# define KINETIS_GPIOD_BASE 0x400ff0c0 /* GPIO PORTD registers */
|
||||
# define KINETIS_GPIOE_BASE 0x400ff100 /* GPIO PORTE registers */
|
||||
|
||||
/* Private Peripheral Bus (PPB) Memory Map ******************************************/
|
||||
|
||||
|
@ -82,8 +82,8 @@
|
||||
|
||||
/* Output clock */
|
||||
|
||||
#define PIN_CLKOUT (PIN_ALT5 | PIN_PORTA | PIN6)
|
||||
#define PIN_CLKOUT (PIN_ALT5 | PIN_PORTC | PIN3)
|
||||
#define PIN_CLKOUT_1 (PIN_ALT5 | PIN_PORTA | PIN6)
|
||||
#define PIN_CLKOUT_2 (PIN_ALT5 | PIN_PORTC | PIN3)
|
||||
|
||||
/* Comparators */
|
||||
|
||||
@ -242,8 +242,8 @@
|
||||
|
||||
#define PIN_FTM1_CH0_1 (PIN_ALT3 | PIN_PORTA | PIN12)
|
||||
#define PIN_FTM1_CH0_2 (PIN_ALT3 | PIN_PORTA | PIN8)
|
||||
#define PIN_FTM1_CH0_1 (PIN_ALT3 | PIN_PORTB | PIN0)
|
||||
#define PIN_FTM1_CH0_2 (PIN_ALT3 | PIN_PORTB | PIN12)
|
||||
#define PIN_FTM1_CH0_3 (PIN_ALT3 | PIN_PORTB | PIN0)
|
||||
#define PIN_FTM1_CH0_4 (PIN_ALT3 | PIN_PORTB | PIN12)
|
||||
#define PIN_FTM1_CH1_1 (PIN_ALT3 | PIN_PORTA | PIN13)
|
||||
#define PIN_FTM1_CH1_2 (PIN_ALT3 | PIN_PORTA | PIN9)
|
||||
#define PIN_FTM1_CH1_3 (PIN_ALT3 | PIN_PORTB | PIN1)
|
||||
@ -752,8 +752,8 @@
|
||||
#define PIN_SPI1_SIN_4 (PIN_ALT7 | PIN_PORTE | PIN1)
|
||||
#define PIN_SPI1_SOUT_1 (PIN_ALT2 | PIN_PORTB | PIN16)
|
||||
#define PIN_SPI1_SOUT_2 (PIN_ALT2 | PIN_PORTE | PIN2)
|
||||
#define PIN_SPI1_SOUT_1 (PIN_ALT7 | PIN_PORTD | PIN6)
|
||||
#define PIN_SPI1_SOUT_2 (PIN_ALT7 | PIN_PORTE | PIN3)
|
||||
#define PIN_SPI1_SOUT_3 (PIN_ALT7 | PIN_PORTD | PIN6)
|
||||
#define PIN_SPI1_SOUT_4 (PIN_ALT7 | PIN_PORTE | PIN3)
|
||||
|
||||
#define PIN_SPI2_PCS0_1 (PIN_ALT2 | PIN_PORTB | PIN20)
|
||||
#define PIN_SPI2_PCS0_2 (PIN_ALT2 | PIN_PORTD | PIN11)
|
||||
|
@ -50,7 +50,7 @@
|
||||
|
||||
#if defined(KINETIS_K20)
|
||||
# include "chip/kinetis_k20pinmux.h"
|
||||
#if defined(KINETIS_K28)
|
||||
#elif defined(KINETIS_K28)
|
||||
# include "chip/kinetis_k28pinmux.h"
|
||||
#elif defined(KINETIS_K40)
|
||||
# include "chip/kinetis_k40pinmux.h"
|
||||
|
@ -48,13 +48,13 @@
|
||||
#include <nuttx/board.h>
|
||||
#include <nuttx/userspace.h>
|
||||
|
||||
#include <arch/board/board.h>
|
||||
|
||||
#include "mpu.h"
|
||||
#include "up_arch.h"
|
||||
#include "up_internal.h"
|
||||
#include "kinetis_mpuinit.h"
|
||||
|
||||
#include <arch/board/board.h>
|
||||
|
||||
/****************************************************************************
|
||||
* Pre-processor Definitions
|
||||
****************************************************************************/
|
||||
|
@ -336,11 +336,11 @@ void up_lowputc(char ch)
|
||||
|
||||
void kinetis_lowsetup(void)
|
||||
{
|
||||
#if defined(HAVE_UART_DEVICE) ||defined(HAVE_LUART_DEVICE)
|
||||
#if defined(HAVE_UART_DEVICE) || defined(HAVE_LPUART_DEVICE)
|
||||
uint32_t regval;
|
||||
#endif
|
||||
#ifdef HAVE_UART_DEVICE
|
||||
|
||||
#ifdef HAVE_UART_DEVICE
|
||||
/* Enable peripheral clocking for all enabled UARTs. Clocking for UARTs
|
||||
* 0-3 is enabled in the SCGC4 register.
|
||||
*/
|
||||
@ -456,18 +456,17 @@ void kinetis_lowsetup(void)
|
||||
#endif /* HAVE_UART_DEVICE */
|
||||
|
||||
#ifdef HAVE_LPUART_DEVICE
|
||||
|
||||
/* Clocking Source for LPUARTs 0 selected in SIM_SOPT2 */
|
||||
/* Clocking Source for LPUART0 selected in SIM_SOPT2 */
|
||||
|
||||
#if defined(CONFIG_KINETIS_LPUART0)
|
||||
regval = getreg32(KINETIS_SIM_SOPT2);
|
||||
regval = getreg32(KINETIS_SIM_SOPT2);
|
||||
regval &= ~(SIM_SOPT2_LPUARTSRC_MASK);
|
||||
regval |= BOARD_LPUART0_CLKSRC;
|
||||
putreg32(regval, KINETIS_SIM_SOPT2);
|
||||
|
||||
/* Clocking for LPUARTs 0-1 is enabled in the SCGC2 register. */
|
||||
|
||||
regval = getreg32(KINETIS_SIM_SCGC2);
|
||||
regval = getreg32(KINETIS_SIM_SCGC2);
|
||||
regval |= SIM_SCGC2_LPUART0;
|
||||
putreg32(regval, KINETIS_SIM_SCGC2);
|
||||
#endif
|
||||
@ -791,9 +790,9 @@ void kinetis_uartconfigure(uintptr_t uart_base, uint32_t baud,
|
||||
|
||||
#ifdef HAVE_LPUART_DEVICE
|
||||
void kinetis_lpuartconfigure(uintptr_t uart_base, uint32_t baud,
|
||||
uint32_t clock, unsigned int parity,
|
||||
unsigned int nbits, unsigned int stop2,
|
||||
bool iflow, bool oflow)
|
||||
uint32_t clock, unsigned int parity,
|
||||
unsigned int nbits, unsigned int stop2,
|
||||
bool iflow, bool oflow)
|
||||
{
|
||||
uint32_t sbrreg;
|
||||
uint32_t osrreg;
|
||||
|
@ -972,7 +972,7 @@ static int kinetis_ioctl(struct file *filep, int cmd, unsigned long arg)
|
||||
* TCSADRAIN / TCSAFLUSH
|
||||
*/
|
||||
|
||||
kinetis_uartconfigure(priv->uartbase, priv->baud, priv->clock,
|
||||
kinetis_lpuartconfigure(priv->uartbase, priv->baud, priv->clock,
|
||||
priv->parity, priv->bits, priv->stop2,
|
||||
iflow, oflow);
|
||||
}
|
||||
|
@ -99,7 +99,7 @@ void kinetis_earlyserialinit(void)
|
||||
|
||||
void up_serialinit(void)
|
||||
{
|
||||
#if defined(HAVE_UART_DEVICE) ||defined(HAVE_LUART_DEVICE)
|
||||
#if defined(HAVE_UART_DEVICE) ||defined(HAVE_LPUART_DEVICE)
|
||||
uint32_t start = 0;
|
||||
#endif
|
||||
|
||||
|
@ -30,6 +30,13 @@ README
|
||||
- Virtual serial port interface.
|
||||
- Open-source CMSIS-DAP software project.
|
||||
|
||||
Contents
|
||||
========
|
||||
|
||||
o Serial Console
|
||||
o LEDs and Buttons
|
||||
o Configurations
|
||||
|
||||
Serial Console
|
||||
==============
|
||||
|
||||
@ -134,8 +141,11 @@ Serial Console
|
||||
Arduino connectors. Remove R106 and R107 or R94 and R11 as necessary to
|
||||
prevent contention.
|
||||
|
||||
TGTMCU
|
||||
------
|
||||
Virtual serial port
|
||||
-------------------
|
||||
|
||||
A serial port connection is available between the OpenSDA v2.2 MCU and
|
||||
pins PTC24 and PTC25 of the K28 MCU:
|
||||
|
||||
----- --------------- -------------------------------
|
||||
GPIO LPUART FUNCTION BOARD CONFIGURATION
|
||||
@ -143,3 +153,50 @@ Serial Console
|
||||
PTC25 LPUART0_RX PTC25 LPUART0_RX_TGTMCU
|
||||
PTC24 LPUART0_TX PTC24 LPUART0_TX_TGTMCU
|
||||
----- --------------- -------------------------------
|
||||
|
||||
Default Console
|
||||
---------------
|
||||
|
||||
Unless otherwise noted, LPUART0 (the virtual serial port) is the console
|
||||
used in all Freedom-K28F configurations.
|
||||
|
||||
RGB LED
|
||||
-------
|
||||
An RGB LED is connected through GPIO as shown below:
|
||||
|
||||
LED K28
|
||||
------ -------------------------------------------------------
|
||||
RED PTE6
|
||||
GREEN PTE7
|
||||
BLUE PTE8
|
||||
|
||||
If CONFIG_ARCH_LEDs is defined, then NuttX will control the LED on board
|
||||
the Freedom K28. Usage of these LEDs is defined in include/board.h and
|
||||
src/k28_leds.c. 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 K28 is in sleep mode (Optional, not used)
|
||||
|
||||
Buttons
|
||||
-------
|
||||
Two push button switches, SW2 and SW3, are available on the FRDM-K28F
|
||||
board. SW2 is connected to PTA4 and SW3 is connected to PTD0.
|
||||
Beside the general purpose IO function, both SW2 and SW3 can be used
|
||||
as a low-leakage wakeup (LLWU) source.
|
||||
|
||||
Switch GPIO Function
|
||||
--------- ---------------------------------------------------------------
|
||||
SW2 PTA4/NMI_B
|
||||
SW3 PTD0/LLWU_P12
|
||||
|
||||
|
@ -45,6 +45,8 @@
|
||||
#ifndef __ASSEMBLY__
|
||||
# include <stdint.h>
|
||||
# include <stdbool.h>
|
||||
|
||||
# include <arch/chip/kinetis_mcg.h>
|
||||
#endif
|
||||
|
||||
/************************************************************************************
|
||||
@ -52,7 +54,7 @@
|
||||
************************************************************************************/
|
||||
|
||||
/* Clocking *************************************************************************/
|
||||
/* The Freedom K28F uses a 12Mhz external Oscillator. The Kinetis MCU startup from an
|
||||
/* The Freedom K28F uses a 12MHz external Oscillator. The Kinetis MCU startup from an
|
||||
* internal digitally-controlled oscillator (DCO). Nuttx will enable the main external
|
||||
* oscillator (EXTAL0/XTAL0). The external oscillator/resonator can range from
|
||||
* 32.768 KHz up to 50 MHz. The default external source for the MCG oscillator inputs
|
||||
@ -70,16 +72,16 @@
|
||||
* produce a KINETIS_MCG_PLL_REF_MIN >= PLLIN <=KINETIS_MCG_PLL_REF_MAX reference
|
||||
* clock to the PLL.
|
||||
*
|
||||
* PLL Input frequency: PLLIN = REFCLK / PRDIV = 12 Mhz / 1 = 12 MHz
|
||||
* PLL Output frequency: PLLOUT = PLLIN * VDIV = 12 Mhz * 30 = 360 MHz
|
||||
* MCG Frequency: PLLOUT = 180 Mhz = 360 MHz / KINETIS_MCG_PLL_INTERNAL_DIVBY
|
||||
* PLL Input frequency: PLLIN = REFCLK / PRDIV = 12 MHz / 1 = 12 MHz
|
||||
* PLL Output frequency: PLLOUT = PLLIN * VDIV = 12 MHz * 25 = 300 MHz
|
||||
* MCG Frequency: PLLOUT = 150 MHz = 300 MHz / KINETIS_MCG_PLL_INTERNAL_DIVBY
|
||||
*
|
||||
* PRDIV register value is the divider minus KINETIS_MCG_C5_PRDIV_BASE.
|
||||
* VDIV register value is offset by KINETIS_MCG_C6_VDIV_BASE.
|
||||
*/
|
||||
|
||||
#define BOARD_PRDIV 1 /* PLL External Reference Divider */
|
||||
#define BOARD_VDIV 30 /* PLL VCO Divider (frequency multiplier) */
|
||||
#define BOARD_PRDIV 1 /* PLL External Reference Divider */
|
||||
#define BOARD_VDIV 25 /* PLL VCO Divider (frequency multiplier) */
|
||||
|
||||
/* Define additional MCG_C2 Setting */
|
||||
|
||||
@ -88,7 +90,7 @@
|
||||
|
||||
#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/KINETIS_MCG_PLL_INTERNAL_DIVBY)
|
||||
#define BOARD_MCG_FREQ (BOARD_PLLOUT_FREQ / KINETIS_MCG_PLL_INTERNAL_DIVBY)
|
||||
|
||||
/* SIM CLKDIV1 dividers */
|
||||
|
||||
@ -109,11 +111,11 @@
|
||||
#define BOARD_SOPT2_PLLFLLSEL SIM_SOPT2_PLLFLLSEL_MCGPLLCLK
|
||||
#define BOARD_SOPT2_FREQ BOARD_MCG_FREQ
|
||||
|
||||
/* N.B. The above BOARD_SOPT2_FREQ precludes use of USB with a 12 Mhz Xtal
|
||||
/* N.B. The above BOARD_SOPT2_FREQ precludes use of USB with a 12 MHz Xtal
|
||||
* Divider output clock = Divider input clock × [ (USBFRAC+1) / (USBDIV+1) ]
|
||||
* SIM_CLKDIV2_FREQ = BOARD_SOPT2_FREQ × [ (USBFRAC+1) / (USBDIV+1) ]
|
||||
* 48Mhz = 168Mhz X [(1 + 1) / (6 + 1)]
|
||||
* 48Mhz = 168Mhz / (6 + 1) * (1 + 1)
|
||||
* 48MHz = 168MHz X [(1 + 1) / (6 + 1)]
|
||||
* 48MHz = 168MHz / (6 + 1) * (1 + 1)
|
||||
*/
|
||||
|
||||
#if (BOARD_MCG_FREQ == 168000000L)
|
||||
@ -126,8 +128,8 @@
|
||||
|
||||
/* Divider output clock = Divider input clock * ((PLLFLLFRAC+1)/(PLLFLLDIV+1))
|
||||
* SIM_CLKDIV3_FREQ = BOARD_SOPT2_FREQ × [ (PLLFLLFRAC+1) / (PLLFLLDIV+1)]
|
||||
* 90 Mhz = 180 Mhz X [(0 + 1) / (1 + 1)]
|
||||
* 90 Mhz = 180 Mhz / (1 + 1) * (0 + 1)
|
||||
* 90 MHz = 180 MHz X [(0 + 1) / (1 + 1)]
|
||||
* 90 MHz = 180 MHz / (1 + 1) * (0 + 1)
|
||||
*/
|
||||
|
||||
#define BOARD_SIM_CLKDIV3_PLLFLLFRAC 1
|
||||
@ -146,10 +148,10 @@
|
||||
|
||||
/* Kinetis does not have pullups on their Freedom-K28F board
|
||||
* So allow the board config to enable them.
|
||||
* REVISIT: This was cloned from the K66F. Need to check the K28F schematic.
|
||||
*/
|
||||
|
||||
#define BOARD_SDHC_ENABLE_PULLUPS 1
|
||||
#warning REVISIT
|
||||
|
||||
/* SDHC clocking ********************************************************************/
|
||||
|
||||
@ -345,7 +347,24 @@
|
||||
* PTE22 LPUART4_CTS N/C
|
||||
* ----- --------------- -------------------------------
|
||||
*
|
||||
* Arduino RS-232 Shield
|
||||
* Virtual serial port
|
||||
* -------------------
|
||||
*
|
||||
* A serial port connection is available between the OpenSDA v2.2 MCU and
|
||||
* pins PTC24 and PTC25 of the K28 MCU:
|
||||
*
|
||||
* ----- --------------- -------------------------------
|
||||
* GPIO LPUART FUNCTION BOARD CONFIGURATION
|
||||
* ----- --------------- -------------------------------
|
||||
* PTC25 LPUART0_RX PTC25 LPUART0_RX_TGTMCU
|
||||
* PTC24 LPUART0_TX PTC24 LPUART0_TX_TGTMCU
|
||||
* ----- --------------- -------------------------------
|
||||
*/
|
||||
|
||||
#define PIN_LPUART0_RX PIN_LPUART0_RX_5 /* PTC25 */
|
||||
#define PIN_LPUART0_TX PIN_LPUART0_TX_5 /* PTC24
|
||||
|
||||
/* Arduino RS-232 Shield
|
||||
* ---------------------
|
||||
*
|
||||
* ----- --------------- -------------------------------
|
||||
@ -358,18 +377,11 @@
|
||||
* 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
|
||||
* ----- --------------- -------------------------------
|
||||
*/
|
||||
|
||||
#define PIN_LPUART2_RX PIN_LPUART2_RX_1 /* PTA25 */
|
||||
#define PIN_LPUART2_TX PIN_LPUART2_TX_1 /* PTA24 */
|
||||
|
||||
/* I2C */
|
||||
|
||||
#ifdef CONFIG_KINETIS_I2C0
|
||||
@ -394,4 +406,66 @@
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* LED definitions ******************************************************************/
|
||||
/* The Freedom K28F has a single RGB LED driven by the K28F as follows:
|
||||
*
|
||||
* LED K28
|
||||
* ------ -------------------------------------------------------
|
||||
* RED PTE6
|
||||
* BLUE PTE7
|
||||
* GREEN PTE8
|
||||
*
|
||||
* If CONFIG_ARCH_LEDS is not defined, then the user can control the LEDs in any
|
||||
* way. The following definitions are used to access individual LEDs.
|
||||
*/
|
||||
|
||||
/* LED index values for use with board_userled() */
|
||||
|
||||
#define BOARD_LED_R 0
|
||||
#define BOARD_LED_G 1
|
||||
#define BOARD_LED_B 2
|
||||
#define BOARD_NLEDS 3
|
||||
|
||||
/* LED bits for use with board_userled_all() */
|
||||
|
||||
#define BOARD_LED_R_BIT (1 << BOARD_LED_R)
|
||||
#define BOARD_LED_G_BIT (1 << BOARD_LED_G)
|
||||
#define BOARD_LED_B_BIT (1 << BOARD_LED_B)
|
||||
|
||||
/* If CONFIG_ARCH_LEDs is defined, then NuttX will control the LED on board
|
||||
* the Freedom K28F. 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 /* K28 is in sleep mode (Not used) */
|
||||
|
||||
/* Button definitions ***************************************************************/
|
||||
/* Two push buttons, SW2 and SW3, are available on FRDM-K28F board, where SW2 is
|
||||
* connected to PTA4 and SW3 is connected to PTD0. Besides the general purpose
|
||||
* input/output functions, SW2 and SW3 can be low-power wake up signal. Also, only
|
||||
* SW3 can be a non-maskable interrupt.
|
||||
*
|
||||
* Switch GPIO Function
|
||||
* --------- ---------------------------------------------------------------
|
||||
* SW2 PTA4/NMI_B
|
||||
* SW3 PTA4/NMI_B
|
||||
*/
|
||||
|
||||
#define BUTTON_SW2 0
|
||||
#define BUTTON_SW3 1
|
||||
#define NUM_BUTTONS 2
|
||||
|
||||
#define BUTTON_SW2_BIT (1 << BUTTON_SW2)
|
||||
#define BUTTON_SW3_BIT (1 << BUTTON_SW3)
|
||||
|
||||
#endif /* __CONFIGS_FREEDOM_K28F_INCLUDE_BOARD_H */
|
||||
|
@ -10,7 +10,6 @@ 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
|
||||
@ -19,10 +18,10 @@ CONFIG_DISABLE_POLL=y
|
||||
CONFIG_EXAMPLES_NSH=y
|
||||
CONFIG_HOST_WINDOWS=y
|
||||
CONFIG_INTELHEX_BINARY=y
|
||||
CONFIG_KINETIS_LPUART0=y
|
||||
CONFIG_KINETIS_SERIALBRK_BSDCOMPAT=y
|
||||
CONFIG_KINETIS_UART0=y
|
||||
CONFIG_KINETIS_UARTFIFOS=y
|
||||
CONFIG_KINETIS_UART_BREAKS=y
|
||||
CONFIG_LPUART0_SERIAL_CONSOLE=y
|
||||
CONFIG_MAX_TASKS=16
|
||||
CONFIG_MAX_WDOGPARMS=2
|
||||
CONFIG_NFILE_DESCRIPTORS=8
|
||||
@ -45,5 +44,4 @@ 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"
|
||||
|
@ -48,6 +48,32 @@
|
||||
****************************************************************************/
|
||||
|
||||
/* Freedom-K28F GPIOs *******************************************************/
|
||||
/* An RGB LED is connected through GPIO as shown below:
|
||||
*
|
||||
* LED K28
|
||||
* ------ -------------------------------------------------------
|
||||
* RED PTE6
|
||||
* GREEN PTE7
|
||||
* BLUE PTE8
|
||||
*/
|
||||
|
||||
#define GPIO_LED_R (GPIO_LOWDRIVE | GPIO_OUTPUT_ONE | PIN_PORTE | PIN6)
|
||||
#define GPIO_LED_G (GPIO_LOWDRIVE | GPIO_OUTPUT_ONE | PIN_PORTE | PIN7)
|
||||
#define GPIO_LED_B (GPIO_LOWDRIVE | GPIO_OUTPUT_ONE | PIN_PORTE | PIN8)
|
||||
|
||||
/* Two push buttons, SW2 and SW3, are available on FRDM-K28F board, where SW2 is
|
||||
* connected to PTA4 and SW3 is connected to PTD0. Besides the general purpose
|
||||
* input/output functions, SW2 and SW3 can be low-power wake up signal. Also, only
|
||||
* SW3 can be a non-maskable interrupt.
|
||||
*
|
||||
* Switch GPIO Function
|
||||
* --------- ---------------------------------------------------------------
|
||||
* SW2 PTA4/NMI_B
|
||||
* SW3 PTD0/LLWU_P12
|
||||
*/
|
||||
|
||||
#define GPIO_SW2 (GPIO_PULLUP | PIN_INT_BOTH | PIN_PORTA | PIN4)
|
||||
#define GPIO_SW3 (GPIO_PULLUP | PIN_INT_BOTH | PIN_PORTD | PIN0)
|
||||
|
||||
/****************************************************************************
|
||||
* Public Types
|
||||
|
@ -1,7 +1,7 @@
|
||||
/****************************************************************************
|
||||
* configs/freedom-k28f/src/k28_autoleds.c
|
||||
*
|
||||
* Copyright (C) 2015 Gregory Nutt. All rights reserved.
|
||||
* Copyright (C) 2018 Gregory Nutt. All rights reserved.
|
||||
* Author: Gregory Nutt <gnutt@nuttx.org>
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
@ -33,21 +33,65 @@
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
/* The Freedom K28F has a single RGB LED driven by the K28F as follows:
|
||||
*
|
||||
* LED K28
|
||||
* ------ -------------------------------------------------------
|
||||
* RED PTE6
|
||||
* BLUE PTE7
|
||||
* GREEN PTE8
|
||||
*
|
||||
*
|
||||
* If CONFIG_ARCH_LEDs is defined, then NuttX will control the LED on board
|
||||
* the Freedom K28F. 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 K28 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 "chip.h"
|
||||
#include "kinetis.h"
|
||||
#include "freedom-k28f.h"
|
||||
|
||||
#include <arch/board/board.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
|
||||
****************************************************************************/
|
||||
@ -56,13 +100,15 @@
|
||||
* Name: board_autoled_initialize
|
||||
*
|
||||
* Description:
|
||||
* Initialize LED GPIOs so that LEDs can be controlled.
|
||||
* Initialize the on-board LED
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
void board_autoled_initialize(void)
|
||||
{
|
||||
kinetis_pinconfig(GPIO_LED);
|
||||
kinetis_pinconfig(GPIO_LED_R);
|
||||
kinetis_pinconfig(GPIO_LED_G);
|
||||
kinetis_pinconfig(GPIO_LED_B);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
@ -71,9 +117,34 @@ void board_autoled_initialize(void)
|
||||
|
||||
void board_autoled_on(int led)
|
||||
{
|
||||
if (led != 2)
|
||||
if (led != LED_NOCHANGE)
|
||||
{
|
||||
kinetis_gpiowrite(GPIO_LED, (led != 0));
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
@ -83,9 +154,11 @@ void board_autoled_on(int led)
|
||||
|
||||
void board_autoled_off(int led)
|
||||
{
|
||||
if (led != 2)
|
||||
if (led == LED_ON_OFF_OFF)
|
||||
{
|
||||
kinetis_gpiowrite(GPIO_LED, false);
|
||||
kinetis_gpiowrite(GPIO_LED_R, true);
|
||||
kinetis_gpiowrite(GPIO_LED_G, true);
|
||||
kinetis_gpiowrite(GPIO_LED_B, true);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -39,12 +39,18 @@
|
||||
|
||||
#include <nuttx/config.h>
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include <debug.h>
|
||||
|
||||
#include <nuttx/board.h>
|
||||
|
||||
#include "chip.h"
|
||||
#include "kinetis.h"
|
||||
#include "freedom-k28f.h"
|
||||
|
||||
#include <arch/board/board.h>
|
||||
|
||||
#ifndef CONFIG_ARCH_LEDS
|
||||
|
||||
/****************************************************************************
|
||||
@ -57,7 +63,9 @@
|
||||
|
||||
void board_userled_initialize(void)
|
||||
{
|
||||
kinetis_pinconfig(GPIO_LED);
|
||||
kinetis_pinconfig(GPIO_LED_R);
|
||||
kinetis_pinconfig(GPIO_LED_G);
|
||||
kinetis_pinconfig(GPIO_LED_B);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
@ -66,10 +74,26 @@ void board_userled_initialize(void)
|
||||
|
||||
void board_userled(int led, bool ledon)
|
||||
{
|
||||
if (led == BOARD_LED)
|
||||
uint32_t ledcfg;
|
||||
|
||||
if (led == BOARD_LED_R)
|
||||
{
|
||||
kinetis_gpiowrite(GPIO_LED, ledon);
|
||||
ledcfg = GPIO_LED_R;
|
||||
}
|
||||
else if (led == BOARD_LED_G)
|
||||
{
|
||||
ledcfg = GPIO_LED_G;
|
||||
}
|
||||
else if (led == BOARD_LED_B)
|
||||
{
|
||||
ledcfg = GPIO_LED_B;
|
||||
}
|
||||
else
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
kinetis_gpiowrite(ledcfg, !ledon); /* Low illuminates */
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
@ -78,7 +102,11 @@ void board_userled(int led, bool ledon)
|
||||
|
||||
void board_userled_all(uint8_t ledset)
|
||||
{
|
||||
kinetis_gpiowrite(GPIO_LED, (ledset & BOARD_LED_BIT) != 0);
|
||||
/* Low illuminates */
|
||||
|
||||
kinetis_gpiowrite(GPIO_LED_R, (ledset & BOARD_LED_R_BIT) == 0);
|
||||
kinetis_gpiowrite(GPIO_LED_G, (ledset & BOARD_LED_G_BIT) == 0);
|
||||
kinetis_gpiowrite(GPIO_LED_B, (ledset & BOARD_LED_B_BIT) == 0);
|
||||
}
|
||||
|
||||
#endif /* !CONFIG_ARCH_LEDS */
|
||||
|
@ -131,10 +131,10 @@ LEDs and Buttons
|
||||
Beside the general purpose IO function, both SW2 and SW3 can be used
|
||||
as a low-leakage wakeup (LLWU) source.
|
||||
|
||||
Switch GPIO Function
|
||||
--------- ---------------------------------------------------------------
|
||||
SW2 PTD11/LLWU_P25/SPI2_PCS0/SDHC0_CLKIN/LPUART0_CTS/FB_A19
|
||||
SW3 PTA10/LLWU_P22/FTM2_CH0/MII0_RXD2/FTM2_QD_PHA/TPM2_CH0/TRACE_D0
|
||||
Switch GPIO Function
|
||||
--------- ---------------------------------------------------------------
|
||||
SW2 PTD11/LLWU_P25/SPI2_PCS0/SDHC0_CLKIN/LPUART0_CTS/FB_A19
|
||||
SW3 PTA10/LLWU_P22/FTM2_CH0/MII0_RXD2/FTM2_QD_PHA/TPM2_CH0/TRACE_D0
|
||||
|
||||
Networking Support
|
||||
==================
|
||||
|
Loading…
Reference in New Issue
Block a user