aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorgdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2008-02-21 13:31:30 +0000
committergdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2008-02-21 13:31:30 +0000
commit05c3be1b2c214a8dd8dcb47c5a615fb1b6406719 (patch)
tree1c73ffe378b22989fcc81bd09a3c5a6f4abce0c9
parentf87e32d85c6fc2b400c4dc8db15af1cb4c626907 (diff)
downloadChibiOS-05c3be1b2c214a8dd8dcb47c5a615fb1b6406719.tar.gz
ChibiOS-05c3be1b2c214a8dd8dcb47c5a615fb1b6406719.tar.bz2
ChibiOS-05c3be1b2c214a8dd8dcb47c5a615fb1b6406719.zip
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@198 35acf78f-673a-0410-8e92-d51de3d6d3f4
-rw-r--r--demos/ARM7-AT91SAM7X-GCC/board.c2
-rw-r--r--demos/ARM7-AT91SAM7X-GCC/readme.txt2
-rw-r--r--ports/ARM7-AT91SAM7X/GCC/sam7x_serial.c37
-rw-r--r--readme.txt2
4 files changed, 20 insertions, 23 deletions
diff --git a/demos/ARM7-AT91SAM7X-GCC/board.c b/demos/ARM7-AT91SAM7X-GCC/board.c
index 4231780bf..3a5539587 100644
--- a/demos/ARM7-AT91SAM7X-GCC/board.c
+++ b/demos/ARM7-AT91SAM7X-GCC/board.c
@@ -40,8 +40,8 @@ static void SYSIrqHandler(void) {
chSysIRQEnterI();
if (AT91C_BASE_PITC->PITC_PISR & AT91C_PITC_PITS) {
- chSysTimerHandlerI();
(void) AT91C_BASE_PITC->PITC_PIVR;
+ chSysTimerHandlerI();
}
chSysIRQExitI();
diff --git a/demos/ARM7-AT91SAM7X-GCC/readme.txt b/demos/ARM7-AT91SAM7X-GCC/readme.txt
index 71f8ee51a..986d5ec7c 100644
--- a/demos/ARM7-AT91SAM7X-GCC/readme.txt
+++ b/demos/ARM7-AT91SAM7X-GCC/readme.txt
@@ -9,6 +9,8 @@ The demo runs on an Olimex SAM7-EX256 board.
** The Demo **
The demo currently just flashes the LCD background using a thread.
+The button SW1 prints an "Hello World!" string on COM1, the button SW2
+activates che ChibiOS/RT test suite, output on COM1.
** Build Procedure **
diff --git a/ports/ARM7-AT91SAM7X/GCC/sam7x_serial.c b/ports/ARM7-AT91SAM7X/GCC/sam7x_serial.c
index e7a882cb7..2c03511c6 100644
--- a/ports/ARM7-AT91SAM7X/GCC/sam7x_serial.c
+++ b/ports/ARM7-AT91SAM7X/GCC/sam7x_serial.c
@@ -24,12 +24,12 @@
#include "at91lib/aic.h"
FullDuplexDriver COM1;
-BYTE8 ib1[SERIAL_BUFFERS_SIZE];
-BYTE8 ob1[SERIAL_BUFFERS_SIZE];
+static BYTE8 ib1[SERIAL_BUFFERS_SIZE];
+static BYTE8 ob1[SERIAL_BUFFERS_SIZE];
FullDuplexDriver COM2;
-BYTE8 ib2[SERIAL_BUFFERS_SIZE];
-BYTE8 ob2[SERIAL_BUFFERS_SIZE];
+static BYTE8 ib2[SERIAL_BUFFERS_SIZE];
+static BYTE8 ob2[SERIAL_BUFFERS_SIZE];
static void SetError(AT91_REG csr, FullDuplexDriver *com) {
UWORD16 sts = 0;
@@ -46,27 +46,22 @@ static void SetError(AT91_REG csr, FullDuplexDriver *com) {
}
/*
- * Tries hard to clear all the pending interrupt sources, we dont want to
- * go through the whole ISR and have another interrupt soon after.
+ * Serves the pending sources on the USART.
*/
static void ServeInterrupt(AT91PS_USART u, FullDuplexDriver *com) {
- while (u->US_CSR & u->US_IMR) {
-
- if (u->US_CSR & AT91C_US_RXRDY) {
+ if (u->US_CSR & AT91C_US_RXRDY)
chFDDIncomingDataI(com, u->US_RHR);
- }
- else if (u->US_CSR & AT91C_US_TXRDY) {
- t_msg b = chFDDRequestDataI(com);
- if (b < Q_OK)
- u->US_IDR = AT91C_US_TXRDY;
- else
- u->US_THR = b;
- }
- else {
- SetError(u->US_CSR, com);
- u->US_CR = AT91C_US_RSTSTA;
- }
+ if (u->US_CSR & AT91C_US_TXRDY) {
+ t_msg b = chFDDRequestDataI(com);
+ if (b < Q_OK)
+ u->US_IDR = AT91C_US_TXRDY;
+ else
+ u->US_THR = b;
+ }
+ if (u->US_CSR & (AT91C_US_OVRE | AT91C_US_FRAME | AT91C_US_PARE | AT91C_US_RXBRK)) {
+ SetError(u->US_CSR, com);
+ u->US_CR = AT91C_US_RSTSTA;
}
}
diff --git a/readme.txt b/readme.txt
index 73f1c4072..e5e123b77 100644
--- a/readme.txt
+++ b/readme.txt
@@ -46,7 +46,7 @@ AVR-AT90CANx-GCC - Port on AVR AT90CAN128, not complete yet.
SAM7S and SAM7XC but no tests were performed. Other SAM7 processors should
also be useable with limited changes.
The demo currently just performs basic operations, will be enhanced in next
- ChibiOS/RT releases.
+ ChibiOS/RT releases, see the demo readme.txt file.
The kernel is *unchanged* compared to version 0.5.3, just the new port and
the new demo were added.