Rename Olimex LPC1766-STK files to conform with current naming standards
This commit is contained in:
parent
2d91804642
commit
39b98dbf02
265
configs/olimex-lpc1766stk/src/lpc1766stk.h
Normal file
265
configs/olimex-lpc1766stk/src/lpc1766stk.h
Normal file
@ -0,0 +1,265 @@
|
||||
/************************************************************************************
|
||||
* configs/olimex-lpc1766stk/src/lpc1766stk.h
|
||||
*
|
||||
* Copyright (C) 2010-2011 Gregory Nutt. All rights reserved.
|
||||
* Author: Gregory Nutt <gnutt@nuttx.org>
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
* 3. Neither the name NuttX nor the names of its contributors may be
|
||||
* used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
************************************************************************************/
|
||||
|
||||
#ifndef _CONFIGS_OLIMEX_LPC1766STK_SRC_LPC1766STK_INTERNAL_H
|
||||
#define _CONFIGS_OLIMEX_LPC1766STK_SRC_LPC1766STK_INTERNAL_H
|
||||
|
||||
/************************************************************************************
|
||||
* Included Files
|
||||
************************************************************************************/
|
||||
|
||||
#include <nuttx/config.h>
|
||||
#include <nuttx/compiler.h>
|
||||
|
||||
/************************************************************************************
|
||||
* Definitions
|
||||
************************************************************************************/
|
||||
|
||||
/* LPC1766-STK GPIO Pin Definitions *************************************************/
|
||||
/* Board GPIO Usage:
|
||||
*
|
||||
* GPIO PIN SIGNAL NAME
|
||||
* -------------------------------- ---- --------------
|
||||
* P0[0]/RD1/TXD3/SDA1 46 RD1
|
||||
* P0[1]/TD1/RXD3/SCL1 47 TD1
|
||||
* P0[2]/TXD0/AD0[7] 98 TXD0
|
||||
* P0[3]/RXD0/AD0[6] 99 RXD0
|
||||
* P0[4]/I2SRX_CLK/RD2/CAP2[0] 81 LED2/ACC IRQ
|
||||
* P0[5]/I2SRX_WS/TD2/CAP2[1] 80 CENTER
|
||||
* P0[6]/I2SRX_SDA/SSEL1/MAT2[0] 79 SSEL1
|
||||
* P0[7]/I2STX_CLK/SCK1/MAT2[1] 78 SCK1
|
||||
* P0[8]/I2STX_WS/MISO1/MAT2[2] 77 MISO1
|
||||
* P0[9]/I2STX_SDA/MOSI1/MAT2[3] 76 MOSI1
|
||||
* P0[10]/TXD2/SDA2/MAT3[0] 48 SDA2
|
||||
* P0[11]/RXD2/SCL2/MAT3[1] 49 SCL2
|
||||
* P0[15]/TXD1/SCK0/SCK 62 TXD1
|
||||
* P0[16]/RXD1/SSEL0/SSEL 63 RXD1
|
||||
* P0[17]/CTS1/MISO0/MISO 61 CTS1
|
||||
* P0[18]/DCD1/MOSI0/MOSI 60 DCD1
|
||||
* P0[19]/DSR1/SDA1 59 DSR1
|
||||
* P0[20]/DTR1/SCL1 58 DTR1
|
||||
* P0[21]/RI1/RD1 57 MMC PWR
|
||||
* P0[22]/RTS1/TD1 56 RTS1
|
||||
* P0[23]/AD0[0]/I2SRX_CLK/CAP3[0] 9 BUT1
|
||||
* P0[24]/AD0[1]/I2SRX_WS/CAP3[1] 8 TEMP
|
||||
* P0[25]/AD0[2]/I2SRX_SDA/TXD3 7 MIC IN
|
||||
* P0[26]/AD0[3]/AOUT/RXD3 6 AOUT
|
||||
* P0[27]/SDA0/USB_SDA 25 USB_SDA
|
||||
* P0[28]/SCL0/USB_SCL 24 USB_SCL
|
||||
* P0[29]/USB_D+ 29 USB_D+
|
||||
* P0[30]/USB_D- 30 USB_D-
|
||||
* P1[0]/ENET_TXD0 95 E_TXD0
|
||||
* P1[1]/ENET_TXD1 94 E_TXD1
|
||||
* P1[4]/ENET_TX_EN 93 E_TX_EN
|
||||
* P1[8]/ENET_CRS 92 E_CRS
|
||||
* P1[9]/ENET_RXD0 91 E_RXD0
|
||||
* P1[10]/ENET_RXD1 90 E_RXD1
|
||||
* P1[14]/ENET_RX_ER 89 E_RX_ER
|
||||
* P1[15]/ENET_REF_CLK 88 E_REF_CLK
|
||||
* P1[16]/ENET_MDC 87 E_MDC
|
||||
* P1[17]/ENET_MDIO 86 E_MDIO
|
||||
* P1[18]/USB_UP_LED/PWM1[1]/CAP1[0] 32 USB_UP_LED
|
||||
* P1[19]/MC0A/#USB_PPWR/CAP1[1] 33 #USB_PPWR
|
||||
* P1[20]/MCFB0/PWM1[2]/SCK0 34 SCK0
|
||||
* P1[21]/MCABORT/PWM1[3]/SSEL0 35 SSEL0
|
||||
* P1[22]/MC0B/USB_PWRD/MAT1[0] 36 USBH_PWRD
|
||||
* P1[23]/MCFB1/PWM1[4]/MISO0 37 MISO0
|
||||
* P1[24]/MCFB2/PWM1[5]/MOSI0 38 MOSI0
|
||||
* P1[25]/MC1A/MAT1[1] 39 LED1
|
||||
* P1[26]/MC1B/PWM1[6]/CAP0[0] 40 CS_UEXT
|
||||
* P1[27]/CLKOUT/#USB_OVRCR/CAP0[1] 43 #USB_OVRCR
|
||||
* P1[28]/MC2A/PCAP1[0]/MAT0[0] 44 P1.28
|
||||
* P1[29]/MC2B/PCAP1[1]/MAT0[1] 45 P1.29
|
||||
* P1[30]/VBUS/AD0[4] 21 VBUS
|
||||
* P1[31]/SCK1/AD0[5] 20 AIN5
|
||||
* P2[0]/PWM1[1]/TXD1 75 UP
|
||||
* P2[1]/PWM1[2]/RXD1 74 DOWN
|
||||
* P2[2]/PWM1[3]/CTS1/TRACEDATA[3] 73 TRACE_D3
|
||||
* P2[3]/PWM1[4]/DCD1/TRACEDATA[2] 70 TRACE_D2
|
||||
* P2[4]/PWM1[5]/DSR1/TRACEDATA[1] 69 TRACE_D1
|
||||
* P2[5]/PWM1[6]/DTR1/TRACEDATA[0] 68 TRACE_D0
|
||||
* P2[6]/PCAP1[0]/RI1/TRACECLK 67 TRACE_CLK
|
||||
* P2[7]/RD2/RTS1 66 LEFT
|
||||
* P2[8]/TD2/TXD2 65 RIGHT
|
||||
* P2[9]/USB_CONNECT/RXD2 64 USBD_CONNECT
|
||||
* P2[10]/#EINT0/NMI 53 ISP_E4
|
||||
* P2[11]/#EINT1/I2STX_CLK 52 #EINT1
|
||||
* P2[12]/#EINT2/I2STX_WS 51 WAKE-UP
|
||||
* P2[13]/#EINT3/I2STX_SDA 50 BUT2
|
||||
* P3[25]/MAT0[0]/PWM1[2] 27 LCD_RST
|
||||
* P3[26]/STCLK/MAT0[1]/PWM1[3] 26 LCD_BL
|
||||
*/
|
||||
|
||||
/* LEDs GPIO PIN SIGNAL NAME
|
||||
* -------------------------------- ---- --------------
|
||||
* P1[25]/MC1A/MAT1[1] 39 LED1
|
||||
* P0[4]/I2SRX_CLK/RD2/CAP2[0] 81 LED2/ACC IRQ
|
||||
*
|
||||
* LEDs are connected to +3.3V through a diode on one side and must be pulled
|
||||
* low (through a resistor) on the LPC17xx side in order to illuminuate them.
|
||||
*/
|
||||
|
||||
#define LPC1766STK_LED1 (GPIO_OUTPUT | GPIO_VALUE_ONE | GPIO_PORT1 | GPIO_PIN25)
|
||||
#define LPC1766STK_LED2 (GPIO_OUTPUT | GPIO_VALUE_ONE | GPIO_PORT0 | GPIO_PIN4)
|
||||
|
||||
/* Buttons GPIO PIN SIGNAL NAME
|
||||
* -------------------------------- ---- --------------
|
||||
* P0[23]/AD0[0]/I2SRX_CLK/CAP3[0] 9 BUT1
|
||||
* P2[13]/#EINT3/I2STX_SDA 50 BUT2
|
||||
* P2[12]/#EINT2/I2STX_WS 51 WAKE-UP
|
||||
*
|
||||
* NOTES:
|
||||
* 1. Pull-ups are not required because the pins are already pulled-up by
|
||||
* through resistors on the board.
|
||||
* 2. All buttons are capable of supporting interrupts if board_button_irq() is
|
||||
* called to attach an interrupt handler. Interrupts are configured to
|
||||
* occur on both edges.
|
||||
*/
|
||||
|
||||
#define LPC1766STK_BUT1 (GPIO_INTBOTH | GPIO_FLOAT | GPIO_PORT0 | GPIO_PIN23)
|
||||
#define LPC1766STK_BUT2 (GPIO_INTBOTH | GPIO_FLOAT | GPIO_PORT2 | GPIO_PIN13)
|
||||
#define LPC1766STK_WAKEUP (GPIO_INTBOTH | GPIO_FLOAT | GPIO_PORT2 | GPIO_PIN12)
|
||||
|
||||
/* Button IRQ numbers */
|
||||
|
||||
#define LPC1766STK_BUT1_IRQ LPC17_IRQ_P0p23
|
||||
#define LPC1766STK_BUT2_IRQ LPC17_IRQ_P2p13
|
||||
#define LPC1766STK_WAKEUP_IRQ LPC17_IRQ_P2p12
|
||||
|
||||
/* Joystick GPIO PIN SIGNAL NAME
|
||||
* -------------------------------- ---- --------------
|
||||
* P0[5]/I2SRX_WS/TD2/CAP2[1] 80 CENTER
|
||||
* P2[0]/PWM1[1]/TXD1 75 UP
|
||||
* P2[1]/PWM1[2]/RXD1 74 DOWN
|
||||
* P2[7]/RD2/RTS1 66 LEFT
|
||||
* P2[8]/TD2/TXD2 65 RIGHT
|
||||
*
|
||||
* NOTES:
|
||||
* 1. Pull-ups are not required because the pins are already pulled-up by
|
||||
* through resistors on the board.
|
||||
* 2. All buttons are capable of supporting interrupts if board_button_irq() is
|
||||
* called to attach an interrupt handler. Interrupts are configured to
|
||||
* occur on both edges.
|
||||
*/
|
||||
|
||||
#define LPC1766STK_CENTER (GPIO_INTBOTH | GPIO_FLOAT | GPIO_PORT0 | GPIO_PIN5)
|
||||
#define LPC1766STK_UP (GPIO_INTBOTH | GPIO_FLOAT | GPIO_PORT2 | GPIO_PIN0)
|
||||
#define LPC1766STK_DOWN (GPIO_INTBOTH | GPIO_FLOAT | GPIO_PORT2 | GPIO_PIN1)
|
||||
#define LPC1766STK_LEFT (GPIO_INTBOTH | GPIO_FLOAT | GPIO_PORT2 | GPIO_PIN7)
|
||||
#define LPC1766STK_RIGHT (GPIO_INTBOTH | GPIO_FLOAT | GPIO_PORT2 | GPIO_PIN8)
|
||||
|
||||
/* Joystick IRQ numbers */
|
||||
|
||||
#define LPC1766STK_CENTER_IRQ LPC17_IRQ_P0p5
|
||||
#define LPC1766STK_UP_IRQ LPC17_IRQ_P2p0
|
||||
#define LPC1766STK_DOWN_IRQ LPC17_IRQ_P2p1
|
||||
#define LPC1766STK_LEFT_IRQ LPC17_IRQ_P2p7
|
||||
#define LPC1766STK_RIGHT_IRQ LPC17_IRQ_P2p8
|
||||
|
||||
/* Nokia LCD GPIO PIN SIGNAL NAME
|
||||
* -------------------------------- ---- --------------
|
||||
* P1[21]/MCABORT/PWM1[3]/SSEL0 35 SSEL0
|
||||
* P1[20]/MCFB0/PWM1[2]/SCK0 34 SCK0
|
||||
* P1[23]/MCFB1/PWM1[4]/MISO0 37 MISO0
|
||||
* P1[24]/MCFB2/PWM1[5]/MOSI0 38 MOSI0
|
||||
* P3[25]/MAT0[0]/PWM1[2] 27 LCD_RST
|
||||
* P3[26]/STCLK/MAT0[1]/PWM1[3] 26 LCD_BL (PWM1)
|
||||
*/
|
||||
|
||||
#define LPC1766STK_LCD_CS (GPIO_OUTPUT | GPIO_VALUE_ONE | GPIO_PORT1 | GPIO_PIN21)
|
||||
#define LPC1766STK_LCD_RST (GPIO_OUTPUT | GPIO_VALUE_ZERO | GPIO_PORT3 | GPIO_PIN25)
|
||||
#define LPC1766STK_LCD_BL GPIO_PWM1p3_3
|
||||
#define GPIO_PWM1p3 GPIO_PWM1p3_3
|
||||
|
||||
/* SD/MMC GPIO PIN SIGNAL NAME
|
||||
* -------------------------------- ---- --------------
|
||||
* P0[6]/I2SRX_SDA/SSEL1/MAT2[0] 79 SSEL1 (active low)
|
||||
* P0[7]/I2STX_CLK/SCK1/MAT2[1] 78 SCK1
|
||||
* P0[8]/I2STX_WS/MISO1/MAT2[2] 77 MISO1
|
||||
* P0[9]/I2STX_SDA/MOSI1/MAT2[3] 76 MOSI1
|
||||
* P0[21]/RI1/RD1 57 MMC PWR (active low)
|
||||
*/
|
||||
|
||||
#define LPC1766STK_MMC_CS (GPIO_OUTPUT | GPIO_VALUE_ONE | GPIO_PORT0 | GPIO_PIN6)
|
||||
#define LPC1766STK_MMC_PWR (GPIO_OUTPUT | GPIO_VALUE_ONE | GPIO_PORT0 | GPIO_PIN21)
|
||||
|
||||
/* AD GPIO PIN SIGNAL NAME
|
||||
* -------------------------------- ---- --------------
|
||||
* P0[24]/AD0[1]/I2SRX_WS/CAP3[1] 8 TEMP
|
||||
* P0[25]/AD0[2]/I2SRX_SDA/TXD3 7 MIC IN
|
||||
*/
|
||||
|
||||
#define LPC1766STK_TEMP GPIO_AD0p1
|
||||
#define LPC1766STK_MIC_IN GPIO_AD0p2
|
||||
|
||||
/* UEXT GPIO PIN SIGNAL NAME
|
||||
* -------------------------------- ---- --------------
|
||||
* P1[26]/MC1B/PWM1[6]/CAP0[0] 40 CS_UEXT
|
||||
*/
|
||||
|
||||
#define LPC1766STK_CS_UEXT (GPIO_OUTPUT | GPIO_VALUE_ONE | GPIO_PORT1 | GPIO_PIN26)
|
||||
|
||||
/* ISP? GPIO PIN SIGNAL NAME
|
||||
* -------------------------------- ---- --------------
|
||||
* P2[10]/#EINT0/NMI 53 ISP_E4
|
||||
*/
|
||||
|
||||
/************************************************************************************
|
||||
* Public Types
|
||||
************************************************************************************/
|
||||
|
||||
/************************************************************************************
|
||||
* Public data
|
||||
************************************************************************************/
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
|
||||
/************************************************************************************
|
||||
* Public Functions
|
||||
************************************************************************************/
|
||||
|
||||
/************************************************************************************
|
||||
* Name: lpc1766stk_sspinitialize
|
||||
*
|
||||
* Description:
|
||||
* Called to configure SPI chip select GPIO pins for the Olimex LPC1766-STK board.
|
||||
*
|
||||
************************************************************************************/
|
||||
|
||||
void weak_function lpc1766stk_sspinitialize(void);
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
#endif /* _CONFIGS_OLIMEX_LPC1766STK_SRC_LPC1766STK_INTERNAL_H */
|
||||
|
92
configs/olimex-lpc1766stk/src/lpc17_boot.c
Normal file
92
configs/olimex-lpc1766stk/src/lpc17_boot.c
Normal file
@ -0,0 +1,92 @@
|
||||
/************************************************************************************
|
||||
* configs/olimex-lpc1766stk/src/lpc17_boot.c
|
||||
*
|
||||
* Copyright (C) 2010, 2012 Gregory Nutt. All rights reserved.
|
||||
* Author: Gregory Nutt <gnutt@nuttx.org>
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
* 3. Neither the name NuttX nor the names of its contributors may be
|
||||
* used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
************************************************************************************/
|
||||
|
||||
/************************************************************************************
|
||||
* Included Files
|
||||
************************************************************************************/
|
||||
|
||||
#include <nuttx/config.h>
|
||||
|
||||
#include <debug.h>
|
||||
|
||||
#include <arch/board/board.h>
|
||||
|
||||
#include "up_arch.h"
|
||||
#include "up_internal.h"
|
||||
|
||||
#include "lpc17_ssp.h"
|
||||
#include "lpc1766stk.h"
|
||||
|
||||
/************************************************************************************
|
||||
* Definitions
|
||||
************************************************************************************/
|
||||
|
||||
/************************************************************************************
|
||||
* Private Functions
|
||||
************************************************************************************/
|
||||
|
||||
/************************************************************************************
|
||||
* Public Functions
|
||||
************************************************************************************/
|
||||
|
||||
/************************************************************************************
|
||||
* Name: lpc17_boardinitialize
|
||||
*
|
||||
* Description:
|
||||
* All LPC17xx architectures must provide the following entry point. This entry point
|
||||
* is called early in the intitialization -- after all memory has been configured
|
||||
* and mapped but before any devices have been initialized.
|
||||
*
|
||||
************************************************************************************/
|
||||
|
||||
void lpc17_boardinitialize(void)
|
||||
{
|
||||
/* Configure SSP chip selects if 1) at least one SSP is enabled, and 2) the weak
|
||||
* function lpc1766stk_sspinitialize() has been brought into the link.
|
||||
*/
|
||||
|
||||
#if defined(CONFIG_LPC17_SSP0) || defined(CONFIG_LPC17_SSP1)
|
||||
if (lpc1766stk_sspinitialize)
|
||||
{
|
||||
lpc1766stk_sspinitialize();
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Configure on-board LEDs if LED support has been selected. */
|
||||
|
||||
#ifdef CONFIG_ARCH_LEDS
|
||||
board_led_initialize();
|
||||
#endif
|
||||
}
|
228
configs/olimex-lpc1766stk/src/lpc17_buttons.c
Normal file
228
configs/olimex-lpc1766stk/src/lpc17_buttons.c
Normal file
@ -0,0 +1,228 @@
|
||||
/****************************************************************************
|
||||
* configs/olimex-lpc1766stk/src/lpc17_buttons.c
|
||||
*
|
||||
* Copyright (C) 2011 Gregory Nutt. All rights reserved.
|
||||
* Author: Gregory Nutt <gnutt@nuttx.org>
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
* 3. Neither the name NuttX nor the names of its contributors may be
|
||||
* used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Included Files
|
||||
****************************************************************************/
|
||||
|
||||
#include <nuttx/config.h>
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
#include <nuttx/arch.h>
|
||||
#include <nuttx/irq.h>
|
||||
|
||||
#include <arch/board/board.h>
|
||||
|
||||
#include "lpc17_gpio.h"
|
||||
#include "lpc1766stk.h"
|
||||
|
||||
#ifdef CONFIG_ARCH_BUTTONS
|
||||
|
||||
/****************************************************************************
|
||||
* Definitions
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Private Data
|
||||
****************************************************************************/
|
||||
/* Pin configuration for each STM3210E-EVAL button. This array is indexed by
|
||||
* the BUTTON_* and JOYSTICK_* definitions in board.h
|
||||
*/
|
||||
|
||||
static const uint16_t g_buttoncfg[BOARD_NUM_BUTTONS] =
|
||||
{
|
||||
LPC1766STK_BUT1, LPC1766STK_BUT2, LPC1766STK_WAKEUP, LPC1766STK_CENTER,
|
||||
LPC1766STK_UP, LPC1766STK_DOWN, LPC1766STK_LEFT, LPC1766STK_RIGHT
|
||||
};
|
||||
|
||||
/* This array defines all of the interupt handlers current attached to
|
||||
* button events.
|
||||
*/
|
||||
|
||||
#if defined(CONFIG_ARCH_IRQBUTTONS) && defined(CONFIG_GPIO_IRQ)
|
||||
static xcpt_t g_buttonisr[BOARD_NUM_BUTTONS];
|
||||
|
||||
/* This array provides the mapping from button ID numbers to button IRQ
|
||||
* numbers.
|
||||
*/
|
||||
|
||||
static uint8_t g_buttonirq[BOARD_NUM_BUTTONS] =
|
||||
{
|
||||
LPC1766STK_BUT1_IRQ, LPC1766STK_BUT2_IRQ, LPC1766STK_WAKEUP_IRQ,
|
||||
LPC1766STK_CENTER_IRQ, LPC1766STK_UP_IRQ, LPC1766STK_DOWN_IRQ,
|
||||
LPC1766STK_LEFT_IRQ, LPC1766STK_RIGHT_IRQ
|
||||
};
|
||||
#endif
|
||||
|
||||
/****************************************************************************
|
||||
* Private Functions
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Public Functions
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Name: board_button_initialize
|
||||
*
|
||||
* Description:
|
||||
* board_button_initialize() must be called to initialize button resources. After
|
||||
* that, board_buttons() may be called to collect the current state of all
|
||||
* buttons or board_button_irq() may be called to register button interrupt
|
||||
* handlers.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
void board_button_initialize(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
/* Configure the GPIO pins as interrupting inputs. */
|
||||
|
||||
for (i = 0; i < BOARD_NUM_BUTTONS; i++)
|
||||
{
|
||||
lpc17_configgpio(g_buttoncfg[i]);
|
||||
}
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
* Name: board_buttons
|
||||
*
|
||||
* Description:
|
||||
* board_button_initialize() must be called to initialize button resources. After
|
||||
* that, board_buttons() may be called to collect the current state of all
|
||||
* buttons.
|
||||
*
|
||||
* board_buttons() may be called at any time to harvest the state of every
|
||||
* button. The state of the buttons is returned as a bitset with one
|
||||
* bit corresponding to each button: If the bit is set, then the button
|
||||
* is pressed. See the BOARD_BUTTON_*_BIT and BOARD_JOYSTICK_*_BIT
|
||||
* definitions in board.h for the meaning of each bit.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
uint8_t board_buttons(void)
|
||||
{
|
||||
uint8_t ret = 0;
|
||||
int i;
|
||||
|
||||
/* Check that state of each key */
|
||||
|
||||
for (i = 0; i < BOARD_NUM_BUTTONS; i++)
|
||||
{
|
||||
/* A LOW value means that the key is pressed. */
|
||||
|
||||
bool released = lpc17_gpioread(g_buttoncfg[i]);
|
||||
|
||||
/* Accumulate the set of depressed (not released) keys */
|
||||
|
||||
if (!released)
|
||||
{
|
||||
ret |= (1 << i);
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
* Button support.
|
||||
*
|
||||
* Description:
|
||||
* board_button_initialize() must be called to initialize button resources. After
|
||||
* that, board_button_irq() may be called to register button interrupt handlers.
|
||||
*
|
||||
* board_button_irq() may be called to register an interrupt handler that will
|
||||
* be called when a button is depressed or released. The ID value is a
|
||||
* button enumeration value that uniquely identifies a button resource. See the
|
||||
* BOARD_BUTTON_* and BOARD_JOYSTICK_* definitions in board.h for the meaning
|
||||
* of enumeration values. The previous interrupt handler address is returned
|
||||
* (so that it may restored, if so desired).
|
||||
*
|
||||
* Note that board_button_irq() also enables button interrupts. Button
|
||||
* interrupts will remain enabled after the interrupt handler is attached.
|
||||
* Interrupts may be disabled (and detached) by calling board_button_irq with
|
||||
* irqhandler equal to NULL.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
#if defined(CONFIG_ARCH_IRQBUTTONS) && defined(CONFIG_GPIO_IRQ)
|
||||
xcpt_t board_button_irq(int id, xcpt_t irqhandler)
|
||||
{
|
||||
xcpt_t oldhandler = NULL;
|
||||
irqstate_t flags;
|
||||
int irq;
|
||||
|
||||
/* Verify that the button ID is within range */
|
||||
|
||||
if ((unsigned)id < BOARD_NUM_BUTTONS)
|
||||
{
|
||||
/* Return the current button handler and set the new interrupt handler */
|
||||
|
||||
oldhandler = g_buttonisr[id];
|
||||
g_buttonisr[id] = irqhandler;
|
||||
|
||||
/* Disable interrupts until we are done */
|
||||
|
||||
flags = irqsave();
|
||||
|
||||
/* Configure the interrupt. Either attach and enable the new
|
||||
* interrupt or disable and detach the old interrupt handler.
|
||||
*/
|
||||
|
||||
irq = g_buttonirq[id];
|
||||
if (irqhandler)
|
||||
{
|
||||
/* Attach then enable the new interrupt handler */
|
||||
|
||||
(void)irq_attach(irq, irqhandler);
|
||||
up_enable_irq(irq);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Disable then detach the old interrupt handler */
|
||||
|
||||
up_disable_irq(irq);
|
||||
(void)irq_detach(irq);
|
||||
}
|
||||
irqrestore(flags);
|
||||
}
|
||||
return oldhandler;
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* CONFIG_ARCH_BUTTONS */
|
144
configs/olimex-lpc1766stk/src/lpc17_can.c
Normal file
144
configs/olimex-lpc1766stk/src/lpc17_can.c
Normal file
@ -0,0 +1,144 @@
|
||||
/************************************************************************************
|
||||
* configs/solimex-lpc1766stk/src/lpc17_can.c
|
||||
*
|
||||
* Copyright (C) 2012 Gregory Nutt. All rights reserved.
|
||||
* Author: Gregory Nutt <gnutt@nuttx.org>
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
* 3. Neither the name NuttX nor the names of its contributors may be
|
||||
* used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
************************************************************************************/
|
||||
|
||||
/************************************************************************************
|
||||
* Included Files
|
||||
************************************************************************************/
|
||||
|
||||
#include <nuttx/config.h>
|
||||
|
||||
#include <errno.h>
|
||||
#include <debug.h>
|
||||
|
||||
#include <nuttx/can.h>
|
||||
#include <arch/board/board.h>
|
||||
|
||||
#include "chip.h"
|
||||
#include "up_arch.h"
|
||||
|
||||
#include "lpc17_can.h"
|
||||
#include "lpc1766stk.h"
|
||||
|
||||
#if defined(CONFIG_CAN) && (defined(CONFIG_LPC17_CAN1) || defined(CONFIG_LPC17_CAN2))
|
||||
|
||||
/************************************************************************************
|
||||
* Pre-processor Definitions
|
||||
************************************************************************************/
|
||||
/* Configuration ********************************************************************/
|
||||
|
||||
#if defined(CONFIG_LPC17_CAN1) && defined(CONFIG_LPC17_CAN2)
|
||||
# warning "Both CAN1 and CAN2 are enabled. Assuming only CAN1."
|
||||
# undef CONFIG_LPC17_CAN2
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_LPC17_CAN2
|
||||
# warning "CAN2 is not connected on the LPC1766-STK"
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_LPC17_CAN1
|
||||
# define CAN_PORT 1
|
||||
#else
|
||||
# define CAN_PORT 2
|
||||
#endif
|
||||
|
||||
/* Debug ***************************************************************************/
|
||||
/* Non-standard debug that may be enabled just for testing CAN */
|
||||
|
||||
#ifdef CONFIG_DEBUG_CAN
|
||||
# define candbg dbg
|
||||
# define canvdbg vdbg
|
||||
# define canlldbg lldbg
|
||||
# define canllvdbg llvdbg
|
||||
#else
|
||||
# define candbg(x...)
|
||||
# define canvdbg(x...)
|
||||
# define canlldbg(x...)
|
||||
# define canllvdbg(x...)
|
||||
#endif
|
||||
|
||||
/************************************************************************************
|
||||
* Private Functions
|
||||
************************************************************************************/
|
||||
|
||||
/************************************************************************************
|
||||
* Public Functions
|
||||
************************************************************************************/
|
||||
|
||||
/************************************************************************************
|
||||
* Name: can_devinit
|
||||
*
|
||||
* Description:
|
||||
* All LPC17 architectures must provide the following interface to work with
|
||||
* examples/can.
|
||||
*
|
||||
************************************************************************************/
|
||||
|
||||
int can_devinit(void)
|
||||
{
|
||||
static bool initialized = false;
|
||||
struct can_dev_s *can;
|
||||
int ret;
|
||||
|
||||
/* Check if we have already initialized */
|
||||
|
||||
if (!initialized)
|
||||
{
|
||||
/* Call lpc17_caninitialize() to get an instance of the CAN interface */
|
||||
|
||||
can = lpc17_caninitialize(CAN_PORT);
|
||||
if (can == NULL)
|
||||
{
|
||||
candbg("ERROR: Failed to get CAN interface\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
/* Register the CAN driver at "/dev/can0" */
|
||||
|
||||
ret = can_register("/dev/can0", can);
|
||||
if (ret < 0)
|
||||
{
|
||||
candbg("ERROR: can_register failed: %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Now we are initialized */
|
||||
|
||||
initialized = true;
|
||||
}
|
||||
|
||||
return OK;
|
||||
}
|
||||
|
||||
#endif /* CONFIG_CAN && (CONFIG_LPC17_CAN1 || CONFIG_LPC17_CAN2) */
|
71
configs/olimex-lpc1766stk/src/lpc17_hidbkd.c
Normal file
71
configs/olimex-lpc1766stk/src/lpc17_hidbkd.c
Normal file
@ -0,0 +1,71 @@
|
||||
/****************************************************************************
|
||||
* configs/olimex-lpc1766stk/src/lpc17_hidkbd.c
|
||||
*
|
||||
* Copyright (C) 2013 Gregory Nutt. All rights reserved.
|
||||
* Author: Gregory Nutt <gnutt@nuttx.org>
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
* 3. Neither the name NuttX nor the names of its contributors may be
|
||||
* used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Included Files
|
||||
****************************************************************************/
|
||||
|
||||
#include <nuttx/config.h>
|
||||
|
||||
#include <nuttx/usb/usbhost.h>
|
||||
|
||||
#include "lpc17_usbhost.h"
|
||||
|
||||
#if defined(CONFIG_LPC17_USBHOST) && defined(CONFIG_USBHOST) && \
|
||||
defined(CONFIG_EXAMPLES_HIDKBD)
|
||||
|
||||
/****************************************************************************
|
||||
* Pre-Processor Definitions
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Public Functions
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Name: arch_usbhost_initialize
|
||||
*
|
||||
* Description:
|
||||
* The apps/example/hidkbd test requires that platform-specific code
|
||||
* provide a wrapper called arch_usbhost_initialize() that will perform
|
||||
* the actual USB host initialization.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
struct usbhost_connection_s *arch_usbhost_initialize(void)
|
||||
{
|
||||
return lpc17_usbhost_initialize(0);
|
||||
}
|
||||
#endif /* CONFIG_LPC17_USBHOST && CONFIG_USBHOST && CONFIG_EXAMPLES_HIDKBD */
|
264
configs/olimex-lpc1766stk/src/lpc17_lcd.c
Normal file
264
configs/olimex-lpc1766stk/src/lpc17_lcd.c
Normal file
@ -0,0 +1,264 @@
|
||||
/****************************************************************************
|
||||
* config/olimex-lpc1766stk/src/lpc17_lcd.c
|
||||
*
|
||||
* Copyright (C) 2010, 2013 Gregory Nutt. All rights reserved.
|
||||
* Author: Gregory Nutt <gnutt@nuttx.org>
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
* 3. Neither the name NuttX nor the names of its contributors may be
|
||||
* used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSPBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Included Files
|
||||
****************************************************************************/
|
||||
|
||||
#include <nuttx/config.h>
|
||||
|
||||
#include <stdio.h>
|
||||
#include <debug.h>
|
||||
#include <errno.h>
|
||||
|
||||
#include <nuttx/arch.h>
|
||||
#include <nuttx/spi/spi.h>
|
||||
#include <nuttx/lcd/lcd.h>
|
||||
#include <nuttx/lcd/nokia6100.h>
|
||||
|
||||
#include "up_arch.h"
|
||||
#include "chip/lpc17_syscon.h"
|
||||
#include "chip/lpc17_pwm.h"
|
||||
#include "lpc17_gpio.h"
|
||||
#include "lpc1766stk.h"
|
||||
|
||||
#if defined(CONFIG_NX_LCDDRIVER) && defined(CONFIG_LCD_NOKIA6100) && defined(CONFIG_LPC17_SSP0)
|
||||
|
||||
/****************************************************************************
|
||||
* Pre-Processor Definitions
|
||||
****************************************************************************/
|
||||
|
||||
/* Check power setting */
|
||||
|
||||
#if !defined(CONFIG_LCD_MAXPOWER) || CONFIG_LCD_MAXPOWER != 127
|
||||
# error "CONFIG_LCD_MAXPOWER must be 127"
|
||||
#endif
|
||||
|
||||
/* Backlight OFF PWM setting */
|
||||
|
||||
#define NOKIA_BACKLIGHT_OFF 0x40
|
||||
|
||||
/* Define the CONFIG_LCD_NOKIADBG to enable detailed debug output (stuff you
|
||||
* would never want to see unless you are debugging this file).
|
||||
*
|
||||
* Verbose debug must also be enabled
|
||||
*/
|
||||
|
||||
#ifndef CONFIG_DEBUG
|
||||
# undef CONFIG_DEBUG_VERBOSE
|
||||
# undef CONFIG_DEBUG_GRAPHICS
|
||||
#endif
|
||||
|
||||
#ifndef CONFIG_DEBUG_VERBOSE
|
||||
# undef CONFIG_LCD_NOKIADBG
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_LCD_NOKIADBG
|
||||
# define lcddbg(format, arg...) vdbg(format, ##arg)
|
||||
# define lcd_dumpgpio(m) lpc17_dumpgpio(LPC1766STK_LCD_RST, m)
|
||||
#else
|
||||
# define lcddbg(x...)
|
||||
# define lcd_dumpgpio(m)
|
||||
#endif
|
||||
|
||||
/****************************************************************************
|
||||
* Public Functions
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Name: nokia_blinitialize
|
||||
*
|
||||
* Description:
|
||||
* Initialize PWM1 to manage the LCD backlight.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
void nokia_blinitialize(void)
|
||||
{
|
||||
uint32_t regval;
|
||||
|
||||
/* Enable clocking of PWM1 */
|
||||
|
||||
regval = getreg32(LPC17_SYSCON_PCONP);
|
||||
regval |= SYSCON_PCONP_PCPWM1;
|
||||
putreg32(regval, LPC17_SYSCON_PCONP);
|
||||
|
||||
/* Disable and reset PWM1 */
|
||||
|
||||
regval = getreg32(LPC17_PWM1_TCR);
|
||||
regval &= ~(PWM_TCR_PWMEN|PWM_TCR_CNTREN);
|
||||
regval |= PWM_TCR_CNTRRST;
|
||||
putreg32(regval, LPC17_PWM1_TCR);
|
||||
|
||||
/* Put PWM1 in timer mode */
|
||||
|
||||
regval = getreg32(LPC17_PWM1_CTCR);
|
||||
regval &= ~PWM_CTCR_MODE_MASK;
|
||||
regval |= PWM_CTCR_MODE_TIMER;
|
||||
putreg32(regval, LPC17_PWM1_CTCR);
|
||||
|
||||
/* Reset on MR0 */
|
||||
|
||||
putreg32(PWM_MCR_MR0R, LPC17_PWM1_MCR);
|
||||
|
||||
/* Single edge controlled mod for PWM3 and enable output */
|
||||
|
||||
regval = getreg32(LPC17_PWM1_PCR);
|
||||
regval &= ~PWM_PCR_SEL3;
|
||||
regval |= PWM_PCR_ENA3;
|
||||
putreg32(regval, LPC17_PWM1_PCR);
|
||||
|
||||
/* Clear prescaler */
|
||||
|
||||
putreg32(0, LPC17_PWM1_PR);
|
||||
|
||||
/* Set 8-bit resolution */
|
||||
|
||||
putreg32(0xff, LPC17_PWM1_MCR);
|
||||
|
||||
/* Enable PWM match 1 latch */
|
||||
|
||||
regval = getreg32(LPC17_PWM1_LER);
|
||||
regval |= PWM_LER_M0EN;
|
||||
putreg32(regval, LPC17_PWM1_LER);
|
||||
|
||||
/* Clear match register 3 */
|
||||
|
||||
putreg32(0, LPC17_PWM1_MR3);
|
||||
|
||||
/* Enable PWM1 */
|
||||
|
||||
regval |= PWM_LER_M3EN;
|
||||
putreg32(regval, LPC17_PWM1_LER);
|
||||
|
||||
regval = getreg32(LPC17_PWM1_TCR);
|
||||
regval &= ~(PWM_TCR_CNTRRST);
|
||||
regval |= (PWM_TCR_PWMEN|PWM_TCR_CNTREN);
|
||||
putreg32(regval, LPC17_PWM1_TCR);
|
||||
|
||||
nokia_backlight(0);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
* Public Functions
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Name: up_nxdrvinit
|
||||
*
|
||||
* Description:
|
||||
* Called NX initialization logic to configure the LCD.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
FAR struct lcd_dev_s *up_nxdrvinit(unsigned int devno)
|
||||
{
|
||||
FAR struct spi_dev_s *spi;
|
||||
FAR struct lcd_dev_s *dev;
|
||||
|
||||
/* Configure the LCD GPIOs */
|
||||
|
||||
lcd_dumpgpio("up_nxdrvinit: On entry");
|
||||
lpc17_configgpio(LPC1766STK_LCD_RST);
|
||||
lpc17_configgpio(LPC1766STK_LCD_BL);
|
||||
lcd_dumpgpio("up_nxdrvinit: After GPIO setup");
|
||||
|
||||
/* Reset the LCD */
|
||||
|
||||
lpc17_gpiowrite(LPC1766STK_LCD_RST, false);
|
||||
up_udelay(10);
|
||||
lpc17_gpiowrite(LPC1766STK_LCD_RST, true);
|
||||
up_mdelay(5);
|
||||
|
||||
/* Configure PWM1 to support the backlight */
|
||||
|
||||
nokia_blinitialize();
|
||||
|
||||
/* Get the SSP0 port (configure as a Freescale SPI port) */
|
||||
|
||||
spi = lpc17_sspinitialize(0);
|
||||
if (!spi)
|
||||
{
|
||||
glldbg("Failed to initialize SSP port 0\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Bind the SSP port to the LCD */
|
||||
|
||||
dev = nokia_lcdinitialize(spi, devno);
|
||||
if (!dev)
|
||||
{
|
||||
glldbg("Failed to bind SSP port 0 to LCD %d: %d\n", devno);
|
||||
}
|
||||
else
|
||||
{
|
||||
gllvdbg("Bound SSP port 0 to LCD %d\n", devno);
|
||||
|
||||
/* And turn the LCD on (CONFIG_LCD_MAXPOWER should be 1) */
|
||||
|
||||
(void)dev->setpower(dev, CONFIG_LCD_MAXPOWER);
|
||||
return dev;
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
* Name: nokia_backlight
|
||||
*
|
||||
* Description:
|
||||
* The Nokia 6100 backlight is controlled by logic outside of the LCD
|
||||
* assembly. This function must be provided by board specific logic to
|
||||
* manage the backlight. This function will receive a power value (0:
|
||||
* full off - CONFIG_LCD_MAXPOWER: full on) and should set the backlight
|
||||
* accordingly.
|
||||
*
|
||||
* On the Olimex LPC1766STK, the backlight level is controlled by PWM1.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
int nokia_backlight(unsigned int power)
|
||||
{
|
||||
uint32_t regval;
|
||||
|
||||
putreg32(NOKIA_BACKLIGHT_OFF + power, LPC17_PWM1_MR3);
|
||||
|
||||
regval = getreg32(LPC17_PWM1_LER);
|
||||
regval |= PWM_LER_M3EN;
|
||||
putreg32(regval, LPC17_PWM1_LER);
|
||||
return OK;
|
||||
}
|
||||
|
||||
#endif /* CONFIG_NX_LCDDRIVER && CONFIG_LCD_NOKIA6100 && CONFIG_LPC17_SSP0 */
|
205
configs/olimex-lpc1766stk/src/lpc17_leds.c
Normal file
205
configs/olimex-lpc1766stk/src/lpc17_leds.c
Normal file
@ -0,0 +1,205 @@
|
||||
/****************************************************************************
|
||||
* configs/olimex-lpc1766stk/src/lpc17_leds.c
|
||||
*
|
||||
* Copyright (C) 2010-2011, 2013 Gregory Nutt. All rights reserved.
|
||||
* Author: Gregory Nutt <gnutt@nuttx.org>
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
* 3. Neither the name NuttX nor the names of its contributors may be
|
||||
* used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Included Files
|
||||
****************************************************************************/
|
||||
|
||||
#include <nuttx/config.h>
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include <debug.h>
|
||||
|
||||
#include <arch/board/board.h>
|
||||
|
||||
#include "chip.h"
|
||||
#include "up_arch.h"
|
||||
#include "up_internal.h"
|
||||
|
||||
#include "lpc17_gpio.h"
|
||||
|
||||
#include "lpc1766stk.h"
|
||||
|
||||
/****************************************************************************
|
||||
* Definitions
|
||||
****************************************************************************/
|
||||
|
||||
/* CONFIG_DEBUG_LEDS enables debug output from this file (needs CONFIG_DEBUG
|
||||
* with CONFIG_DEBUG_VERBOSE too)
|
||||
*/
|
||||
|
||||
#ifdef CONFIG_DEBUG_LEDS
|
||||
# define leddbg lldbg
|
||||
# ifdef CONFIG_DEBUG_VERBOSE
|
||||
# define ledvdbg lldbg
|
||||
# else
|
||||
# define ledvdbg(x...)
|
||||
# endif
|
||||
#else
|
||||
# define leddbg(x...)
|
||||
# define ledvdbg(x...)
|
||||
#endif
|
||||
|
||||
/* Dump GPIO registers */
|
||||
|
||||
#if defined(CONFIG_DEBUG_VERBOSE) && defined(CONFIG_DEBUG_LEDS)
|
||||
# define led_dumpgpio(m) lpc17_dumpgpio(LPC1766STK_LED1, m)
|
||||
#else
|
||||
# define led_dumpgpio(m)
|
||||
#endif
|
||||
|
||||
/****************************************************************************
|
||||
* Private Data
|
||||
****************************************************************************/
|
||||
|
||||
#ifdef CONFIG_ARCH_LEDS
|
||||
static bool g_uninitialized = true;
|
||||
#endif
|
||||
|
||||
/****************************************************************************
|
||||
* Private Functions
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Public Functions
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Name: lpc17_ledinit/board_led_initialize
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef CONFIG_ARCH_LEDS
|
||||
void lpc17_ledinit(void) /* Name when invoked externally */
|
||||
#else
|
||||
void board_led_initialize(void) /* Name when invoked via lpc17_boot.c */
|
||||
#endif
|
||||
{
|
||||
/* Configure all LED GPIO lines */
|
||||
|
||||
led_dumpgpio("board_led_initialize() Entry)");
|
||||
|
||||
lpc17_configgpio(LPC1766STK_LED1);
|
||||
lpc17_configgpio(LPC1766STK_LED2);
|
||||
|
||||
led_dumpgpio("board_led_initialize() Exit");
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
* Name: lpc17_setled
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef CONFIG_ARCH_LEDS
|
||||
void lpc17_setled(int led, bool ledon)
|
||||
{
|
||||
if (led == BOARD_LED1)
|
||||
{
|
||||
lpc17_gpiowrite(LPC1766STK_LED1, !ledon);
|
||||
}
|
||||
else if (led == BOARD_LED2)
|
||||
{
|
||||
lpc17_gpiowrite(LPC1766STK_LED2, !ledon);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
/****************************************************************************
|
||||
* Name: lpc17_setleds
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef CONFIG_ARCH_LEDS
|
||||
void lpc17_setleds(uint8_t ledset)
|
||||
{
|
||||
lpc17_gpiowrite(LPC1766STK_LED1, (ledset & BOARD_LED1_BIT) == 0);
|
||||
lpc17_gpiowrite(LPC1766STK_LED2, (ledset & BOARD_LED2_BIT) == 0);
|
||||
}
|
||||
#endif
|
||||
|
||||
/****************************************************************************
|
||||
* Name: board_led_on
|
||||
****************************************************************************/
|
||||
|
||||
#ifdef CONFIG_ARCH_LEDS
|
||||
void board_led_on(int led)
|
||||
{
|
||||
switch (led)
|
||||
{
|
||||
default:
|
||||
case 0 : /* STARTED, HEAPALLOCATE, IRQSENABLED */
|
||||
lpc17_gpiowrite(LPC1766STK_LED1, true);
|
||||
lpc17_gpiowrite(LPC1766STK_LED2, true);
|
||||
break;
|
||||
|
||||
case 1 : /* STACKCREATED */
|
||||
lpc17_gpiowrite(LPC1766STK_LED1, false);
|
||||
lpc17_gpiowrite(LPC1766STK_LED2, true);
|
||||
g_uninitialized = false;
|
||||
break;
|
||||
|
||||
case 2 : /* INIRQ, SIGNAL, ASSERTION, PANIC */
|
||||
lpc17_gpiowrite(LPC1766STK_LED2, false);
|
||||
break;
|
||||
|
||||
case 3 : /* IDLE */
|
||||
lpc17_gpiowrite(LPC1766STK_LED1, true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
/****************************************************************************
|
||||
* Name: board_led_off
|
||||
****************************************************************************/
|
||||
|
||||
#ifdef CONFIG_ARCH_LEDS
|
||||
void board_led_off(int led)
|
||||
{
|
||||
switch (led)
|
||||
{
|
||||
default:
|
||||
case 0 : /* STARTED, HEAPALLOCATE, IRQSENABLED */
|
||||
case 1 : /* STACKCREATED */
|
||||
lpc17_gpiowrite(LPC1766STK_LED1, true);
|
||||
|
||||
case 2 : /* INIRQ, SIGNAL, ASSERTION, PANIC */
|
||||
lpc17_gpiowrite(LPC1766STK_LED2, true);
|
||||
break;
|
||||
|
||||
case 3 : /* IDLE */
|
||||
lpc17_gpiowrite(LPC1766STK_LED1, g_uninitialized);
|
||||
break;
|
||||
}
|
||||
}
|
||||
#endif
|
326
configs/olimex-lpc1766stk/src/lpc17_nsh.c
Normal file
326
configs/olimex-lpc1766stk/src/lpc17_nsh.c
Normal file
@ -0,0 +1,326 @@
|
||||
/****************************************************************************
|
||||
* config/olimex-lpc1766stk/src/lpc17_nsh.c
|
||||
*
|
||||
* Copyright (C) 2010, 2013-2014 Gregory Nutt. All rights reserved.
|
||||
* Author: Gregory Nutt <gnutt@nuttx.org>
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
* 3. Neither the name NuttX nor the names of its contributors may be
|
||||
* used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Included Files
|
||||
****************************************************************************/
|
||||
|
||||
#include <nuttx/config.h>
|
||||
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include <debug.h>
|
||||
#include <errno.h>
|
||||
|
||||
#include <nuttx/spi/spi.h>
|
||||
#include <nuttx/mmcsd.h>
|
||||
#include <nuttx/usb/usbhost.h>
|
||||
|
||||
#include "lpc17_ssp.h"
|
||||
#include "lpc17_gpio.h"
|
||||
#include "lpc17_usbhost.h"
|
||||
#include "lpc1766stk.h"
|
||||
|
||||
/****************************************************************************
|
||||
* Pre-Processor Definitions
|
||||
****************************************************************************/
|
||||
|
||||
/* Configuration ************************************************************/
|
||||
|
||||
#define NSH_HAVEMMCSD 1
|
||||
#define NSH_HAVEUSBHOST 1
|
||||
|
||||
/* MMC/SD is on SSP port 1. There is only a single slot, slot 0 */
|
||||
|
||||
#if !defined(CONFIG_NSH_MMCSDSPIPORTNO) || CONFIG_NSH_MMCSDSPIPORTNO != 1
|
||||
# undef CONFIG_NSH_MMCSDSPIPORTNO
|
||||
# define CONFIG_NSH_MMCSDSPIPORTNO 1
|
||||
#endif
|
||||
|
||||
#if !defined(CONFIG_NSH_MMCSDSLOTNO) || CONFIG_NSH_MMCSDSLOTNO != 0
|
||||
# undef CONFIG_NSH_MMCSDSLOTNO
|
||||
# define CONFIG_NSH_MMCSDSLOTNO 0
|
||||
#endif
|
||||
|
||||
/* Can't support MMC/SD is SSP1 is not enabled */
|
||||
|
||||
#ifndef CONFIG_LPC17_SSP1
|
||||
# undef NSH_HAVEMMCSD
|
||||
#endif
|
||||
|
||||
/* Can't support MMC/SD features if mountpoints are disabled */
|
||||
|
||||
#if defined(CONFIG_DISABLE_MOUNTPOINT)
|
||||
# undef NSH_HAVEMMCSD
|
||||
#endif
|
||||
|
||||
#ifndef CONFIG_NSH_MMCSDMINOR
|
||||
# define CONFIG_NSH_MMCSDMINOR 0
|
||||
#endif
|
||||
|
||||
/* USB Host */
|
||||
|
||||
#ifdef CONFIG_USBHOST
|
||||
# ifndef CONFIG_LPC17_USBHOST
|
||||
# error "CONFIG_LPC17_USBHOST is not selected"
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_LPC17_USBHOST
|
||||
# ifndef CONFIG_USBHOST
|
||||
# warning "CONFIG_USBHOST is not selected"
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#if !defined(CONFIG_USBHOST) || !defined(CONFIG_LPC17_USBHOST)
|
||||
# undef NSH_HAVEUSBHOST
|
||||
#endif
|
||||
|
||||
#ifdef NSH_HAVEUSBHOST
|
||||
# ifndef CONFIG_USBHOST_DEFPRIO
|
||||
# define CONFIG_USBHOST_DEFPRIO 50
|
||||
# endif
|
||||
# ifndef CONFIG_USBHOST_STACKSIZE
|
||||
# define CONFIG_USBHOST_STACKSIZE 1024
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* Debug ********************************************************************/
|
||||
|
||||
#ifdef CONFIG_CPP_HAVE_VARARGS
|
||||
# ifdef CONFIG_DEBUG
|
||||
# define message(...) lowsyslog(__VA_ARGS__)
|
||||
# else
|
||||
# define message(...) printf(__VA_ARGS__)
|
||||
# endif
|
||||
#else
|
||||
# ifdef CONFIG_DEBUG
|
||||
# define message lowsyslog
|
||||
# else
|
||||
# define message printf
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/****************************************************************************
|
||||
* Private Data
|
||||
****************************************************************************/
|
||||
|
||||
#ifdef NSH_HAVEUSBHOST
|
||||
static struct usbhost_connection_s *g_usbconn;
|
||||
#endif
|
||||
|
||||
/****************************************************************************
|
||||
* Private Functions
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Name: nsh_waiter
|
||||
*
|
||||
* Description:
|
||||
* Wait for USB devices to be connected.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
#ifdef NSH_HAVEUSBHOST
|
||||
static int nsh_waiter(int argc, char *argv[])
|
||||
{
|
||||
bool connected = false;
|
||||
int ret;
|
||||
|
||||
message("nsh_waiter: Running\n");
|
||||
for (;;)
|
||||
{
|
||||
/* Wait for the device to change state */
|
||||
|
||||
ret = CONN_WAIT(g_usbconn, &connected);
|
||||
DEBUGASSERT(ret == OK);
|
||||
|
||||
connected = !connected;
|
||||
message("nsh_waiter: %s\n", connected ? "connected" : "disconnected");
|
||||
|
||||
/* Did we just become connected? */
|
||||
|
||||
if (connected)
|
||||
{
|
||||
/* Yes.. enumerate the newly connected device */
|
||||
|
||||
(void)CONN_ENUMERATE(g_usbconn, 0);
|
||||
}
|
||||
}
|
||||
|
||||
/* Keep the compiler from complaining */
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
/****************************************************************************
|
||||
* Name: nsh_sdinitialize
|
||||
*
|
||||
* Description:
|
||||
* Initialize SPI-based microSD.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
#ifdef NSH_HAVEMMCSD
|
||||
static int nsh_sdinitialize(void)
|
||||
{
|
||||
FAR struct spi_dev_s *ssp;
|
||||
int ret;
|
||||
|
||||
/* Enable power to the SD/MMC via a GPIO. LOW enables SD/MMC. */
|
||||
|
||||
lpc17_gpiowrite(LPC1766STK_MMC_PWR, false);
|
||||
|
||||
/* Get the SSP port */
|
||||
|
||||
ssp = lpc17_sspinitialize(CONFIG_NSH_MMCSDSPIPORTNO);
|
||||
if (!ssp)
|
||||
{
|
||||
message("nsh_archinitialize: Failed to initialize SSP port %d\n",
|
||||
CONFIG_NSH_MMCSDSPIPORTNO);
|
||||
ret = -ENODEV;
|
||||
goto errout;
|
||||
}
|
||||
|
||||
message("Successfully initialized SSP port %d\n",
|
||||
CONFIG_NSH_MMCSDSPIPORTNO);
|
||||
|
||||
/* Bind the SSP port to the slot */
|
||||
|
||||
ret = mmcsd_spislotinitialize(CONFIG_NSH_MMCSDMINOR,
|
||||
CONFIG_NSH_MMCSDSLOTNO, ssp);
|
||||
if (ret < 0)
|
||||
{
|
||||
message("nsh_sdinitialize: "
|
||||
"Failed to bind SSP port %d to MMC/SD slot %d: %d\n",
|
||||
CONFIG_NSH_MMCSDSPIPORTNO,
|
||||
CONFIG_NSH_MMCSDSLOTNO, ret);
|
||||
goto errout;
|
||||
}
|
||||
|
||||
message("Successfuly bound SSP port %d to MMC/SD slot %d\n",
|
||||
CONFIG_NSH_MMCSDSPIPORTNO,
|
||||
CONFIG_NSH_MMCSDSLOTNO);
|
||||
return OK;
|
||||
|
||||
/* Disable power to the SD/MMC via a GPIO. HIGH disables SD/MMC. */
|
||||
|
||||
errout:
|
||||
lpc17_gpiowrite(LPC1766STK_MMC_PWR, true);
|
||||
return ret;
|
||||
}
|
||||
#else
|
||||
# define nsh_sdinitialize() (OK)
|
||||
#endif
|
||||
|
||||
/****************************************************************************
|
||||
* Name: nsh_usbhostinitialize
|
||||
*
|
||||
* Description:
|
||||
* Initialize SPI-based microSD.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
#ifdef NSH_HAVEUSBHOST
|
||||
static int nsh_usbhostinitialize(void)
|
||||
{
|
||||
int pid;
|
||||
int ret;
|
||||
|
||||
/* First, register all of the class drivers needed to support the drivers
|
||||
* that we care about:
|
||||
*/
|
||||
|
||||
message("nsh_usbhostinitialize: Register class drivers\n");
|
||||
ret = usbhost_storageinit();
|
||||
if (ret != OK)
|
||||
{
|
||||
message("nsh_usbhostinitialize: Failed to register the mass storage class\n");
|
||||
}
|
||||
|
||||
/* Then get an instance of the USB host interface */
|
||||
|
||||
message("nsh_usbhostinitialize: Initialize USB host\n");
|
||||
g_usbconn = lpc17_usbhost_initialize(0);
|
||||
if (g_usbconn)
|
||||
{
|
||||
/* Start a thread to handle device connection. */
|
||||
|
||||
message("nsh_usbhostinitialize: Start nsh_waiter\n");
|
||||
|
||||
#ifndef CONFIG_CUSTOM_STACK
|
||||
pid = task_create("usbhost", CONFIG_USBHOST_DEFPRIO,
|
||||
CONFIG_USBHOST_STACKSIZE,
|
||||
(main_t)nsh_waiter, (FAR char * const *)NULL);
|
||||
#else
|
||||
pid = task_create("usbhost", CONFIG_USBHOST_DEFPRIO,
|
||||
(main_t)nsh_waiter, (FAR char * const *)NULL);
|
||||
#endif
|
||||
return pid < 0 ? -ENOEXEC : OK;
|
||||
}
|
||||
return -ENODEV;
|
||||
}
|
||||
#else
|
||||
# define nsh_usbhostinitialize() (OK)
|
||||
#endif
|
||||
|
||||
/****************************************************************************
|
||||
* Public Functions
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Name: nsh_archinitialize
|
||||
*
|
||||
* Description:
|
||||
* Perform architecture specific initialization
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
int nsh_archinitialize(void)
|
||||
{
|
||||
int ret;
|
||||
|
||||
/* Initialize SPI-based microSD */
|
||||
|
||||
ret = nsh_sdinitialize();
|
||||
if (ret == OK)
|
||||
{
|
||||
/* Initialize USB host */
|
||||
|
||||
ret = nsh_usbhostinitialize();
|
||||
}
|
||||
return ret;
|
||||
}
|
380
configs/olimex-lpc1766stk/src/lpc17_ssp.c
Normal file
380
configs/olimex-lpc1766stk/src/lpc17_ssp.c
Normal file
@ -0,0 +1,380 @@
|
||||
/************************************************************************************
|
||||
* configs/olimex-lpc1766stk/src/lpc17_ssp.c
|
||||
*
|
||||
* Copyright (C) 2010, 2013 Gregory Nutt. All rights reserved.
|
||||
* Author: Gregory Nutt <gnutt@nuttx.org>
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
* 3. Neither the name NuttX nor the names of its contributors may be
|
||||
* used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
************************************************************************************/
|
||||
|
||||
/************************************************************************************
|
||||
* Included Files
|
||||
************************************************************************************/
|
||||
|
||||
#include <nuttx/config.h>
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include <debug.h>
|
||||
|
||||
#include <nuttx/spi/spi.h>
|
||||
#ifdef CONFIG_SPI_CALLBACK
|
||||
#include <nuttx/irq.h>
|
||||
#endif
|
||||
|
||||
#include <arch/board/board.h>
|
||||
|
||||
#include "up_arch.h"
|
||||
#include "chip.h"
|
||||
#include "lpc17_gpio.h"
|
||||
#include "lpc17_ssp.h"
|
||||
#include "lpc1766stk.h"
|
||||
|
||||
#if defined(CONFIG_LPC17_SSP0) || defined(CONFIG_LPC17_SSP1)
|
||||
|
||||
/************************************************************************************
|
||||
* Definitions
|
||||
************************************************************************************/
|
||||
/* Configuration ************************************************************/
|
||||
|
||||
#ifdef CONFIG_SPI_CALLBACK
|
||||
# ifndef CONFIG_GPIO_IRQ
|
||||
# warning "CONFIG_GPIO_IRQ is required to support CONFIG_SPI_CALLBACK"
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* Debug ********************************************************************/
|
||||
/* The following enable debug output from this file (needs CONFIG_DEBUG too).
|
||||
*
|
||||
* CONFIG_SSP_DEBUG - Define to enable basic SSP debug
|
||||
* CONFIG_SSP_VERBOSE - Define to enable verbose SSP debug
|
||||
*/
|
||||
|
||||
#ifdef CONFIG_SSP_DEBUG
|
||||
# define sspdbg lldbg
|
||||
# ifdef CONFIG_SSP_VERBOSE
|
||||
# define sspvdbg lldbg
|
||||
# else
|
||||
# define sspvdbg(x...)
|
||||
# endif
|
||||
#else
|
||||
# undef CONFIG_SSP_VERBOSE
|
||||
# define sspdbg(x...)
|
||||
# define sspvdbg(x...)
|
||||
#endif
|
||||
|
||||
/* Dump GPIO registers */
|
||||
|
||||
#ifdef CONFIG_SSP_VERBOSE
|
||||
# define ssp_dumpssp0gpio(m) lpc17_dumpgpio(LPC1766STK_LCD_CS, m)
|
||||
# define ssp_dumpssp1gpio(m) lpc17_dumpgpio(LPC1766STK_MMC_CS, m)
|
||||
#else
|
||||
# define ssp_dumpssp0gpio(m)
|
||||
# define ssp_dumpssp1gpio(m)
|
||||
#endif
|
||||
|
||||
/************************************************************************************
|
||||
* Private Types
|
||||
************************************************************************************/
|
||||
|
||||
/* This structure describes on media change callback */
|
||||
|
||||
#ifdef CONFIG_SPI_CALLBACK
|
||||
struct lpc17_mediachange_s
|
||||
{
|
||||
spi_mediachange_t callback; /* The media change callback */
|
||||
FAR void *arg; /* Callback argument */
|
||||
};
|
||||
#endif
|
||||
|
||||
/************************************************************************************
|
||||
* Private Data
|
||||
************************************************************************************/
|
||||
|
||||
/* Registered media change callback */
|
||||
|
||||
#ifdef CONFIG_SPI_CALLBACK
|
||||
#ifdef CONFIG_LPC17_SSP0
|
||||
static struct lpc17_mediachange_s g_ssp0callback;
|
||||
#endif
|
||||
#ifdef CONFIG_LPC17_SSP1
|
||||
static struct lpc17_mediachange_s g_ssp1callback;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/************************************************************************************
|
||||
* Private Functions
|
||||
************************************************************************************/
|
||||
|
||||
/************************************************************************************
|
||||
* Name: ssp_cdirqsetup
|
||||
*
|
||||
* Description:
|
||||
* Setup to receive a card detection interrupt
|
||||
*
|
||||
************************************************************************************/
|
||||
|
||||
#ifdef CONFIG_SPI_CALLBACK
|
||||
static void ssp_cdirqsetup(int irq, xcpt_t irqhandler)
|
||||
{
|
||||
irqstate_t flags;
|
||||
|
||||
/* Disable interrupts until we are done */
|
||||
|
||||
flags = irqsave();
|
||||
|
||||
/* Configure the interrupt. Either attach and enable the new
|
||||
* interrupt or disable and detach the old interrupt handler.
|
||||
*/
|
||||
|
||||
if (irqhandler)
|
||||
{
|
||||
/* Attach then enable the new interrupt handler */
|
||||
|
||||
(void)irq_attach(irq, irqhandler);
|
||||
up_enable_irq(irq);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Disable then detach the old interrupt handler */
|
||||
|
||||
up_disable_irq(irq);
|
||||
(void)irq_detach(irq);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
/************************************************************************************
|
||||
* Name: ssp0/1_cdinterrupt
|
||||
*
|
||||
* Description:
|
||||
* Handle card detection interrupt
|
||||
*
|
||||
************************************************************************************/
|
||||
|
||||
#ifdef CONFIG_SPI_CALLBACK
|
||||
#ifdef CONFIG_LPC17_SSP0
|
||||
static int ssp0_cdinterrupt(int irq, FAR void *context)
|
||||
{
|
||||
/* Invoke the media change callback */
|
||||
|
||||
if (g_ssp0callback.callback)
|
||||
{
|
||||
g_ssp0callback.callback(g_ssp0callback.arg);
|
||||
}
|
||||
return OK;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_LPC17_SSP1
|
||||
static int ssp1_cdinterrupt(int irq, FAR void *context)
|
||||
{
|
||||
/* Invoke the media change callback */
|
||||
|
||||
if (g_ssp1callback.callback)
|
||||
{
|
||||
g_ssp1callback.callback(g_ssp1callback.arg);
|
||||
}
|
||||
return OK;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/************************************************************************************
|
||||
* Public Functions
|
||||
************************************************************************************/
|
||||
|
||||
/************************************************************************************
|
||||
* Name: lpc1766stk_sspinitialize
|
||||
*
|
||||
* Description:
|
||||
* Called to configure SPI chip select GPIO pins for the LPC1766-STK.
|
||||
*
|
||||
************************************************************************************/
|
||||
|
||||
void weak_function lpc1766stk_sspinitialize(void)
|
||||
{
|
||||
/* Configure the SSP0 chip select GPIOs. Only the Nokia LCD is connected to SSP0 */
|
||||
|
||||
#ifdef CONFIG_LPC17_SSP0
|
||||
ssp_dumpssp0gpio("BEFORE SSP0 Initialization");
|
||||
lpc17_configgpio(LPC1766STK_LCD_CS);
|
||||
ssp_dumpssp0gpio("AFTER SSP0 Initialization");
|
||||
#endif
|
||||
|
||||
/* Configure SSP1 chip select GPIOs. Only the SD/MMC card slot is connected to SSP1 */
|
||||
|
||||
#ifdef CONFIG_LPC17_SSP1
|
||||
ssp_dumpssp0gpio("BEFORE SSP1 Initialization");
|
||||
lpc17_configgpio(LPC1766STK_MMC_CS);
|
||||
|
||||
/* Also configure the SD/MMC power GPIO (but leave power off). This really has
|
||||
* nothing to do with SSP, but does belong with other SD/MMC GPIO configuration
|
||||
* settings.
|
||||
*/
|
||||
|
||||
lpc17_configgpio(LPC1766STK_MMC_PWR);
|
||||
ssp_dumpssp0gpio("AFTER SSP1 Initialization");
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_SPI_CALLBACK
|
||||
/* If there were any CD detect pins for the LPC1766-STK, this is where
|
||||
* they would be configured.
|
||||
*/
|
||||
#endif
|
||||
}
|
||||
|
||||
/************************************************************************************
|
||||
* Name: lpc17_ssp0/ssp1select and lpc17_ssp0/ssp1status
|
||||
*
|
||||
* Description:
|
||||
* The external functions, lpc17_ssp0/ssp1select and lpc17_ssp0/ssp1status
|
||||
* 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 lpc17_sspinitialize())
|
||||
* are provided by common LPC17xx logic. To use this common SPI logic on your
|
||||
* board:
|
||||
*
|
||||
* 1. Provide logic in lpc17_boardinitialize() to configure SPI/SSP chip select
|
||||
* pins.
|
||||
* 2. Provide lpc17_ssp0/ssp1select() and lpc17_ssp0/ssp1status() 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 lpc17_sspinitialize() in your low level application
|
||||
* initialization logic
|
||||
* 4. The handle returned by lpc17_sspinitialize() 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_LPC17_SSP0
|
||||
void lpc17_ssp0select(FAR struct spi_dev_s *dev, enum spi_dev_e devid, bool selected)
|
||||
{
|
||||
sspdbg("devid: %d CS: %s\n", (int)devid, selected ? "assert" : "de-assert");
|
||||
if (devid == SPIDEV_DISPLAY)
|
||||
{
|
||||
/* Assert/de-assert the CS pin to the card */
|
||||
|
||||
ssp_dumpssp0gpio("lpc17_ssp0select() Entry");
|
||||
lpc17_gpiowrite(LPC1766STK_LCD_CS, !selected);
|
||||
ssp_dumpssp0gpio("lpc17_ssp0select() Exit");
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t lpc17_ssp0status(FAR struct spi_dev_s *dev, enum spi_dev_e devid)
|
||||
{
|
||||
sspdbg("Returning nothing\n");
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_LPC17_SSP1
|
||||
void lpc17_ssp1select(FAR struct spi_dev_s *dev, enum spi_dev_e devid, bool selected)
|
||||
{
|
||||
sspdbg("devid: %d CS: %s\n", (int)devid, selected ? "assert" : "de-assert");
|
||||
if (devid == SPIDEV_MMCSD)
|
||||
{
|
||||
/* Assert/de-assert the CS pin to the card */
|
||||
|
||||
ssp_dumpssp1gpio("lpc17_ssp1select() Entry");
|
||||
lpc17_gpiowrite(LPC1766STK_MMC_CS, !selected);
|
||||
ssp_dumpssp1gpio("lpc17_ssp1select() Exit");
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t lpc17_ssp1status(FAR struct spi_dev_s *dev, enum spi_dev_e devid)
|
||||
{
|
||||
sspdbg("Returning SPI_STATUS_PRESENT\n");
|
||||
return SPI_STATUS_PRESENT;
|
||||
}
|
||||
#endif
|
||||
|
||||
/************************************************************************************
|
||||
* Name: lpc17_ssp0/1register
|
||||
*
|
||||
* Description:
|
||||
* If the board supports a card detect callback to inform the SPI-based
|
||||
* MMC/SD drvier when an SD card is inserted or removed, then
|
||||
* CONFIG_SPI_CALLBACK should be defined and the following function(s) must
|
||||
* must be implemented. These functiosn implements the registercallback
|
||||
* method of the SPI interface (see include/nuttx/spi/spi.h for details)
|
||||
*
|
||||
* Input Parameters:
|
||||
* dev - Device-specific state data
|
||||
* callback - The funtion to call on the media change
|
||||
* arg - A caller provided value to return with the callback
|
||||
*
|
||||
* Returned Value:
|
||||
* 0 on success; negated errno on failure.
|
||||
*
|
||||
************************************************************************************/
|
||||
|
||||
#ifdef CONFIG_SPI_CALLBACK
|
||||
#ifdef CONFIG_LPC17_SSP0
|
||||
/* If there were any CD detect pins on the LPC1766-STK, this is how the
|
||||
* would be configured.
|
||||
*/
|
||||
|
||||
int lpc17_ssp0register(FAR struct spi_dev_s *dev, spi_mediachange_t callback, void *arg)
|
||||
{
|
||||
/* Save the callback information */
|
||||
|
||||
#if 0
|
||||
g_ssp0callback.callback = callback;
|
||||
g_ssp0callback.arg = arg;
|
||||
|
||||
/* Setup the interrupt */
|
||||
|
||||
spi_cdirqsetup(LPC1766STK_SPICD_IRQ, ssp0_cdinterrupt);
|
||||
#endif
|
||||
return OK;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_LPC17_SSP1
|
||||
int lpc17_ssp1register(FAR struct spi_dev_s *dev, spi_mediachange_t callback, void *arg)
|
||||
{
|
||||
/* Save the callback information */
|
||||
|
||||
#if 0
|
||||
g_ssp1callback.callback = callback;
|
||||
g_ssp1callback.arg = arg;
|
||||
|
||||
/* Setup the interrupt */
|
||||
|
||||
spi_cdirqsetup(LPC1766STK_SPICD_IRQ, ssp1_cdinterrupt);
|
||||
#endif
|
||||
return OK;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#endif /* CONFIG_LPC17_SSP0 || CONFIG_LPC17_SSP1 */
|
155
configs/olimex-lpc1766stk/src/lpc17_usbmsc.c
Normal file
155
configs/olimex-lpc1766stk/src/lpc17_usbmsc.c
Normal file
@ -0,0 +1,155 @@
|
||||
/****************************************************************************
|
||||
* configs/olimex-lpc1766stk/src/lpc17_usbmsc.c
|
||||
*
|
||||
* Copyright (C) 2010 Gregory Nutt. All rights reserved.
|
||||
* Author: Gregory Nutt <gnutt@nuttx.org>
|
||||
*
|
||||
* Configure and register the LPC17xx MMC/SD SPI block driver.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
* 3. Neither the name NuttX nor the names of its contributors may be
|
||||
* used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Included Files
|
||||
****************************************************************************/
|
||||
|
||||
#include <nuttx/config.h>
|
||||
|
||||
#include <stdio.h>
|
||||
#include <debug.h>
|
||||
#include <errno.h>
|
||||
|
||||
#include <nuttx/spi/spi.h>
|
||||
#include <nuttx/mmcsd.h>
|
||||
|
||||
#include "lpc17_gpio.h"
|
||||
#include "lpc1766stk.h"
|
||||
|
||||
/****************************************************************************
|
||||
* Pre-Processor Definitions
|
||||
****************************************************************************/
|
||||
|
||||
/* Configuration ************************************************************/
|
||||
|
||||
#ifndef CONFIG_SYSTEM_USBMSC_DEVMINOR1
|
||||
# define CONFIG_SYSTEM_USBMSC_DEVMINOR1 0
|
||||
#endif
|
||||
|
||||
/* PORT and SLOT number probably depend on the board configuration */
|
||||
|
||||
#ifdef CONFIG_ARCH_BOARD_LPC1766STK
|
||||
# undef LPC17XX_MMCSDSPIPORTNO
|
||||
# define LPC17XX_MMCSDSPIPORTNO 1
|
||||
# undef LPC17XX_MMCSDSLOTNO
|
||||
# define LPC17XX_MMCSDSLOTNO 0
|
||||
#else
|
||||
/* Add configuration for new LPC17xx boards here */
|
||||
# error "Unrecognized LPC17xx board"
|
||||
#endif
|
||||
|
||||
/* Debug ********************************************************************/
|
||||
|
||||
#ifdef CONFIG_CPP_HAVE_VARARGS
|
||||
# ifdef CONFIG_DEBUG
|
||||
# define message(...) lowsyslog(__VA_ARGS__)
|
||||
# define msgflush()
|
||||
# else
|
||||
# define message(...) printf(__VA_ARGS__)
|
||||
# define msgflush() fflush(stdout)
|
||||
# endif
|
||||
#else
|
||||
# ifdef CONFIG_DEBUG
|
||||
# define message lowsyslog
|
||||
# define msgflush()
|
||||
# else
|
||||
# define message printf
|
||||
# define msgflush() fflush(stdout)
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/****************************************************************************
|
||||
* Public Functions
|
||||
****************************************************************************/
|
||||
|
||||
/****************************************************************************
|
||||
* Name: usbmsc_archinitialize
|
||||
*
|
||||
* Description:
|
||||
* Perform architecture specific initialization
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
int usbmsc_archinitialize(void)
|
||||
{
|
||||
FAR struct spi_dev_s *spi;
|
||||
int ret;
|
||||
|
||||
/* Enable power to the SD/MMC via a GPIO. LOW enables SD/MMC. */
|
||||
|
||||
lpc17_gpiowrite(LPC1766STK_MMC_PWR, false);
|
||||
|
||||
/* Get the SPI port */
|
||||
|
||||
message("usbmsc_archinitialize: Initializing SPI port %d\n",
|
||||
LPC17XX_MMCSDSPIPORTNO);
|
||||
|
||||
spi = lpc17_sspinitialize(LPC17XX_MMCSDSPIPORTNO);
|
||||
if (!spi)
|
||||
{
|
||||
message("usbmsc_archinitialize: Failed to initialize SPI port %d\n",
|
||||
LPC17XX_MMCSDSPIPORTNO);
|
||||
ret = -ENODEV;
|
||||
goto errout;
|
||||
}
|
||||
|
||||
message("usbmsc_archinitialize: Successfully initialized SPI port %d\n",
|
||||
LPC17XX_MMCSDSPIPORTNO);
|
||||
|
||||
/* Bind the SPI port to the slot */
|
||||
|
||||
message("usbmsc_archinitialize: Binding SPI port %d to MMC/SD slot %d\n",
|
||||
LPC17XX_MMCSDSPIPORTNO, LPC17XX_MMCSDSLOTNO);
|
||||
|
||||
ret = mmcsd_spislotinitialize(CONFIG_SYSTEM_USBMSC_DEVMINOR1, LPC17XX_MMCSDSLOTNO, spi);
|
||||
if (ret < 0)
|
||||
{
|
||||
message("usbmsc_archinitialize: Failed to bind SPI port %d to MMC/SD slot %d: %d\n",
|
||||
LPC17XX_MMCSDSPIPORTNO, LPC17XX_MMCSDSLOTNO, ret);
|
||||
goto errout;
|
||||
}
|
||||
|
||||
message("usbmsc_archinitialize: Successfuly bound SPI port %d to MMC/SD slot %d\n",
|
||||
LPC17XX_MMCSDSPIPORTNO, LPC17XX_MMCSDSLOTNO);
|
||||
return OK;
|
||||
|
||||
/* Disable power to the SD/MMC via a GPIO. HIGH disables SD/MMC. */
|
||||
|
||||
errout:
|
||||
lpc17_gpiowrite(LPC1766STK_MMC_PWR, true);
|
||||
return ret;}
|
Loading…
Reference in New Issue
Block a user