diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 2010-08-20 21:23:27 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 2010-08-20 21:23:27 +0000 |
commit | 9bf3483559c2d223f4833173d803225bf1ca24df (patch) | |
tree | 2abf33352d0704f656698162231b4c3bb555d451 /c/src/lib/libbsp/lm32/shared/milkymist_console/uart.c | |
parent | 2010-08-20 <yann.sionneau@telecom-sudparis.eu> (diff) | |
download | rtems-9bf3483559c2d223f4833173d803225bf1ca24df.tar.bz2 |
2010-08-20 <yann.sionneau@telecom-sudparis.eu>
* shared/milkymist_ac97/ac97.c, shared/milkymist_clock/ckinit.c,
shared/milkymist_clock/clock.h, shared/milkymist_console/console.c,
shared/milkymist_console/uart.c, shared/milkymist_console/uart.h,
shared/milkymist_framebuffer/framebuffer.c,
shared/milkymist_gpio/gpio.c, shared/milkymist_networking/mm_crc32.c,
shared/milkymist_networking/network.c,
shared/milkymist_networking/network.h,
shared/milkymist_timer/timer.c: New files.
Diffstat (limited to 'c/src/lib/libbsp/lm32/shared/milkymist_console/uart.c')
-rw-r--r-- | c/src/lib/libbsp/lm32/shared/milkymist_console/uart.c | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/c/src/lib/libbsp/lm32/shared/milkymist_console/uart.c b/c/src/lib/libbsp/lm32/shared/milkymist_console/uart.c new file mode 100644 index 0000000000..229ee40985 --- /dev/null +++ b/c/src/lib/libbsp/lm32/shared/milkymist_console/uart.c @@ -0,0 +1,69 @@ +/* + * Uart driver for Lattice Mico32 (lm32) UART + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rtems.com/license/LICENSE. + * + * $Id$ + * + * COPYRIGHT (c) Yann Sionneau <yann.sionneau@telecom-sudparis.eu> (GSoC 2010) + * Telecom SudParis + */ + +#include "../include/system_conf.h" +#include "uart.h" +#include <rtems/libio.h> + +static inline int uartread(unsigned int reg) +{ + return *((int*)(reg)); +} + +static inline void uartwrite(unsigned int reg, int value) +{ + *((int*)(reg)) = value; +} + +void BSP_uart_init(int baud) +{ + + /* Set baud rate */ + uartwrite(MM_UART_DIV, CPU_FREQUENCY/baud/16); +} + +void BSP_uart_polled_write(char ch) +{ + int ip; + /* Wait until THR is empty. */ + uartwrite(MM_UART_RXTX, ch); + do { + lm32_read_interrupts(ip); + } while (! (ip & MM_IRQ_UARTTX) ); + lm32_interrupt_ack(MM_IRQ_UARTTX); +} + +char BSP_uart_polled_read( void ) +{ + int ip; + /* Wait until there is a byte in RBR */ + do { + lm32_read_interrupts(ip); + } while(! (ip & MM_IRQ_UARTRX) ); + lm32_interrupt_ack(MM_IRQ_UARTRX); + return (char) uartread(MM_UART_RXTX); +} + +char BSP_uart_is_character_ready(char *ch) +{ + int ip; + lm32_read_interrupts(ip); + if (ip & MM_IRQ_UARTRX) + { + *ch = (char) uartread(MM_UART_RXTX); + lm32_interrupt_ack(MM_IRQ_UARTRX); + return true; + } + *ch = '0'; + return false; +} |