X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=bertos%2Fcpu%2Farm%2Fdrv%2Fser_at91.c;h=2d778d10df1fc255a5362eba4dbb47558c02f6e3;hb=HEAD;hp=dfc429d36098d7a1b550bb4ca42feff9b46d1221;hpb=8391f9676abafaa16a986b77b346f33ceb75dd6d;p=bertos.git diff --git a/bertos/cpu/arm/drv/ser_at91.c b/bertos/cpu/arm/drv/ser_at91.c index dfc429d3..2d778d10 100644 --- a/bertos/cpu/arm/drv/ser_at91.c +++ b/bertos/cpu/arm/drv/ser_at91.c @@ -34,7 +34,6 @@ * \brief ARM UART and SPI I/O driver * * - * \version $Id$ * \author Daniele Basile */ @@ -243,11 +242,11 @@ struct ArmSerial volatile bool sending; }; -static void uart0_irq_dispatcher(void); -static void uart1_irq_dispatcher(void); -static void spi0_irq_handler(void); +static ISR_PROTO(uart0_irq_dispatcher); +static ISR_PROTO(uart1_irq_dispatcher); +static ISR_PROTO(spi0_irq_handler); #if CPU_ARM_SAM7X -static void spi1_irq_handler(void); +static ISR_PROTO(spi1_irq_handler); #endif /* * Callbacks for USART0 @@ -530,10 +529,13 @@ static void spi1_init(UNUSED_ARG(struct SerialHardware *, _hw), UNUSED_ARG(struc /* Disable PIO on SPI pins */ PIOA_PDR = BV(SPI1_SPCK) | BV(SPI1_MOSI) | BV(SPI1_MISO); + /* SPI1 pins are on B peripheral function! */ + PIOA_BSR = BV(SPI1_SPCK) | BV(SPI1_MOSI) | BV(SPI1_MISO); + /* Reset device */ SPI1_CR = BV(SPI_SWRST); -/* + /* * Set SPI to master mode, fixed peripheral select, chip select directly connected to a peripheral device, * SPI clock set to MCK, mode fault detection disabled, loopback disable, NPCS0 active, Delay between CS = 0 */ @@ -731,7 +733,7 @@ struct SerialHardware *ser_hw_getdesc(int unit) /** * Serial 0 TX interrupt handler */ -static void uart0_irq_tx(void) +INLINE void uart0_irq_tx(void) { SER_STROBE_ON; @@ -740,7 +742,7 @@ static void uart0_irq_tx(void) if (fifo_isempty(txfifo)) { /* - * - Disable the TX empty interrupts + * - Disable the TX empty interrupts */ US0_IDR = BV(US_TXEMPTY); SER_UART0_BUS_TXEND; @@ -758,7 +760,7 @@ static void uart0_irq_tx(void) /** * Serial 0 RX complete interrupt handler. */ -static void uart0_irq_rx(void) +INLINE void uart0_irq_rx(void) { SER_STROBE_ON; @@ -780,8 +782,7 @@ static void uart0_irq_rx(void) /** * Serial IRQ dispatcher for USART0. */ -static void uart0_irq_dispatcher(void) __attribute__ ((interrupt)); -static void uart0_irq_dispatcher(void) +static DECLARE_ISR(uart0_irq_dispatcher) { if (US0_CSR & BV(US_RXRDY)) uart0_irq_rx(); @@ -796,7 +797,7 @@ static void uart0_irq_dispatcher(void) /** * Serial 1 TX interrupt handler */ -static void uart1_irq_tx(void) +INLINE void uart1_irq_tx(void) { SER_STROBE_ON; @@ -805,7 +806,7 @@ static void uart1_irq_tx(void) if (fifo_isempty(txfifo)) { /* - * - Disable the TX empty interrupts + * - Disable the TX empty interrupts */ US1_IDR = BV(US_TXEMPTY); SER_UART1_BUS_TXEND; @@ -823,7 +824,7 @@ static void uart1_irq_tx(void) /** * Serial 1 RX complete interrupt handler. */ -static void uart1_irq_rx(void) +INLINE void uart1_irq_rx(void) { SER_STROBE_ON; @@ -845,8 +846,7 @@ static void uart1_irq_rx(void) /** * Serial IRQ dispatcher for USART1. */ -static void uart1_irq_dispatcher(void) __attribute__ ((interrupt)); -static void uart1_irq_dispatcher(void) +static DECLARE_ISR(uart1_irq_dispatcher) { if (US1_CSR & BV(US_RXRDY)) uart1_irq_rx(); @@ -861,8 +861,7 @@ static void uart1_irq_dispatcher(void) /** * SPI0 interrupt handler */ -static void spi0_irq_handler(void) __attribute__ ((interrupt)); -static void spi0_irq_handler(void) +static DECLARE_ISR(spi0_irq_handler) { SER_STROBE_ON; @@ -892,8 +891,7 @@ static void spi0_irq_handler(void) /** * SPI1 interrupt handler */ -static void spi1_irq_handler(void) __attribute__ ((interrupt)); -static void spi1_irq_handler(void) +static DECLARE_ISR(spi1_irq_handler) { SER_STROBE_ON;