aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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.