summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--firmware/SOURCES1
-rw-r--r--firmware/target/arm/imx233/uartdbg-imx233.c74
-rw-r--r--firmware/target/arm/imx233/uartdbg-imx233.h35
3 files changed, 110 insertions, 0 deletions
diff --git a/firmware/SOURCES b/firmware/SOURCES
index 92a7a29a19..83389482f3 100644
--- a/firmware/SOURCES
+++ b/firmware/SOURCES
@@ -534,6 +534,7 @@ target/arm/imx233/pwm-imx233.c
target/arm/imx233/rtc-imx233.c
target/arm/imx233/dcp-imx233.c
target/arm/imx233/emi-imx233.c
+target/arm/imx233/uartdbg-imx233.c
# ifdef HAVE_TOUCHSCREEN
target/arm/imx233/touchscreen-imx233.c
# endif
diff --git a/firmware/target/arm/imx233/uartdbg-imx233.c b/firmware/target/arm/imx233/uartdbg-imx233.c
new file mode 100644
index 0000000000..077b405f49
--- /dev/null
+++ b/firmware/target/arm/imx233/uartdbg-imx233.c
@@ -0,0 +1,74 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id$
+ *
+ * Copyright (C) 2013 by Lorenzo Miori
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ****************************************************************************/
+#include "uartdbg-imx233.h"
+#include "pinctrl-imx233.h"
+#include "clkctrl-imx233.h"
+
+void imx233_uartdbg_init(unsigned long baud)
+{
+ /* Enable UART clock */
+ imx233_clkctrl_enable(CLK_UART, true);
+ /* Configure UART pins */
+ imx233_pinctrl_setup_vpin(VPIN_UARTDBG_TX, "uartdbg tx", PINCTRL_DRIVE_4mA, false);
+ imx233_pinctrl_setup_vpin(VPIN_UARTDBG_RX, "uartdbg rx", PINCTRL_DRIVE_4mA, false);
+
+ /* Set baud rate */
+ HW_UARTDBG_IBRD = baud >> 16;
+ HW_UARTDBG_FBRD = baud & 0xFFFF;
+
+ /* Set port options (actually needed to set baud rate), 8 bit char, enable FIFO buffer */
+ BF_WR(UARTDBG_LCR_H, WLEN, 3);
+ BF_WR(UARTDBG_LCR_H, FEN, 1);
+
+ /* Finally enable UART device, TX enable, RX enable, device enable */
+ BF_WR(UARTDBG_CR, TXE, 1);
+ BF_WR(UARTDBG_CR, RXE, 1);
+ BF_WR(UARTDBG_CR, UARTEN, 1);
+}
+
+void imx233_uartdbg_send(unsigned char data)
+{
+ /* Wait to transmit if TX FIFO buffer is full*/
+ while (BF_RD(UARTDBG_FR, TXFF));
+ BF_WR(UARTDBG_DR, DATA, data);
+}
+
+void uart_tx(const char* data)
+{
+ while (*data != 0)
+ imx233_uartdbg_send(*data++);
+}
+
+unsigned int uart_rx(char* rx_buf, unsigned int len)
+{
+ unsigned int i = 0;
+
+ while(i < len)
+ {
+ /* Check if the UART Rx Buffer has something into -> RXFE */
+ if(!BF_RD(UARTDBG_FR, RXFE))
+ {
+ rx_buf[i] = HW_UARTDBG_DR;
+ i++;
+ }
+ }
+ return i;
+} \ No newline at end of file
diff --git a/firmware/target/arm/imx233/uartdbg-imx233.h b/firmware/target/arm/imx233/uartdbg-imx233.h
new file mode 100644
index 0000000000..3ee5175a21
--- /dev/null
+++ b/firmware/target/arm/imx233/uartdbg-imx233.h
@@ -0,0 +1,35 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id$
+ *
+ * Copyright (C) 2013 by Lorenzo Miori
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ****************************************************************************/
+#include "system.h"
+#include "regs/regs-uartdbg.h"
+
+/* This values below are valid with a XCLK of 24MHz */
+#define BAUD_9600 (uint32_t)(156 << 16 | 16)
+#define BAUD_19200 (uint32_t)(78 << 16 | 2)
+#define BAUD_38400 (uint32_t)(39 << 16 | 4)
+#define BAUD_57600 (uint32_t)(26 << 16 | 3)
+#define BAUD_115200 (uint32_t)(13 << 16 | 1)
+
+void imx233_uartdbg_init(unsigned long baud);
+void imx233_uartdbg_send(unsigned char data);
+
+void uart_tx(const char* data);
+unsigned int uart_rx(char* rx_buf, unsigned int len); \ No newline at end of file