From 59728345e650f43dc61f93dbf53eedeb2083128b Mon Sep 17 00:00:00 2001 From: Kelvin Lawson Date: Tue, 17 Sep 2013 15:26:14 +0100 Subject: [PATCH] dm36x: Fix empty-polling. Switch to UART0. Disable uart_read() temporarily, not used therefore not yet tested. --- ports/arm/platforms/dm36x/uart.c | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/ports/arm/platforms/dm36x/uart.c b/ports/arm/platforms/dm36x/uart.c index c62bf9c..3513203 100644 --- a/ports/arm/platforms/dm36x/uart.c +++ b/ports/arm/platforms/dm36x/uart.c @@ -48,11 +48,11 @@ /** FR Register bits */ #define UART_FR_RXFE 0x10 -#define UART_FR_TXFF 0x20 +#define UART_LSR_TEMT 0x40 /** UART register access macros */ #define UART_DR(baseaddr) (*(unsigned int *)(baseaddr)) -#define UART_FR(baseaddr) (*(((unsigned int *)(baseaddr))+6)) +#define UART_LSR(baseaddr) (*(((unsigned int *)(baseaddr))+0x14)) /* Local data */ @@ -139,25 +139,27 @@ int uart_read (char *ptr, int len) /* Block thread on private access to the UART */ if (atomOSStarted && atomMutexGet(&uart_mutex, 0) == ATOM_OK) { +#if 0 /* Wait for not-empty */ - while(UART_FR(DM36X_UART1_BASE) & UART_FR_RXFE) + while(UART_FR(DM36X_UART0_BASE) & UART_FR_RXFE) ; /* Read first byte */ - *ptr++ = UART_DR(DM36X_UART1_BASE); + *ptr++ = UART_DR(DM36X_UART0_BASE); /* Loop over remaining bytes until empty */ for (todo = 1; todo < len; todo++) { /* Quit if receive FIFO empty */ - if(UART_FR(DM36X_UART1_BASE) & UART_FR_RXFE) + if(UART_FR(DM36X_UART0_BASE) & UART_FR_RXFE) { break; } /* Read next byte */ - *ptr++ = UART_DR(DM36X_UART1_BASE); + *ptr++ = UART_DR(DM36X_UART0_BASE); } +#endif /* Return mutex access */ if (atomOSStarted) @@ -204,11 +206,11 @@ int uart_write (const char *ptr, int len) for (todo = 0; todo < len; todo++) { /* Wait for empty */ - while(UART_FR(DM36X_UART1_BASE) & UART_FR_TXFF) + while(UART_LSR(DM36X_UART0_BASE) & UART_LSR_TEMT) ; /* Write byte to UART */ - UART_DR(DM36X_UART1_BASE) = *ptr++; + UART_DR(DM36X_UART0_BASE) = *ptr++; } /* Return mutex access */ @@ -244,11 +246,11 @@ void uart_write_halt (const char *ptr) while (*ptr != '\0') { /* Wait for empty */ - while(UART_FR(DM36X_UART1_BASE) & UART_FR_TXFF) + while(UART_LSR(DM36X_UART0_BASE) & UART_LSR_TEMT) ; /* Write byte to UART */ - UART_DR(DM36X_UART1_BASE) = *ptr++; + UART_DR(DM36X_UART0_BASE) = *ptr++; } }