aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorgdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2009-06-02 13:41:38 +0000
committergdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2009-06-02 13:41:38 +0000
commit2a7941ee58016ce7641ab8010aff5fe711e0bedc (patch)
tree4ac467770e31cbf9245936b998d47e0809bf28b7
parent1aa2773ad03807e3d5c9822ea108bc2e280281db (diff)
downloadChibiOS-2a7941ee58016ce7641ab8010aff5fe711e0bedc.tar.gz
ChibiOS-2a7941ee58016ce7641ab8010aff5fe711e0bedc.tar.bz2
ChibiOS-2a7941ee58016ce7641ab8010aff5fe711e0bedc.zip
I/O port driver for LPC214x added.
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@1016 35acf78f-673a-0410-8e92-d51de3d6d3f4
-rw-r--r--demos/ARM7-LPC214x-G++/board.c17
-rw-r--r--demos/ARM7-LPC214x-G++/board.h21
-rw-r--r--demos/ARM7-LPC214x-G++/main.cpp21
-rw-r--r--demos/ARM7-LPC214x-GCC-minimal/board.c9
-rw-r--r--demos/ARM7-LPC214x-GCC-minimal/board.h20
-rw-r--r--demos/ARM7-LPC214x-GCC-minimal/main.c14
-rw-r--r--demos/ARM7-LPC214x-GCC/board.c9
-rw-r--r--demos/ARM7-LPC214x-GCC/board.h21
-rw-r--r--demos/ARM7-LPC214x-GCC/main.c22
-rw-r--r--demos/ARM7-LPC214x-GCC/mmcsd.c6
-rw-r--r--ports/ARM7-LPC214x/ioports_lld.h174
-rw-r--r--ports/ARM7-LPC214x/lpc214x.h5
-rw-r--r--ports/ARM7-LPC214x/lpc214x_ssp.c5
-rw-r--r--ports/ARM7-LPC214x/port.dox16
-rw-r--r--ports/ARMCM3-STM32F103/port.dox1
-rw-r--r--readme.txt4
16 files changed, 314 insertions, 51 deletions
diff --git a/demos/ARM7-LPC214x-G++/board.c b/demos/ARM7-LPC214x-G++/board.c
index dc0cfb4f9..f188372b3 100644
--- a/demos/ARM7-LPC214x-G++/board.c
+++ b/demos/ARM7-LPC214x-G++/board.c
@@ -19,10 +19,10 @@
#include <ch.h>
-#include <lpc214x.h>
-#include <vic.h>
-#include <lpc214x_serial.h>
-//#include "lpc214x_ssp.h"
+#include "lpc214x.h"
+#include "vic.h"
+#include "lpc214x_serial.h"
+#include "lpc214x_ssp.h"
#include "board.h"
//#include "mmcsd.h"
@@ -103,10 +103,11 @@ void hwinit0(void) {
PINSEL0 = VAL_PINSEL0;
PINSEL1 = VAL_PINSEL1;
PINSEL2 = VAL_PINSEL2;
- IO0DIR = VAL_FIO0DIR;
- IO0SET = 0xFFFFFFFF;
- IO1DIR = VAL_FIO1DIR;
- IO1SET = 0xFFFFFFFF;
+ ioport_init_lld();
+ ioport_lpc214x_set_direction_lld(IOPORT_A, VAL_FIO0DIR);
+ ioport_write_lld(IOPORT_A, 0xFFFFFFFF);
+ ioport_lpc214x_set_direction_lld(IOPORT_B, VAL_FIO1DIR);
+ ioport_write_lld(IOPORT_B, 0xFFFFFFFF);
}
/*
diff --git a/demos/ARM7-LPC214x-G++/board.h b/demos/ARM7-LPC214x-G++/board.h
index c9d3f01b3..ee30559c8 100644
--- a/demos/ARM7-LPC214x-G++/board.h
+++ b/demos/ARM7-LPC214x-G++/board.h
@@ -20,6 +20,14 @@
#ifndef _BOARD_H_
#define _BOARD_H_
+#ifndef _LPC214X_H_
+#include "lpc214x.h"
+#endif
+
+#ifndef _IOPORTS_LLD_H_
+#include "ioports.h"
+#endif
+
#define BOARD_OLIMEX_LCP_P2148
/*
@@ -61,4 +69,17 @@
#define VAL_FIO0DIR 0xB0703C00
#define VAL_FIO1DIR 0x00000000
+#define PA_LED1 IOPORT_BIT(10)
+#define PA_LED2 IOPORT_BIT(11)
+#define PA_BUZZ1 IOPORT_BIT(12)
+#define PA_BUZZ2 IOPORT_BIT(13)
+#define PA_BSL IOPORT_BIT(14)
+#define PA_BUTTON1 IOPORT_BIT(15)
+#define PA_BUTTON2 IOPORT_BIT(16)
+#define PA_SSEL1 IOPORT_BIT(20)
+#define PA_LEDUSB IOPORT_BIT(31)
+
+#define PB_WP1 IOPORT_BIT(24)
+#define PB_CP1 IOPORT_BIT(25)
+
#endif /* _BOARD_H_ */
diff --git a/demos/ARM7-LPC214x-G++/main.cpp b/demos/ARM7-LPC214x-G++/main.cpp
index 647dee8a3..1a50f5936 100644
--- a/demos/ARM7-LPC214x-G++/main.cpp
+++ b/demos/ARM7-LPC214x-G++/main.cpp
@@ -18,11 +18,12 @@
*/
#include <ch.hpp>
+#include <ioports.h>
#include <evtimer.h>
#include <test.h>
-#include <lpc214x.h>
+#include <board.h>
#include <lpc214x_serial.h>
using namespace chibios_rt;
@@ -47,9 +48,9 @@ typedef struct {
// Flashing sequence for LED1.
static const seqop_t LED1_sequence[] =
{
- {BITCLEAR, 0x00000400},
+ {BITCLEAR, PA_LED1},
{SLEEP, 200},
- {BITSET, 0x00000400},
+ {BITSET, PA_LED1},
{SLEEP, 1800},
{GOTO, 0}
};
@@ -58,9 +59,9 @@ static const seqop_t LED1_sequence[] =
static const seqop_t LED2_sequence[] =
{
{SLEEP, 1000},
- {BITCLEAR, 0x00000800},
+ {BITCLEAR, PA_LED2},
{SLEEP, 200},
- {BITSET, 0x00000800},
+ {BITSET, PA_LED2},
{SLEEP, 1800},
{GOTO, 1}
};
@@ -68,9 +69,9 @@ static const seqop_t LED2_sequence[] =
// Flashing sequence for LED3.
static const seqop_t LED3_sequence[] =
{
- {BITCLEAR, 0x80000000},
+ {BITCLEAR, PA_LEDUSB},
{SLEEP, 200},
- {BITSET, 0x80000000},
+ {BITSET, PA_LEDUSB},
{SLEEP, 300},
{GOTO, 0}
};
@@ -97,10 +98,10 @@ protected:
case STOP:
return 0;
case BITCLEAR:
- IO0CLR = curr->value;
+ chPortClear(IOPORT_A, curr->value);
break;
case BITSET:
- IO0SET = curr->value;
+ chPortSet(IOPORT_A, curr->value);
break;
}
curr++;
@@ -135,7 +136,7 @@ public:
*/
static void TimerHandler(eventid_t id) {
- if (!(IO0PIN & 0x00018000)) { // Both buttons
+ if (!(chPortRead(IOPORT_A) & (PA_BUTTON1 | PA_BUTTON2))) { // Both buttons
TesterThread tester;
tester.Wait();
};
diff --git a/demos/ARM7-LPC214x-GCC-minimal/board.c b/demos/ARM7-LPC214x-GCC-minimal/board.c
index 50f553fa3..a06b24291 100644
--- a/demos/ARM7-LPC214x-GCC-minimal/board.c
+++ b/demos/ARM7-LPC214x-GCC-minimal/board.c
@@ -103,10 +103,11 @@ void hwinit0(void) {
PINSEL0 = VAL_PINSEL0;
PINSEL1 = VAL_PINSEL1;
PINSEL2 = VAL_PINSEL2;
- IO0DIR = VAL_FIO0DIR;
- IO0SET = 0xFFFFFFFF;
- IO1DIR = VAL_FIO1DIR;
- IO1SET = 0xFFFFFFFF;
+ ioport_init_lld();
+ ioport_lpc214x_set_direction_lld(IOPORT_A, VAL_FIO0DIR);
+ ioport_write_lld(IOPORT_A, 0xFFFFFFFF);
+ ioport_lpc214x_set_direction_lld(IOPORT_B, VAL_FIO1DIR);
+ ioport_write_lld(IOPORT_B, 0xFFFFFFFF);
}
/*
diff --git a/demos/ARM7-LPC214x-GCC-minimal/board.h b/demos/ARM7-LPC214x-GCC-minimal/board.h
index c9d3f01b3..3cdc2a9af 100644
--- a/demos/ARM7-LPC214x-GCC-minimal/board.h
+++ b/demos/ARM7-LPC214x-GCC-minimal/board.h
@@ -20,6 +20,14 @@
#ifndef _BOARD_H_
#define _BOARD_H_
+#ifndef _LPC214X_H_
+#include "lpc214x.h"
+#endif
+
+#ifndef _IOPORTS_LLD_H_
+#include "ioports.h"
+#endif
+
#define BOARD_OLIMEX_LCP_P2148
/*
@@ -61,4 +69,16 @@
#define VAL_FIO0DIR 0xB0703C00
#define VAL_FIO1DIR 0x00000000
+#define PA_LED1 IOPORT_BIT(10)
+#define PA_LED2 IOPORT_BIT(11)
+#define PA_BUZZ1 IOPORT_BIT(12)
+#define PA_BUZZ2 IOPORT_BIT(13)
+#define PA_BSL IOPORT_BIT(14)
+#define PA_BUTTON1 IOPORT_BIT(15)
+#define PA_BUTTON2 IOPORT_BIT(16)
+#define PA_SSEL1 IOPORT_BIT(20)
+#define PA_WP1 IOPORT_BIT(24)
+#define PA_CP1 IOPORT_BIT(25)
+#define PA_LEDUSB IOPORT_BIT(31)
+
#endif /* _BOARD_H_ */
diff --git a/demos/ARM7-LPC214x-GCC-minimal/main.c b/demos/ARM7-LPC214x-GCC-minimal/main.c
index 59dc04158..60035ffb7 100644
--- a/demos/ARM7-LPC214x-GCC-minimal/main.c
+++ b/demos/ARM7-LPC214x-GCC-minimal/main.c
@@ -19,7 +19,7 @@
#include <ch.h>
-#include "lpc214x.h"
+#include "board.h"
/*
* Red LEDs blinker thread, times are in milliseconds.
@@ -28,13 +28,13 @@ static WORKING_AREA(waThread1, 128);
static msg_t Thread1(void *arg) {
while (TRUE) {
- IO0CLR = 0x00000800;
+ chPortClear(IOPORT_A, PA_LED2);
chThdSleepMilliseconds(200);
- IO0SET = 0x00000C00;
+ chPortSet(IOPORT_A, PA_LED1 | PA_LED2);
chThdSleepMilliseconds(800);
- IO0CLR = 0x00000400;
+ chPortClear(IOPORT_A, PA_LED1);
chThdSleepMilliseconds(200);
- IO0SET = 0x00000C00;
+ chPortSet(IOPORT_A, PA_LED1 | PA_LED2);
chThdSleepMilliseconds(800);
}
return 0;
@@ -47,9 +47,9 @@ static WORKING_AREA(waThread2, 128);
static msg_t Thread2(void *arg) {
while (TRUE) {
- IO0CLR = 0x80000000;
+ chPortClear(IOPORT_A, PA_LEDUSB);
chThdSleepMilliseconds(200);
- IO0SET = 0x80000000;
+ chPortSet(IOPORT_A, PA_LEDUSB);
chThdSleepMilliseconds(300);
}
return 0;
diff --git a/demos/ARM7-LPC214x-GCC/board.c b/demos/ARM7-LPC214x-GCC/board.c
index 0db657b29..e1bf9369f 100644
--- a/demos/ARM7-LPC214x-GCC/board.c
+++ b/demos/ARM7-LPC214x-GCC/board.c
@@ -103,10 +103,11 @@ void hwinit0(void) {
PINSEL0 = VAL_PINSEL0;
PINSEL1 = VAL_PINSEL1;
PINSEL2 = VAL_PINSEL2;
- IO0DIR = VAL_FIO0DIR;
- IO0SET = 0xFFFFFFFF;
- IO1DIR = VAL_FIO1DIR;
- IO1SET = 0xFFFFFFFF;
+ ioport_init_lld();
+ ioport_lpc214x_set_direction_lld(IOPORT_A, VAL_FIO0DIR);
+ ioport_write_lld(IOPORT_A, 0xFFFFFFFF);
+ ioport_lpc214x_set_direction_lld(IOPORT_B, VAL_FIO1DIR);
+ ioport_write_lld(IOPORT_B, 0xFFFFFFFF);
}
/*
diff --git a/demos/ARM7-LPC214x-GCC/board.h b/demos/ARM7-LPC214x-GCC/board.h
index c9d3f01b3..ee30559c8 100644
--- a/demos/ARM7-LPC214x-GCC/board.h
+++ b/demos/ARM7-LPC214x-GCC/board.h
@@ -20,6 +20,14 @@
#ifndef _BOARD_H_
#define _BOARD_H_
+#ifndef _LPC214X_H_
+#include "lpc214x.h"
+#endif
+
+#ifndef _IOPORTS_LLD_H_
+#include "ioports.h"
+#endif
+
#define BOARD_OLIMEX_LCP_P2148
/*
@@ -61,4 +69,17 @@
#define VAL_FIO0DIR 0xB0703C00
#define VAL_FIO1DIR 0x00000000
+#define PA_LED1 IOPORT_BIT(10)
+#define PA_LED2 IOPORT_BIT(11)
+#define PA_BUZZ1 IOPORT_BIT(12)
+#define PA_BUZZ2 IOPORT_BIT(13)
+#define PA_BSL IOPORT_BIT(14)
+#define PA_BUTTON1 IOPORT_BIT(15)
+#define PA_BUTTON2 IOPORT_BIT(16)
+#define PA_SSEL1 IOPORT_BIT(20)
+#define PA_LEDUSB IOPORT_BIT(31)
+
+#define PB_WP1 IOPORT_BIT(24)
+#define PB_CP1 IOPORT_BIT(25)
+
#endif /* _BOARD_H_ */
diff --git a/demos/ARM7-LPC214x-GCC/main.c b/demos/ARM7-LPC214x-GCC/main.c
index c83d9a419..3eafdba61 100644
--- a/demos/ARM7-LPC214x-GCC/main.c
+++ b/demos/ARM7-LPC214x-GCC/main.c
@@ -20,7 +20,7 @@
#include <ch.h>
#include <test.h>
-#include "lpc214x.h"
+#include "board.h"
#include "lpc214x_serial.h"
#include "mmcsd.h"
#include "buzzer.h"
@@ -33,13 +33,13 @@ static WORKING_AREA(waThread1, 128);
static msg_t Thread1(void *arg) {
while (TRUE) {
- IO0CLR = 0x00000800;
+ chPortClear(IOPORT_A, PA_LED2);
chThdSleepMilliseconds(200);
- IO0SET = 0x00000C00;
+ chPortSet(IOPORT_A, PA_LED1 | PA_LED2);
chThdSleepMilliseconds(800);
- IO0CLR = 0x00000400;
+ chPortClear(IOPORT_A, PA_LED1);
chThdSleepMilliseconds(200);
- IO0SET = 0x00000C00;
+ chPortSet(IOPORT_A, PA_LED1 | PA_LED2);
chThdSleepMilliseconds(800);
}
return 0;
@@ -52,9 +52,9 @@ static WORKING_AREA(waThread2, 128);
static msg_t Thread2(void *arg) {
while (TRUE) {
- IO0CLR = 0x80000000;
+ chPortClear(IOPORT_A, PA_LEDUSB);
chThdSleepMilliseconds(200);
- IO0SET = 0x80000000;
+ chPortSet(IOPORT_A, PA_LEDUSB);
chThdSleepMilliseconds(300);
}
return 0;
@@ -67,16 +67,16 @@ static WORKING_AREA(waTestThread, 128);
*/
static void TimerHandler(eventid_t id) {
- if (!(IO0PIN & 0x00018000)) { // Both buttons
+ if (!(chPortRead(IOPORT_A) & (PA_BUTTON1 | PA_BUTTON2))) {
Thread *tp = chThdCreateStatic(waTestThread, sizeof(waTestThread),
NORMALPRIO, TestThread, &COM1);
chThdWait(tp);
PlaySound(500, MS2ST(100));
}
else {
- if (!(IO0PIN & 0x00008000)) // Button 1
+ if (!(chPortRead(IOPORT_A) & PA_BUTTON1))
PlaySound(1000, MS2ST(100));
- if (!(IO0PIN & 0x00010000)) { // Button 2
+ if (!(chPortRead(IOPORT_A) & PA_BUTTON2)) {
chFDDWrite(&COM1, (uint8_t *)"Hello World!\r\n", 14);
PlaySound(2000, MS2ST(100));
}
@@ -129,7 +129,7 @@ int main(int argc, char **argv) {
* If a button is pressed during the reset then the blinking leds threads
* are not started in order to make accurate benchmarks.
*/
- if ((IO0PIN & 0x00018000) == 0x00018000) {
+ if (chPortRead(IOPORT_A) && (PA_BUTTON1 | PA_BUTTON2) == (PA_BUTTON1 | PA_BUTTON2)) {
chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO, Thread1, NULL);
chThdCreateStatic(waThread2, sizeof(waThread2), NORMALPRIO, Thread2, NULL);
}
diff --git a/demos/ARM7-LPC214x-GCC/mmcsd.c b/demos/ARM7-LPC214x-GCC/mmcsd.c
index 292b450d5..bff2967d9 100644
--- a/demos/ARM7-LPC214x-GCC/mmcsd.c
+++ b/demos/ARM7-LPC214x-GCC/mmcsd.c
@@ -19,7 +19,7 @@
#include <ch.h>
-#include "lpc214x.h"
+#include "board.h"
#include "lpc214x_ssp.h"
#include "mmcsd.h"
@@ -42,7 +42,7 @@ void InitMMC(void) {
void tmrfunc(void *par) {
if (cnt) {
- if (!(IO1PIN & (1 << 25))) {
+ if (!(chPortRead(IOPORT_B) & PB_CP1)) {
if (!--cnt)
chEvtBroadcastI(&MMCInsertEventSource);
}
@@ -50,7 +50,7 @@ void tmrfunc(void *par) {
cnt = POLLING_INTERVAL;
}
else {
- if (IO1PIN & (1 << 25)) {
+ if (chPortRead(IOPORT_B) & PB_CP1) {
cnt = POLLING_INTERVAL;
chEvtBroadcastI(&MMCRemoveEventSource);
}
diff --git a/ports/ARM7-LPC214x/ioports_lld.h b/ports/ARM7-LPC214x/ioports_lld.h
new file mode 100644
index 000000000..db82b8f97
--- /dev/null
+++ b/ports/ARM7-LPC214x/ioports_lld.h
@@ -0,0 +1,174 @@
+/*
+ ChibiOS/RT - Copyright (C) 2006-2007 Giovanni Di Sirio.
+
+ This file is part of ChibiOS/RT.
+
+ ChibiOS/RT is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ ChibiOS/RT is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+/**
+ * @file ports/ARM-LPC214x/ioports_lld.h
+ * @brief LPC214x FIO low level driver
+ * @addtogroup LPC214X_IOPORTS
+ * @{
+ */
+
+#ifndef _IOPORTS_LLD_H_
+#define _IOPORTS_LLD_H_
+
+#ifndef _LPC214X_H_
+#include "lpc214x.h"
+#endif
+
+/*===========================================================================*/
+/* I/O Ports Types and constants. */
+/*===========================================================================*/
+
+/**
+ * @brief Width, in bits, of an I/O port.
+ */
+#define IOPORTS_WIDTH 32
+
+/**
+ * @brief Digital I/O port sized unsigned type.
+ */
+typedef uint32_t ioportmask_t;
+
+/**
+ * @brief Port Identifier.
+ */
+typedef FIO * ioportid_t;
+
+/*===========================================================================*/
+/* I/O Ports Identifiers. */
+/*===========================================================================*/
+
+/**
+ * @brief FIO port 0 identifier.
+ */
+#define IOPORT_A FIO0Base
+
+/**
+ * @brief FIO port 1 identifier.
+ */
+#define IOPORT_B FIO1Base
+
+/*===========================================================================*/
+/* Implementation, some of the following macros could be implemented as */
+/* functions, please put them in a file named ioports_lld.c if so. */
+/*===========================================================================*/
+
+/**
+ * @brief FIO subsystem initialization.
+ * @details Enables the access through the fast registers.
+ */
+#define ioport_init_lld() { \
+ SCS = 3; \
+}
+
+/**
+ * @brief Writes a bits mask on a I/O port.
+ *
+ * @param[in] port the port identifier
+ * @param[in] bits the bits to be written on the specified port
+ *
+ * @note This function is not meant to be invoked directly by the application
+ * code.
+ */
+#define ioport_write_lld(port, bits) ((port)->FIO_PIN = (bits))
+
+/**
+ * @brief Reads an I/O port.
+ *
+ * @param[in] port the port identifier
+ * @return the port bits
+ *
+ * @note This function is not meant to be invoked directly by the application
+ * code.
+ */
+#define ioport_read_lld(port) ((port)->FIO_PIN)
+
+/**
+ * @brief Sets a bits mask on a I/O port.
+ *
+ * @param[in] port the port identifier
+ * @param[in] bits the bits to be ORed on the specified port
+ *
+ * @note This function is not meant to be invoked directly by the application
+ * code.
+ */
+#define ioport_set_lld(port, bits) ((port)->FIO_SET = (bits))
+
+/**
+ * @brief Clears a bits mask on a I/O port.
+ *
+ * @param[in] port the port identifier
+ * @param[in] bits the bits to be cleared on the specified port
+ *
+ * @note This function is not meant to be invoked directly by the application
+ * code.
+ */
+#define ioport_clear_lld(port, bits) ((port)->FIO_CLR = (bits))
+
+/**
+ * @brief Toggles a bits mask on a I/O port.
+ *
+ * @param[in] port the port identifier
+ * @param[in] bits the bits to be XORed on the specified port
+ *
+ * @note This function is not meant to be invoked directly by the application
+ * code.
+ */
+#define ioport_toggle_lld(port, bits) ((port)->FIO_PIN ^= (bits))
+
+/**
+ * @brief Writes a value on an I/O bus.
+ *
+ * @param[in] bus the I/O bus, pointer to a @p IOBus structure
+ * @param[in] bits the bits to be written on the I/O bus. Values exceeding
+ * the bus width are masked so most significant bits are lost.
+ *
+ * @note This function is not meant to be invoked directly by the application
+ * code.
+ */
+#define ioport_writebus_lld(bus, bits) { \
+ (port)->FIO_MASK = (bus)->bus_mask; \
+ (port)->FIO_PIN = (bits) << (bus)->bus_offset; \
+ (port)->FIO_MASK = 0; \
+}
+
+/**
+ * @brief Reads a value from an I/O bus.
+ *
+ * @param[in] bus the I/O bus, pointer to a @p IOBus structure
+ * @return the bus bits
+ *
+ * @note This function is not meant to be invoked directly by the application
+ * code.
+ */
+#define ioport_readbus_lld(bus) \
+ (((bus)->bus_portid->FIO_PIN & (bus)->bus_mask) >> (bus)->bus_offset)
+
+/**
+ * @brief FIO port setup.
+ * @details This function initializes a FIO port, note that this functionality
+ * is LPC214x specific and non portable.
+ */
+#define ioport_lpc214x_set_direction_lld(port, dir) { \
+ (port)->FIO_DIR = (dir); \
+}
+
+#endif /* _IOPORTS_LLD_H_ */
+
+/** @} */
diff --git a/ports/ARM7-LPC214x/lpc214x.h b/ports/ARM7-LPC214x/lpc214x.h
index 96dfa437b..e260da713 100644
--- a/ports/ARM7-LPC214x/lpc214x.h
+++ b/ports/ARM7-LPC214x/lpc214x.h
@@ -17,6 +17,11 @@
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+/**
+ * @file lpc214x.h
+ * @brief LPC214x register definitions
+ */
+
#ifndef _LPC214X_H_
#define _LPC214X_H_
diff --git a/ports/ARM7-LPC214x/lpc214x_ssp.c b/ports/ARM7-LPC214x/lpc214x_ssp.c
index 43c4100bc..00db41cbf 100644
--- a/ports/ARM7-LPC214x/lpc214x_ssp.c
+++ b/ports/ARM7-LPC214x/lpc214x_ssp.c
@@ -25,6 +25,7 @@
*/
#include <ch.h>
+#include <ioports.h>
#include "lpc214x.h"
#include "lpc214x_ssp.h"
@@ -43,7 +44,7 @@ void sspAcquireBus(void) {
#if LPC214x_SSP_USE_MUTEX
chSemWait(&me);
#endif
- IO0CLR = 1 << 20;
+ chPortClear(IOPORT_A, (1 << 20));
}
/**
@@ -53,7 +54,7 @@ void sspAcquireBus(void) {
*/
void sspReleaseBus(void) {
- IO0SET = 1 << 20;
+ chPortSet(IOPORT_A, (1 << 20));
#if LPC214x_SSP_USE_MUTEX
chSemSignal(&me);
#endif
diff --git a/ports/ARM7-LPC214x/port.dox b/ports/ARM7-LPC214x/port.dox
index ad567b2ae..35f0d128f 100644
--- a/ports/ARM7-LPC214x/port.dox
+++ b/ports/ARM7-LPC214x/port.dox
@@ -23,6 +23,7 @@
* @brief LPC214x specific support.
* @details The LPC214x support includes:
* - VIC support code.
+ * - I/O ports driver.
* - Buffered, interrupt driven, serial driver.
* - SSP driver.
* - A MMC/SD demo driver.
@@ -45,6 +46,21 @@
/** @} */
/**
+ * @defgroup LPC214x_IOPORTS I/O Ports Support
+ * @brief I/O Ports peripherals support.
+ * @details This module supports the LPC214x FIO controller. The controller
+ * supports the following features (see @ref IOPorts):
+ * - 32 bits wide ports.
+ * - Atomic set/reset functions.
+ * - Atomic set+reset function (atomic bus operations).
+ * - Output latched regardless of the pad setting.
+ * - Direct read of input pads regardless of the pad setting.
+ * .
+ * The only non atomic operations are bit toggling and bus writing.
+ * @ingroup LPC214x
+ */
+
+/**
* @defgroup LPC214x_SERIAL UART Support
* @{
* @brief UART peripherals support.
diff --git a/ports/ARMCM3-STM32F103/port.dox b/ports/ARMCM3-STM32F103/port.dox
index 33afd445f..32049f969 100644
--- a/ports/ARMCM3-STM32F103/port.dox
+++ b/ports/ARMCM3-STM32F103/port.dox
@@ -21,6 +21,7 @@
* @defgroup STM32F103 STM32F103 Support
* @brief STM32F103 specific support.
* @details The STM32F103 support includes:
+ * - I/O ports driver.
* - Buffered, interrupt driven, serial driver.
* - A demo supporting the kernel test suite.
* .
diff --git a/readme.txt b/readme.txt
index 9d4a1446b..e17b2da93 100644
--- a/readme.txt
+++ b/readme.txt
@@ -70,8 +70,8 @@ GNU-Linux-GCC - ChibiOS/RT simulator for x86 Linux systems, it is
interface for digital I/O operations, this should help to create more
portable applications and, in general, make easier to work with ChibiOS/RT
on multiple architectures.
-- NEW: Port driver for STM32, cleaned up the initialization code in board.c to
- use the port driver macros.
+- NEW: Port drivers for STM32 and LPC214x, cleaned up the initialization code
+ in board.c to use the port driver macros.
- Documentation section reorganization and fixes.
- Changed the STM32 demo stack sizes, it was incorrectly adjusted in version
1.3.0 but it did not create problems (not a bug).