summaryrefslogtreecommitdiff
path: root/firmware/drivers
diff options
context:
space:
mode:
authorWill Robertson <aliask@rockbox.org>2007-09-22 02:17:08 +0000
committerWill Robertson <aliask@rockbox.org>2007-09-22 02:17:08 +0000
commit26a05afe10b123788c8a32fbc92c7d80b1206f08 (patch)
tree2c5e8971f2b620a026fbafc2bf23d0fc5bac3863 /firmware/drivers
parent729388f741ba4fa6ba947c863d93885e8205c41a (diff)
downloadrockbox-26a05afe10b123788c8a32fbc92c7d80b1206f08.zip
rockbox-26a05afe10b123788c8a32fbc92c7d80b1206f08.tar.gz
rockbox-26a05afe10b123788c8a32fbc92c7d80b1206f08.tar.bz2
rockbox-26a05afe10b123788c8a32fbc92c7d80b1206f08.tar.xz
A few minor cleanups for the Gigabeat S
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@14812 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/drivers')
-rw-r--r--firmware/drivers/serial.c72
1 files changed, 72 insertions, 0 deletions
diff --git a/firmware/drivers/serial.c b/firmware/drivers/serial.c
index 142f67e..6ed539b 100644
--- a/firmware/drivers/serial.c
+++ b/firmware/drivers/serial.c
@@ -27,6 +27,9 @@
#include "lcd.h"
#include "serial.h"
+#if CONFIG_CPU == IMX31L
+#include "serial-imx31.h"
+#endif
#if CONFIG_CPU == SH7034
@@ -166,6 +169,75 @@ void serial_setup (void)
UCR0 = 0x04; /* Tx enable */
}
+#elif (CONFIG_CPU == IMX31L)
+
+void serial_setup(void)
+{
+#ifdef UART_INT /*enable UART Interrupts */
+ UCR1_1 |= (EUartUCR1_TRDYEN | EUartUCR1_RRDYEN | EUartUCR1_TXMPTYEN);
+ UCR4_1 |= (EUartUCR4_TCEN);
+#else /*disable UART Interrupts*/
+ UCR1_1 &= ~(EUartUCR1_TRDYEN | EUartUCR1_RRDYEN | EUartUCR1_TXMPTYEN);
+ UCR4_1 &= ~(EUartUCR4_TCEN);
+#endif
+ UCR1_1 |= EUartUCR1_UARTEN;
+ UCR2_1 |= (EUartUCR2_TXEN | EUartUCR2_RXEN | EUartUCR2_IRTS);
+
+ /* Tx,Rx Interrupt Trigger levels, Disable for now*/
+ /*UFCR1 |= (UFCR1_TXTL_32 | UFCR1_RXTL_32);*/
+}
+
+int Tx_Rdy(void)
+{
+ if((UTS1 & EUartUTS_TXEMPTY))
+ return 1;
+ else return 0;
+}
+
+/*Not ready...After first Rx, UTS1 & UTS1_RXEMPTY
+ keeps returning true*/
+int Rx_Rdy(void)
+{
+ if(!(UTS1 & EUartUTS_RXEMPTY))
+ return 1;
+ else return 0;
+}
+
+void Tx_Writec(char c)
+{
+ UTXD1=(int) c;
+}
+
+void dprintf(const char * str, ... )
+{
+ char dprintfbuff[256];
+ unsigned char * ptr;
+
+ va_list ap;
+ va_start(ap, str);
+
+ ptr = dprintfbuff;
+ vsnprintf(ptr,sizeof(dprintfbuff),str,ap);
+ va_end(ap);
+
+ serial_tx(ptr);
+}
+
+void serial_tx(const unsigned char * buf)
+{
+ /*Tx*/
+ for(;;) {
+ if(Tx_Rdy()) {
+ if(*buf == '\0')
+ return;
+ if(*buf == '\n')
+ Tx_Writec('\r');
+ Tx_Writec(*buf);
+ buf++;
+ }
+ }
+}
+
#else /* Other targets */
void serial_setup (void)
{