From 05c3be1b2c214a8dd8dcb47c5a615fb1b6406719 Mon Sep 17 00:00:00 2001 From: gdisirio Date: Thu, 21 Feb 2008 13:31:30 +0000 Subject: [PATCH] git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@198 35acf78f-673a-0410-8e92-d51de3d6d3f4 --- demos/ARM7-AT91SAM7X-GCC/board.c | 2 +- demos/ARM7-AT91SAM7X-GCC/readme.txt | 2 ++ ports/ARM7-AT91SAM7X/GCC/sam7x_serial.c | 37 +++++++++++-------------- readme.txt | 2 +- 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.