I'm currently working to utilize UART1 on the TI-LCDK Arm. I am using mcsdk_1_01_00_02 linux-3.3-psp03.22.00.06.sdk
UART1 Tx was tested to work using StarterWare. I have J15 pin 19 (UART1_TX) connected to an osciliscope to verify data is being transmitted as well as successfully looping back data to J15 pin 17 (UART1_RX).
I can not produce any output on UART1 when running Linux. The following steps were taken to configure Linux. Any ideas on what I'm missing?
I've followed other instructions here on the forum to properly configure the hardware:
- removed R205, R208 and shorted R206, R209 as described here https://e2e.ti.com/support/dsp/omap_applications_processors/f/42/p/200681/722900#722900
- disabled McASP, I2C, SATA, USB, etc via menuconfig
- add pin muxing code in /arch/arm/mach-davinci/board-omapl138-lcdk.c
* commented out __raw_writel(0, IO_ADDRESS(DA8XX_UART1_BASE) + 0x30);
* added the following:
/* Support for UART 1 */
ret = davinci_cfg_reg_list(da850_uart1_pins);
if (ret) pr_warning("da850_evm_init: UART 1 mux setup failed:" " %d\n", ret);
davinci_serial_init(&omapl138_lcdk_uart_config);
During kernel boot I can see the PIN MUX4 register initialization for UART1
MUX: initialized UART1_RXD
MUX: Setting register UART1_RXD
PINMUX4 (0x00000010) = 0x00222288 -> 0x02222288
MUX: initialized UART1_TXD
MUX: Setting register UART1_TXD
PINMUX4 (0x00000010) = 0x02222288 -> 0x22222288
I can write to UART1 in various ways (programmaticly vi C code or from the command line interface). I do not see any out put on J15 pin 19. I do see the serial driver debug via cat /proc/tty/driver/serial indicating ttyS1 sent data. For Example:
root@omapl138-lcdk:~# cat /proc/tty/driver/serial
serinfo:1.0 driver revision:
0: uart:AR7 mmio:0x01C42000 irq:25 tx:0 rx:0 CTS
1: uart:AR7 mmio:0x01D0C000 irq:53 tx:14 rx:0 CTS
2: uart:AR7 mmio:0x01D0D000 irq:61 tx:3405 rx:172 RTS|CTS|DTR
Enabling DEBUG_INTR macro in ../drivers/tty/serial/8250/8250.c I can see serial8250_tx_chars() is writing the data as I receive the debug output "THRE..." but a corresponding IRQ debug statement "status = %x..." is never outputed from serial8250_handle_irq(). On the console I see a series of "THRE..." followed by "status = %x..." and "serial8250_interrupt" debug output.
Any ideas as to why UART1 isn't working under Linux given this configuration? I'm not sure why the interrupt is never firing...