git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@2297 35acf78f-673a-0410-8e92-d51de3d6d3f4

master
gdisirio 2010-10-27 19:36:41 +00:00
parent 26e74eaef1
commit af2c001a10
8 changed files with 56 additions and 45 deletions

View File

@ -38,18 +38,23 @@
/* /*
* GPIO 0 initial setup. * GPIO 0 initial setup.
* Bit7 - LPCxpresso LED, initially output at low level.
*/ */
#define VAL_GPIO0DIR PAL_PORT_BIT(GPIO0_LED2) #define VAL_GPIO0DIR PAL_PORT_BIT(GPIO0_OLEDSEL) | \
#define VAL_GPIO0DATA 0x00000000 PAL_PORT_BIT(GPIO0_LED2)
#define VAL_GPIO0DATA PAL_PORT_BIT(GPIO0_OLEDSEL) | \
PAL_PORT_BIT(GPIO0_LED2)
/* /*
* GPIO 1 initial setup. * GPIO 1 initial setup.
*/ */
#define VAL_GPIO1DIR PAL_PORT_BIT(GPIO1_LED3B) | \ #define VAL_GPIO1DIR PAL_PORT_BIT(GPIO1_LED3B) | \
PAL_PORT_BIT(GPIO1_LED3R) | \ PAL_PORT_BIT(GPIO1_LED3R) | \
PAL_PORT_BIT(GPIO1_LED3G) PAL_PORT_BIT(GPIO1_LED3G) | \
#define VAL_GPIO1DATA 0x00000000 PAL_PORT_BIT(GPIO1_SPI0SEL)
#define VAL_GPIO1DATA PAL_PORT_BIT(GPIO1_LED3B) | \
PAL_PORT_BIT(GPIO1_LED3R) | \
PAL_PORT_BIT(GPIO1_LED3G) | \
PAL_PORT_BIT(GPIO1_SPI0SEL)
/* /*
* GPIO 2 initial setup. * GPIO 2 initial setup.
@ -67,12 +72,14 @@
* Pin definitions. * Pin definitions.
*/ */
#define GPIO0_SW3 1 #define GPIO0_SW3 1
#define GPIO0_OLEDSEL 2
#define GPIO0_LED2 7 #define GPIO0_LED2 7
#define GPIO1_LED3B 2 #define GPIO1_LED3B 2
#define GPIO1_SW4 4 #define GPIO1_SW4 4
#define GPIO1_LED3R 9 #define GPIO1_LED3R 9
#define GPIO1_LED3G 10 #define GPIO1_LED3G 10
#define GPIO1_SPI0SEL 11
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {

View File

@ -127,9 +127,6 @@ void LPC13xx_clock_init(void) {
LPC_SYSCON->SYSAHBCLKDIV = LPC13xx_SYSABHCLK_DIV; LPC_SYSCON->SYSAHBCLKDIV = LPC13xx_SYSABHCLK_DIV;
LPC_SYSCON->SYSAHBCLKCTRL = 0x0001005F; LPC_SYSCON->SYSAHBCLKCTRL = 0x0001005F;
/* Peripheral clock dividers initialization.*/
LPC_SYSCON->UARTCLKDIV = LPC13xx_UART_PCLK_DIV;
/* Memory remapping, vectors always in ROM.*/ /* Memory remapping, vectors always in ROM.*/
LPC_SYSCON->SYSMEMREMAP = 2; LPC_SYSCON->SYSMEMREMAP = 2;
} }

View File

@ -96,14 +96,6 @@
#define LPC13xx_SYSABHCLK_DIV 1 #define LPC13xx_SYSABHCLK_DIV 1
#endif #endif
/**
* @brief UART clock divider.
* @note The value must be chosen between (1...255).
*/
#if !defined(LPC13xx_UART_PCLK_DIV) || defined(__DOXYGEN__)
#define LPC13xx_UART_PCLK_DIV 1
#endif
/*===========================================================================*/ /*===========================================================================*/
/* Derived constants and error checks. */ /* Derived constants and error checks. */
/*===========================================================================*/ /*===========================================================================*/
@ -199,11 +191,6 @@
#define LPC13xx_FLASHCFG_FLASHTIM 2 #define LPC13xx_FLASHCFG_FLASHTIM 2
#endif #endif
/**
* @brief UART clock.
*/
#define LPC13xx_UART_PCLK (LPC13xx_MAINCLK / LPC13xx_UART_PCLK_DIV)
/*===========================================================================*/ /*===========================================================================*/
/* Driver data structures and types. */ /* Driver data structures and types. */
/*===========================================================================*/ /*===========================================================================*/

View File

