Part Number: MSP-EXP432E401Y
Tool/software: Code Composer Studio
Hi,
We are porting the TI-15.4 stack sensor.c example to our MSP-EXP432E401Y platform removing all 15.4 stack-related calls and using instead the Ethernet stack. We are using a mmWave sensor from TI so we have defined two UARTs for configuration purposes and for actual sensor data (MSS_LOGGER). A main task will handle events triggered by a mmwaveTask as explained in the demo code provided by TI. We are the stage of integrating the mmWave sensor and MSP-EXP432E401Y and we are having issues with the UART mapping between boards. This is a snippet of the code:
void mmwaveTaskInit(void)
{
/* Construct Semaphore */
Semaphore_Params semParams;
Semaphore_Params_init(&semParams);
Semaphore_construct(&mmwaveSemStruct, 0, &semParams);
mmwaveSemHandle = Semaphore_handle(&mmwaveSemStruct);
/* Configure display task. */
Task_Params taskParams;
Task_Params_init(&taskParams);
taskParams.stack = mmwaveTaskStack;
taskParams.stackSize = MMWAVE_TASK_STACK_SIZE;
taskParams.priority = MMWAVE_TASK_PRIORITY;
Task_construct(&mmwaveTask, mmwaveTaskFxn, &taskParams, NULL);
/* Open mmwave configuration UART port */
UART_Params_init(&mmwaveUartParams);
mmwaveUartParams.writeDataMode = UART_DATA_BINARY;
mmwaveUartParams.readDataMode = UART_DATA_BINARY;
mmwaveUartParams.readReturnMode = UART_RETURN_FULL;
mmwaveUartParams.readEcho = UART_ECHO_OFF;
mmwaveUartParams.baudRate = 115200; //Configuration baud rate
mmwaveUartParams.readTimeout = 500000 / Clock_tickPeriod;
mmwaveUartHandle = UART_open(Board_UART0, &mmwaveUartParams);
if (mmwaveUartHandle == NULL) {
/* UART_open() failed */
while (1);
}
/* Open mmwave logger UART port */
UART_Params_init(&mmwaveLoggerUartParams);
mmwaveLoggerUartParams.writeDataMode = UART_DATA_BINARY;
mmwaveLoggerUartParams.readDataMode = UART_DATA_BINARY;
mmwaveLoggerUartParams.readReturnMode = UART_RETURN_FULL;
mmwaveLoggerUartParams.readEcho = UART_ECHO_OFF;
mmwaveLoggerUartParams.baudRate = 921600;
mmwaveLoggerUartParams.readTimeout = 500000 / Clock_tickPeriod;
mmwaveLoggerUartHandle = UART_open(Board_UART2, &mmwaveLoggerUartParams);
if (mmwaveLoggerUartHandle == NULL) {
/* UART_open() failed */
while (1);
}
}
However, we end up in having a wrong mmwaveLoggerUartHandle. As far as I know, hypothesis are either 1) UART was already initialized or 2) An error happened during initialization. UART_init() is called in the main task.
int main()
{
/* Call driver init functions */
Board_init();
GPIO_init();
UART_init();
So we assume the error happened because of being previously initialized. As a sidenote, all UART interfaces have been defined in Board.h, MSP_EXP432E401Y.c and its header file accordingly.
/* UART configuration structure */
const UARTMSP432E4_HWAttrs uartMSP432E4HWAttrs[MSP_EXP432E401Y_UARTCOUNT] = {
{
.baseAddr = UART0_BASE,
.intNum = INT_UART0,
.intPriority = (~0),
.flowControl = UARTMSP432E4_FLOWCTRL_NONE,
.ringBufPtr = uartMSP432E4RingBuffer[MSP_EXP432E401Y_UART0],
.ringBufSize = sizeof(uartMSP432E4RingBuffer[MSP_EXP432E401Y_UART0]),
.rxPin = UARTMSP432E4_PA0_U0RX,
.txPin = UARTMSP432E4_PA1_U0TX,
.ctsPin = UARTMSP432E4_PIN_UNASSIGNED,
.rtsPin = UARTMSP432E4_PIN_UNASSIGNED,
.errorFxn = NULL
},
{
.baseAddr = UART1_BASE,
.intNum = INT_UART1,
.intPriority = (~0),
.flowControl = UARTMSP432E4_FLOWCTRL_NONE,
.ringBufPtr = uartMSP432E4RingBuffer[MSP_EXP432E401Y_UART1],
.ringBufSize = sizeof(uartMSP432E4RingBuffer[MSP_EXP432E401Y_UART1]),
.rxPin = UARTMSP432E4_PB0_U1RX,
.txPin = UARTMSP432E4_PB1_U1TX,
.ctsPin = UARTMSP432E4_PIN_UNASSIGNED,
.rtsPin = UARTMSP432E4_PIN_UNASSIGNED,
.errorFxn = NULL
},
{
.baseAddr = UART2_BASE,
.intNum = INT_UART2,
.intPriority = (~0),
.flowControl = UARTMSP432E4_FLOWCTRL_NONE,
.ringBufPtr = uartMSP432E4RingBuffer[MSP_EXP432E401Y_UART2],
.ringBufSize = sizeof(uartMSP432E4RingBuffer[MSP_EXP432E401Y_UART2]),
// .rxPin = UARTMSP432E4_PD4_U2RX,
.rxPin = UARTMSP432E4_PD4_U2RX,
.txPin = UARTMSP432E4_PD5_U2TX,
.ctsPin = UARTMSP432E4_PIN_UNASSIGNED,
.rtsPin = UARTMSP432E4_PIN_UNASSIGNED,
.errorFxn = NULL
},
{
.baseAddr = UART3_BASE,
.intNum = INT_UART3,
.intPriority = (~0),
.flowControl = UARTMSP432E4_FLOWCTRL_NONE,
.ringBufPtr = uartMSP432E4RingBuffer[MSP_EXP432E401Y_UART3],
.ringBufSize = sizeof(uartMSP432E4RingBuffer[MSP_EXP432E401Y_UART3]),
.rxPin = UARTMSP432E4_PA4_U3RX,
.txPin = UARTMSP432E4_PA5_U3TX,
.ctsPin = UARTMSP432E4_PIN_UNASSIGNED,
.rtsPin = UARTMSP432E4_PIN_UNASSIGNED,
.errorFxn = NULL
},
{
.baseAddr = UART4_BASE,
.intNum = INT_UART4,
.intPriority = (~0),
.flowControl = UARTMSP432E4_FLOWCTRL_NONE,
.ringBufPtr = uartMSP432E4RingBuffer[MSP_EXP432E401Y_UART4],
.ringBufSize = sizeof(uartMSP432E4RingBuffer[MSP_EXP432E401Y_UART4]),
.rxPin = UARTMSP432E4_PA2_U4RX,
.txPin = UARTMSP432E4_PA3_U4TX,
.ctsPin = UARTMSP432E4_PIN_UNASSIGNED,
.rtsPin = UARTMSP432E4_PIN_UNASSIGNED,
.errorFxn = NULL
},
{
.baseAddr = UART5_BASE,
.intNum = INT_UART5,
.intPriority = (~0),
.flowControl = UARTMSP432E4_FLOWCTRL_NONE,
.ringBufPtr = uartMSP432E4RingBuffer[MSP_EXP432E401Y_UART5],
.ringBufSize = sizeof(uartMSP432E4RingBuffer[MSP_EXP432E401Y_UART5]),
.rxPin = UARTMSP432E4_PC6_U5RX,
.txPin = UARTMSP432E4_PC7_U5TX,
.ctsPin = UARTMSP432E4_PIN_UNASSIGNED,
.rtsPin = UARTMSP432E4_PIN_UNASSIGNED,
.errorFxn = NULL
},
{
.baseAddr = UART6_BASE,
.intNum = INT_UART6,
.intPriority = (~0),
.flowControl = UARTMSP432E4_FLOWCTRL_NONE,
.ringBufPtr = uartMSP432E4RingBuffer[MSP_EXP432E401Y_UART6],
.ringBufSize = sizeof(uartMSP432E4RingBuffer[MSP_EXP432E401Y_UART6]),
.rxPin = UARTMSP432E4_PP0_U6RX,
.txPin = UARTMSP432E4_PP1_U6TX,
.ctsPin = UARTMSP432E4_PIN_UNASSIGNED,
.rtsPin = UARTMSP432E4_PIN_UNASSIGNED,
.errorFxn = NULL
},
{
.baseAddr = UART7_BASE,
.intNum = INT_UART7,
.intPriority = (~0),
.flowControl = UARTMSP432E4_FLOWCTRL_NONE,
.ringBufPtr = uartMSP432E4RingBuffer[MSP_EXP432E401Y_UART7],
.ringBufSize = sizeof(uartMSP432E4RingBuffer[MSP_EXP432E401Y_UART7]),
.rxPin = UARTMSP432E4_PC4_U7RX,
.txPin = UARTMSP432E4_PC5_U7TX,
.ctsPin = UARTMSP432E4_PIN_UNASSIGNED,
.rtsPin = UARTMSP432E4_PIN_UNASSIGNED,
.errorFxn = NULL
}
};
At this stage, we want to use the backchannel UART (UART0) for either configuration of the mmWave sensor or data logger, just for debugging and understanding the whole architecture. Thus we have to define them properly UART_open().
My questions are:
- Why do we get a wrong UARTHandle mmwaveLoggerUartHandle when setting up the second UART -for the MSS logger- only?
- If we are planning to use the 40-pin BoosterPack header 1, we will map the config UART from the mmWave sensor to U7Rx and U7Tx of the MSP-EXP432E401Y, while the MSS_LOGGER (once a 0-Ohm resistor is removed) will be mapped to pin PL4. Is that correct? Is it enough to do the following changes?
mmwaveUartHandle = UART_open(Board_UART7, &mmwaveUartParams);
and define in gpioPinConfigs:
GPIOMSP432E4_PL4 | GPIO_CFG_IN_PD,
and map it also to any .rxPin of any UART to that pin?
Thanks for your help in advance.
Regards,
Mario