Other Parts Discussed in Thread: UNIFLASH, MMWAVEICBOOST, SYSBIOS
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 Ethernet. 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 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 thread:
int main() { /* Call driver init functions */ Board_init(); GPIO_init(); UART_init();
So we assume the error happened because of being previously initialized. 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.
My questions are:
- Why do we get a wrong UARTHandle mmwaveLoggerUartHandle when setting up the second UART -for the MSS logger- only? Commenting the line continues with the execution but we do not know which UARTs are actually open.
- 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?
Thanks for your help in advance.
Regards,
Mario