git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@2297 35acf78f-673a-0410-8e92-d51de3d6d3f4
parent
26e74eaef1
commit
af2c001a10
|
@ -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" {
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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. */
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue