summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/lm32/shared/milkymist_console/uart.c
diff options
context:
space:
mode:
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.c26
1 files changed, 4 insertions, 22 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
index f32a1615fd..8ca8950b99 100644
--- a/c/src/lib/libbsp/lm32/shared/milkymist_console/uart.c
+++ b/c/src/lib/libbsp/lm32/shared/milkymist_console/uart.c
@@ -17,8 +17,6 @@
#include "../include/system_conf.h"
#include "uart.h"
-bool BSP_uart_txbusy;
-
void BSP_uart_init(int baud)
{
MM_WRITE(MM_UART_DIV, CPU_FREQUENCY/baud/16);
@@ -26,40 +24,24 @@ void BSP_uart_init(int baud)
void BSP_uart_polled_write(char ch)
{
- int ip;
rtems_interrupt_level level;
rtems_interrupt_disable(level);
- if (BSP_uart_txbusy) {
- /* wait for the end of the transmission by the IRQ-based driver */
- do {
- lm32_read_interrupts(ip);
- } while (!(ip & (1 << MM_IRQ_UARTTX)));
- lm32_interrupt_ack(1 << MM_IRQ_UARTTX);
- }
+ while(!(MM_READ(MM_UART_STAT) & UART_STAT_THRE));
MM_WRITE(MM_UART_RXTX, ch);
- do {
- lm32_read_interrupts(ip);
- } while (!(ip & (1 << MM_IRQ_UARTTX)));
- /* if TX was busy, do not ack the IRQ
- * so that the IRQ-based driver ISR is run */
- if (!BSP_uart_txbusy)
- lm32_interrupt_ack(1 << MM_IRQ_UARTTX);
+ while(!(MM_READ(MM_UART_STAT) & UART_STAT_THRE));
rtems_interrupt_enable(level);
}
int BSP_uart_polled_read(void)
{
- int ip;
char r;
rtems_interrupt_level level;
rtems_interrupt_disable(level);
- do {
- lm32_read_interrupts(ip);
- } while (!(ip & (1 << MM_IRQ_UARTRX)));
- lm32_interrupt_ack(1 << MM_IRQ_UARTRX);
+ while(!(MM_READ(MM_UART_STAT) & UART_STAT_RX_EVT));
r = MM_READ(MM_UART_RXTX);
+ MM_WRITE(MM_UART_STAT, UART_STAT_RX_EVT);
rtems_interrupt_enable(level);
return r;