Hi,
In a previous thread e2e.ti.com/.../382121 the code and pin muxing for UART4 was detailed.
Using that code and the uartecho example and setting the uart to 4 instead of 3 the program runs and outputs data to UART4. But it will not receive.
Using uart3 the example runs and does get input. I also observe in detail the UART's being initialized in plat_uart.c. The code here is identical for any UART, the only difference is that a different base address is used depending on the UART. Both UART4 and UART3 are set up identically.
UART3 0x481A6000
UART4 0x481A8000
After UART initialization on UART3 I see interrupts for both transmit and receive. But on UART4 I don't get any receive interrupts. The only thing I can think of is I don't have the MUX correct.
The MUX settings for UART4 are:
// RX mode FAST RX PUllUP & Disabled Mode 1 See Ref Manual section 9.3.51
// 0 1 1 0 01
// 0x019
#define UART4_RX_MODE1 (0x0000019u)
// TX mode FAST TX Pullup & Disabled Mode 1
// 0 0 1 0 01
// 0x9
#define UART4_TX_MODE1 (0x000009u)
/* Pin Mux for UART4_RX Pin */
HWREG(SOC_CONTROL_REGS + CONTROL_CONF_UART_CTSN(0)) = UART4_RX_MODE1
/* Pin Mux for UART4 TX Pin */
HWREG(SOC_CONTROL_REGS + CONTROL_CONF_UART_RTSN(0)) = UART4_TX_MODE1;
The interrupts are setup identically and the TX interrupt works on both, only the UART4 receive doesn't work.
case 3:
/* Enabling the specified UART interrupts. */
UARTIntEnable(SOC_UART_3_REGS, (UART_INT_LINE_STAT | UART_INT_THR |
UART_INT_RHR_CTI));
break;
case 4:
/* Enabling the specified UART interrupts. */
UARTIntEnable(SOC_UART_4_REGS, (UART_INT_LINE_STAT | UART_INT_THR |
UART_INT_RHR_CTI));
break;
Finally observing the UART registers directly I do not see any characters being received and this leads me to suspect the MUXing but that seems to agree with other examples I have seen in this discussion.
Any suggestions ?
--jim schimpf