@ -2,6 +2,7 @@
PLATFORMSRC = ${CHIBIOS}/os/hal/platforms/LPC13xx/hal_lld.c \ PLATFORMSRC = ${CHIBIOS}/os/hal/platforms/LPC13xx/hal_lld.c \
${CHIBIOS}/os/hal/platforms/LPC13xx/pal_lld.c \ ${CHIBIOS}/os/hal/platforms/LPC13xx/pal_lld.c \
${CHIBIOS}/os/hal/platforms/LPC13xx/serial_lld.c ${CHIBIOS}/os/hal/platforms/LPC13xx/serial_lld.c
${CHIBIOS}/os/hal/platforms/LPC13xx/spi_lld.c
# Required include directories # Required include directories
PLATFORMINC = ${CHIBIOS}/os/hal/platforms/LPC13xx PLATFORMINC = ${CHIBIOS}/os/hal/platforms/LPC13xx

View File

@ -34,7 +34,7 @@
/* Driver exported variables. */ /* Driver exported variables. */
/*===========================================================================*/ /*===========================================================================*/
#if USE_LPC13xx_UART0 || defined(__DOXYGEN__) #if LPC13xx_SERIAL_USE_UART0 || defined(__DOXYGEN__)
/** @brief UART0 serial driver identifier.*/ /** @brief UART0 serial driver identifier.*/
SerialDriver SD1; SerialDriver SD1;
#endif #endif
@ -63,7 +63,7 @@ static const SerialConfig default_config = {
static void uart_init(SerialDriver *sdp, const SerialConfig *config) { static void uart_init(SerialDriver *sdp, const SerialConfig *config) {
LPC_UART_TypeDef *u = sdp->uart; LPC_UART_TypeDef *u = sdp->uart;
uint32_t div = LPC13xx_UART_PCLK / (config->sc_speed << 4); uint32_t div = LPC13xx_SERIAL_UART0_PCLK / (config->sc_speed << 4);
u->LCR = config->sc_lcr | LCR_DLAB; u->LCR = config->sc_lcr | LCR_DLAB;
u->DLL = div; u->DLL = div;
u->DLM = div >> 8; u->DLM = div >> 8;
@ -149,7 +149,7 @@ static void serve_interrupt(SerialDriver *sdp) {
break; break;
case IIR_SRC_TX: case IIR_SRC_TX:
{ {
int i = LPC13xx_UART_FIFO_PRELOAD; int i = LPC13xx_SERIAL_FIFO_PRELOAD;
do { do {
msg_t b; msg_t b;
@ -181,7 +181,7 @@ static void preload(SerialDriver *sdp) {
LPC_UART_TypeDef *u = sdp->uart; LPC_UART_TypeDef *u = sdp->uart;
if (u->LSR & LSR_THRE) { if (u->LSR & LSR_THRE) {
int i = LPC13xx_UART_FIFO_PRELOAD; int i = LPC13xx_SERIAL_FIFO_PRELOAD;
do { do {
msg_t b = chOQGetI(&sdp->oqueue); msg_t b = chOQGetI(&sdp->oqueue);
if (b < Q_OK) { if (b < Q_OK) {
@ -197,7 +197,7 @@ static void preload(SerialDriver *sdp) {
/** /**
* @brief Driver SD1 output notification. * @brief Driver SD1 output notification.
*/ */
#if USE_LPC13xx_UART0 || defined(__DOXYGEN__) #if LPC13xx_SERIAL_USE_UART0 || defined(__DOXYGEN__)
static void notify1(void) { static void notify1(void) {
preload(&SD1); preload(&SD1);
@ -213,8 +213,8 @@ static void notify1(void) {
* *
* @isr * @isr
*/ */
#if USE_LPC13xx_UART0 || defined(__DOXYGEN__) #if LPC13xx_SERIAL_USE_UART0 || defined(__DOXYGEN__)
CH_IRQ_HANDLER(VectorF8) { CH_IRQ_HANDLER(Vector94) {
CH_IRQ_PROLOGUE(); CH_IRQ_PROLOGUE();
@ -235,7 +235,7 @@ CH_IRQ_HANDLER(VectorF8) {
*/ */
void sd_lld_init(void) { void sd_lld_init(void) {
#if USE_LPC13xx_UART0 #if LPC13xx_SERIAL_USE_UART0
sdObjectInit(&SD1, NULL, notify1); sdObjectInit(&SD1, NULL, notify1);
SD1.uart = LPC_UART; SD1.uart = LPC_UART;
LPC_IOCON->PIO1_6 = 0xC1; /* RDX without resistors. */ LPC_IOCON->PIO1_6 = 0xC1; /* RDX without resistors. */
@ -259,11 +259,12 @@ void sd_lld_start(SerialDriver *sdp, const SerialConfig *config) {
config = &default_config; config = &default_config;
if (sdp->state == SD_STOP) { if (sdp->state == SD_STOP) {
#if USE_LPC13xx_UART0 #if LPC13xx_SERIAL_USE_UART0
if (&SD1 == sdp) { if (&SD1 == sdp) {
LPC_SYSCON->SYSAHBCLKCTRL |= (1 << 12); LPC_SYSCON->SYSAHBCLKCTRL |= (1 << 12);
LPC_SYSCON->UARTCLKDIV = LPC13xx_SERIAL_UART0CLKDIV;
NVICEnableVector(UART_IRQn, NVICEnableVector(UART_IRQn,
CORTEX_PRIORITY_MASK(LPC13xx_UART0_PRIORITY)); CORTEX_PRIORITY_MASK(LPC13xx_SERIAL_UART0_IRQ_PRIORITY));
} }
#endif #endif
} }
@ -283,8 +284,9 @@ void sd_lld_stop(SerialDriver *sdp) {
if (sdp->state == SD_READY) { if (sdp->state == SD_READY) {
uart_deinit(sdp->uart); uart_deinit(sdp->uart);
#if USE_LPC13xx_UART0 #if LPC13xx_SERIAL_USE_UART0
if (&SD1 == sdp) { if (&SD1 == sdp) {
LPC_SYSCON->UARTCLKDIV = 0;
LPC_SYSCON->SYSAHBCLKCTRL &= ~(1 << 12); LPC_SYSCON->SYSAHBCLKCTRL &= ~(1 << 12);
NVICDisableVector(UART_IRQn); NVICDisableVector(UART_IRQn);
return; return;

View File

@ -88,8 +88,8 @@
* @details If set to @p TRUE the support for UART0 is included. * @details If set to @p TRUE the support for UART0 is included.
* @note The default is @p TRUE . * @note The default is @p TRUE .
*/ */
#if !defined(USE_LPC13xx_UART0) || defined(__DOXYGEN__) #if !defined(LPC13xx_SERIAL_USE_UART0) || defined(__DOXYGEN__)
#define USE_LPC13xx_UART0 TRUE #define LPC13xx_SERIAL_USE_UART0 TRUE
#endif #endif
/** /**
@ -101,25 +101,42 @@
* also increase the worst case interrupt response time because the * also increase the worst case interrupt response time because the
* preload loops. * preload loops.
*/ */
#if !defined(LPC13xx_UART_FIFO_PRELOAD) || defined(__DOXYGEN__) #if !defined(LPC13xx_SERIAL_FIFO_PRELOAD) || defined(__DOXYGEN__)
#define LPC13xx_UART_FIFO_PRELOAD 16 #define LPC13xx_SERIAL_FIFO_PRELOAD 16
#endif
/**
* @brief UART0 PCLK divider.
*/
#if !defined(LPC13xx_SERIAL_UART0CLKDIV) || defined(__DOXYGEN__)
#define LPC13xx_SERIAL_UART0CLKDIV 1
#endif #endif
/** /**
* @brief UART0 interrupt priority level setting. * @brief UART0 interrupt priority level setting.
*/ */
#if !defined(LPC13xx_UART0_PRIORITY) || defined(__DOXYGEN__) #if !defined(LPC13xx_SERIAL_UART0_IRQ_PRIORITY) || defined(__DOXYGEN__)
#define LPC13xx_UART0_PRIORITY 6 #define LPC13xx_SERIAL_UART0_IRQ_PRIORITY 3
#endif #endif
/*===========================================================================*/ /*===========================================================================*/
/* Derived constants and error checks. */ /* Derived constants and error checks. */
/*===========================================================================*/ /*===========================================================================*/
#if (LPC13xx_UART_FIFO_PRELOAD < 1) || (LPC13xx_UART_FIFO_PRELOAD > 16) #if (LPC13xx_SERIAL_UART0CLKDIV < 1) || (LPC11xx_SERIAL_UART0CLKDIV > 255)
#error "invalid LPC13xx_UART_FIFO_PRELOAD setting" #error "invalid LPC13xx_SERIAL_UART0CLKDIV setting"
#endif #endif
#if (LPC13xx_SERIAL_FIFO_PRELOAD < 1) || (LPC13xx_SERIAL_FIFO_PRELOAD > 16)
#error "invalid LPC13xx_SERIAL_FIFO_PRELOAD setting"
#endif
/**
* @brief UART0 clock.
*/
#define LPC13xx_SERIAL_UART0_PCLK \
(LPC13xx_MAINCLK / LPC13xx_SERIAL_UART0CLKDIV)
/*===========================================================================*/ /*===========================================================================*/
/* Driver data structures and types. */ /* Driver data structures and types. */
/*===========================================================================*/ /*===========================================================================*/
@ -180,7 +197,7 @@ typedef struct {
/* External declarations. */ /* External declarations. */
/*===========================================================================*/ /*===========================================================================*/
#if USE_LPC13xx_UART0 && !defined(__DOXYGEN__) #if LPC13xx_SERIAL_USE_UART0 && !defined(__DOXYGEN__)
extern SerialDriver SD1; extern SerialDriver SD1;
#endif #endif