This is a part of the Kinetiszer project.
Diff: board.c
- Revision:
- 0:e0042c0c4d2d
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/board.c Tue Oct 28 12:20:47 2014 +0000 @@ -0,0 +1,279 @@ +/* + * @brief LPCXpresso 1347 board file + * + * @note + * Copyright(C) NXP Semiconductors, 2013 + * All rights reserved. + * + * @par + * Software that is described herein is for illustrative purposes only + * which provides customers with programming information regarding the + * LPC products. This software is supplied "AS IS" without any warranties of + * any kind, and NXP Semiconductors and its licensor disclaim any and + * all warranties, express or implied, including all implied warranties of + * merchantability, fitness for a particular purpose and non-infringement of + * intellectual property rights. NXP Semiconductors assumes no responsibility + * or liability for the use of the software, conveys no license or rights under any + * patent, copyright, mask work right, or any other intellectual property rights in + * or to any products. NXP Semiconductors reserves the right to make changes + * in the software without notification. NXP Semiconductors also makes no + * representation or warranty that such application will be suitable for the + * specified use without further testing or modification. + * + * @par + * Permission to use, copy, modify, and distribute this software and its + * documentation is hereby granted, under NXP Semiconductors' and its + * licensor's relevant copyrights in the software, without fee, provided that it + * is used in conjunction with NXP Semiconductors microcontrollers. This + * copyright, permission, and disclaimer notice must appear in all copies of + * this code. + */ + +#include "board.h" +//#include "retarget.h" + +/***************************************************************************** + * Private types/enumerations/variables + ****************************************************************************/ + +#if defined (BOARD_ELEKTOR_140182) + #define BUTTONS_BUTTON1_GPIO_PORT_NUM BOARD_KEYBOARD_ISP_PORT + #define BUTTONS_BUTTON1_GPIO_BIT_NUM BOARD_KEYBOARD_ISP_PIN +#else + #define BUTTONS_BUTTON1_GPIO_PORT_NUM 0 + #define BUTTONS_BUTTON1_GPIO_BIT_NUM 16 +#endif + + +/***************************************************************************** + * Public types/enumerations/variables + ****************************************************************************/ + +/***************************************************************************** + * Private functions + ****************************************************************************/ + +/* System oscillator rate and clock rate on the CLKIN pin */ +const uint32_t OscRateIn = 12000000; +const uint32_t ExtRateIn = 0; + +/***************************************************************************** + * Public functions + ****************************************************************************/ + +/* Initialize pin muxing for UART interface */ +void Board_UART_Init(void) +{ + /* Pin Muxing has already been done during SystemInit */ +} + +/* Sends a character on the UART */ +void Board_UARTPutChar(char ch) +{ +#if defined(DEBUG_ENABLE) + /* Wait for space in FIFO */ + while ((Chip_UART_ReadLineStatus(DEBUG_UART) & UART_LSR_THRE) == 0) {} + Chip_UART_SendByte(DEBUG_UART, (uint8_t) ch); +#endif +} + +/* Gets a character from the UART, returns EOF if no character is ready */ +int Board_UARTGetChar(void) +{ +#if defined(DEBUG_ENABLE) + if (Chip_UART_ReadLineStatus(DEBUG_UART) & UART_LSR_RDR) { + return (int) Chip_UART_ReadByte(DEBUG_UART); + } +#endif + return EOF; +} + +/* Outputs a string on the debug UART */ +void Board_UARTPutSTR(char *str) +{ +#if defined(DEBUG_ENABLE) + while (*str != '\0') { + Board_UARTPutChar(*str++); + } +#endif +} + +/* Initialize debug output via UART for board */ +void Board_Debug_Init(void) +{ +#if defined(DEBUG_ENABLE) + Board_UART_Init(); + + /* Setup UART for 115.2K8N1 */ + Chip_UART_Init(LPC_USART); + Chip_UART_SetBaud(LPC_USART, 115200); + Chip_UART_ConfigData(LPC_USART, (UART_LCR_WLEN8 | UART_LCR_SBS_1BIT)); + Chip_UART_SetupFIFOS(LPC_USART, (UART_FCR_FIFO_EN | UART_FCR_TRG_LEV2)); + Chip_UART_TXEnable(LPC_USART); +#endif +} + +/* Initializes board LED(s) */ +void Board_LED_Init(void) +{ + // Set PIO0_8, _9, _10 & _18 as output. + //Chip_GPIO_WriteDirBit(LPC_GPIO_PORT,BOARD_LED2_RED_PORT,BOARD_LED2_RED_PIN,OUTPUT); + //Chip_GPIO_WriteDirBit(LPC_GPIO_PORT,BOARD_LED1_RED_PORT,BOARD_LED1_RED_PIN,OUTPUT); + //Chip_GPIO_WriteDirBit(LPC_GPIO_PORT,BOARD_LED2_GREEN_PORT,BOARD_LED2_GREEN_PIN,OUTPUT); + //Chip_GPIO_WriteDirBit(LPC_GPIO_PORT,BOARD_LED1_GREEN_PORT,BOARD_LED1_GREEN_PIN,OUTPUT); + // Set PIO1_31 as output. + //Chip_GPIO_WriteDirBit(LPC_GPIO_PORT,BOARD_LED3_PORT,BOARD_LED3_PIN,OUTPUT); +} + +/* Sets the state of a board LED to on or off */ +void Board_LED_Set(uint8_t LEDNumber, bool On) +{ + if (LEDNumber==BOARD_LED1_GREEN) + { + //Chip_GPIO_WritePortBit(LPC_GPIO_PORT,BOARD_LED1_GREEN_PORT,BOARD_LED1_GREEN_PIN,On); + } + else if (LEDNumber==BOARD_LED1_RED) + { + //Chip_GPIO_WritePortBit(LPC_GPIO_PORT,BOARD_LED1_RED_PORT,BOARD_LED1_RED_PIN,On); + } + else if (LEDNumber==BOARD_LED2_GREEN) + { + //Chip_GPIO_WritePortBit(LPC_GPIO_PORT,BOARD_LED2_GREEN_PORT,BOARD_LED2_GREEN_PIN,On); + } + else if (LEDNumber==BOARD_LED2_RED) + { + //Chip_GPIO_WritePortBit(LPC_GPIO_PORT,BOARD_LED2_RED_PORT,BOARD_LED2_RED_PIN,On); + } + else if (LEDNumber==BOARD_LED3) + { + //Chip_GPIO_WritePortBit(LPC_GPIO_PORT,BOARD_LED3_PORT,BOARD_LED3_PIN,On); + } +} + +/* Returns the current state of a board LED */ +bool Board_LED_Test(uint8_t LEDNumber) +{ + bool state = false; + + if (LEDNumber==BOARD_LED1_GREEN) + { + //state = Chip_GPIO_ReadPortBit(LPC_GPIO_PORT,BOARD_LED1_GREEN_PORT,BOARD_LED1_GREEN_PIN); + } + else if (LEDNumber==BOARD_LED1_RED) + { + //state = Chip_GPIO_ReadPortBit(LPC_GPIO_PORT,BOARD_LED1_RED_PORT,BOARD_LED1_RED_PIN); + } + else if (LEDNumber==BOARD_LED2_GREEN) + { + //state = Chip_GPIO_ReadPortBit(LPC_GPIO_PORT,BOARD_LED2_GREEN_PORT,BOARD_LED2_GREEN_PIN); + } + else if (LEDNumber==BOARD_LED2_RED) + { + //state = Chip_GPIO_ReadPortBit(LPC_GPIO_PORT,BOARD_LED2_RED_PORT,BOARD_LED2_RED_PIN); + } + else if (LEDNumber==BOARD_LED3) + { + //state = Chip_GPIO_ReadPortBit(LPC_GPIO_PORT,BOARD_LED3_PORT,BOARD_LED3_PIN); + } + + return state; +} + +void Board_LED_Toggle(uint8_t LEDNumber) +{ + Board_LED_Set(LEDNumber,Board_LED_Test(LEDNumber)==false?true:false); +} + + +void Board_LCD_Init(void) +{ + // Setup backlight control. + //Chip_IOCON_PinMuxSet(LPC_IOCON,BOARD_LCD_BACKLIGHT_PORT,BOARD_LCD_BACKLIGHT_PIN,IOCON_DIGMODE_EN); + //Chip_GPIO_WriteDirBit(LPC_GPIO_PORT,BOARD_LCD_BACKLIGHT_PORT,BOARD_LCD_BACKLIGHT_PIN,OUTPUT); + + // Setup reset control. + //Chip_IOCON_PinMuxSet(LPC_IOCON,BOARD_LCD_RESET_PORT,BOARD_LCD_RESET_PIN,IOCON_DIGMODE_EN); + //Chip_GPIO_WriteDirBit(LPC_GPIO_PORT,BOARD_LCD_RESET_PORT,BOARD_LCD_RESET_PIN,OUTPUT); +} + + +void Board_LCD_ResetAssert(void) +{ + //Chip_GPIO_WritePortBit(LPC_GPIO_PORT,BOARD_LCD_RESET_PORT,BOARD_LCD_RESET_PIN,false); +} + + +void Board_LCD_ResetDeassert(void) +{ + //Chip_GPIO_WritePortBit(LPC_GPIO_PORT,BOARD_LCD_RESET_PORT,BOARD_LCD_RESET_PIN,true); +} + + +void Board_LCD_SetBacklight(uint8_t Intensity) +{ + //if (Intensity!=0) Chip_GPIO_WritePortBit(LPC_GPIO_PORT,BOARD_LCD_BACKLIGHT_PORT,BOARD_LCD_BACKLIGHT_PIN,BOARD_LCD_BACKLIGHT_ON); + //else Chip_GPIO_WritePortBit(LPC_GPIO_PORT,BOARD_LCD_BACKLIGHT_PORT,BOARD_LCD_BACKLIGHT_PIN,BOARD_LCD_BACKLIGHT_OFF); +} + + +/* Set up and initialize all required blocks and functions related to the + board hardware */ +void Board_Init(void) +{ + /* Sets up DEBUG UART */ + DEBUGINIT(); + + /* Initialize GPIO */ + //Chip_GPIO_Init(LPC_GPIO_PORT); + + /* Initialize LEDs */ + Board_LED_Init(); + Board_LED_Set(BOARD_LED1_GREEN,BOARD_LED_OFF); + Board_LED_Set(BOARD_LED1_RED,BOARD_LED_OFF); + Board_LED_Set(BOARD_LED2_GREEN,BOARD_LED_OFF); + Board_LED_Set(BOARD_LED2_RED,BOARD_LED_OFF); + Board_LED_Set(BOARD_LED3,BOARD_LED_ON); // LED3 is inverted compared to LED1 & LED2. + + // Initialize LCD. + Board_LCD_Init(); + // Put it in reset. + Board_LCD_ResetAssert(); + // Backlight off. + Board_LCD_SetBacklight(false); +} + +/* Initialize pin muxing for SSP interface */ +void Board_SSP_Init(LPC_SSP_T *pSSP) +{ + if (pSSP == LPC_SSP0) { + } + else { + //Chip_IOCON_PinMuxSet(LPC_IOCON, 1, 23, (IOCON_FUNC2 | IOCON_MODE_PULLUP)); /* PIO1_23 connected to SSEL1 */ + //Chip_IOCON_PinMuxSet(LPC_IOCON, 1, 20, (IOCON_FUNC2 | IOCON_MODE_PULLUP)); /* PIO1_20 connected to SCK1 */ + //Chip_IOCON_PinMuxSet(LPC_IOCON, 1, 21, (IOCON_FUNC2 | IOCON_MODE_PULLUP)); /* PIO1_21 connected to MISO1 */ + //Chip_IOCON_PinMuxSet(LPC_IOCON, 1, 22, (IOCON_FUNC2 | IOCON_MODE_PULLUP)); /* PIO1_22 connected to MOSI1 */ + } +} + +/* Configure pin for ADC channel 0 */ +void Board_ADC_Init(void) +{ + /* Muxing already setup as part of SystemInit for AD0 */ +} + +/* Initialize buttons on the board */ +void Board_Buttons_Init(void) +{ + //Chip_GPIO_WriteDirBit(LPC_GPIO_PORT, BUTTONS_BUTTON1_GPIO_PORT_NUM, BUTTONS_BUTTON1_GPIO_BIT_NUM, false); +} + +/* Get button status */ +uint32_t Buttons_GetStatus(void) +{ + uint8_t ret = NO_BUTTON_PRESSED; + //if (Chip_GPIO_ReadPortBit(LPC_GPIO_PORT, BUTTONS_BUTTON1_GPIO_PORT_NUM, BUTTONS_BUTTON1_GPIO_BIT_NUM) == 0x00) { + // ret |= BUTTONS_BUTTON1; + //} + return ret; +} +