Add support for at91sam7x.
[bertos.git] / cpu / arm / drv / ser_at91.c
index cef4c96fbc74e0cc6f9a2d7053a716ab68dc57e4..9f3ed4b9f1ac64a75bb0f7237b737c29cc6b25ef 100644 (file)
         *
         * - Disable GPIO on USART0 tx/rx pins
         * - Reset USART0
-        * - Set serial param: mode Normal, 8bit data, 1bit stop
+        * - Set serial param: mode Normal, 8bit data, 1bit stop, parity none
         * - Enable both the receiver and the transmitter
         * - Enable only the RX complete interrupt
         */
-       #if !CPU_ARM_AT91SAM7S256
+       #if !CPU_ARM_AT91SAM7S256 && !CPU_ARM_AT91SAM7X256
                #warning Check USART0 pins!
        #endif
        #define SER_UART0_BUS_TXINIT do { \
                PIOA_PDR = BV(RXD0) | BV(TXD0); \
                US0_CR = BV(US_RSTRX) | BV(US_RSTTX); \
-               US0_MR = US_CHMODE_NORMAL | US_CHRL_8 | US_NBSTOP_1; \
+               US0_MR = US_CHMODE_NORMAL | US_CHRL_8 | US_NBSTOP_1 | US_PAR_NO; \
                US0_CR = BV(US_RXEN) | BV(US_TXEN); \
                US0_IER = BV(US_RXRDY); \
        } while (0)
 
 #ifndef SER_UART1_BUS_TXINIT
        /** \sa SER_UART1_BUS_TXINIT */
-       #if !CPU_ARM_AT91SAM7S256
+       #if !CPU_ARM_AT91SAM7S256 && !CPU_ARM_AT91SAM7X256
                #warning Check USART1 pins!
        #endif
        #define SER_UART1_BUS_TXINIT do { \
                PIOA_PDR = BV(RXD1) | BV(TXD1); \
                US1_CR = BV(US_RSTRX) | BV(US_RSTTX); \
-               US1_MR = US_CHMODE_NORMAL | US_CHRL_8 | US_NBSTOP_1; \
+               US1_MR = US_CHMODE_NORMAL | US_CHRL_8 | US_NBSTOP_1 | US_PAR_NO; \
                US1_CR = BV(US_RXEN) | BV(US_TXEN); \
                US1_IER = BV(US_RXRDY); \
        } while (0)
        } while (0)
 #endif
 
-#if 0
+#ifdef NOT_FOR_ARM_PORT_IT
 /**
  * \name Overridable SPI hooks
  *
@@ -263,7 +263,7 @@ static unsigned char uart0_rxbuffer[CONFIG_UART0_RXBUFSIZE];
 static unsigned char uart1_txbuffer[CONFIG_UART1_TXBUFSIZE];
 static unsigned char uart1_rxbuffer[CONFIG_UART1_RXBUFSIZE];
 
-#if 0
+#ifdef NOT_FOR_ARM_PORT_IT
 static unsigned char spi_txbuffer[CONFIG_SPI_TXBUFSIZE];
 static unsigned char spi_rxbuffer[CONFIG_SPI_RXBUFSIZE];
 #endif
@@ -301,7 +301,7 @@ struct ArmSerial
 struct Serial *ser_uart0 = &ser_handles[SER_UART0];
 struct Serial *ser_uart1 = &ser_handles[SER_UART1];
 
-#if 0
+#ifdef NOT_FOR_ARM_PORT_IT
 struct Serial *ser_spi = &ser_handles[SER_SPI];
 #endif
 
@@ -447,7 +447,7 @@ static void uart1_setparity(UNUSED_ARG(struct SerialHardware *, _hw), int parity
 }
 
 /* SPI driver */
-#if 0
+#ifdef NOT_FOR_ARM_PORT_IT
 static void spi_init(UNUSED_ARG(struct SerialHardware *, _hw), UNUSED_ARG(struct Serial *, ser))
 {
        /*
@@ -602,7 +602,7 @@ static const struct SerialHardwareVT UART1_VT =
        C99INIT(txSending, tx_sending),
 };
 
-#if 0
+#ifdef NOT_FOR_ARM_PORT_IT
 static const struct SerialHardwareVT SPI_VT =
 {
        C99INIT(init, spi_init),
@@ -636,7 +636,7 @@ static struct ArmSerial UARTDescs[SER_CNT] =
                },
                C99INIT(sending, false),
        },
-#if 0
+#ifdef NOT_FOR_ARM_PORT_IT
        {
                C99INIT(hw, /**/) {
                        C99INIT(table, &SPI_VT),
@@ -708,10 +708,10 @@ static void uart0_irq_dispatcher(void)
 {
        IRQ_ENTRY();
 
-       if (US0_IMR & BV(US_RXRDY))
+       if (US0_CSR & BV(US_RXRDY))
                uart0_irq_rx();
 
-       if (US0_IMR & BV(US_TXRDY))
+       if (US0_CSR & BV(US_TXRDY))
                uart0_irq_tx();
 
        IRQ_EXIT();
@@ -769,10 +769,10 @@ static void uart1_irq_dispatcher(void)
 {
        IRQ_ENTRY();
 
-       if (US1_IMR & BV(US_RXRDY))
+       if (US1_CSR & BV(US_RXRDY))
                uart1_irq_rx();
 
-       if (US1_IMR & BV(US_TXRDY))
+       if (US1_CSR & BV(US_TXRDY))
                uart1_irq_tx();
 
        IRQ_EXIT();