Part Number:MSP432E401Y
Tool/software: TI-RTOS
My current configuration uses all GPIO pins in port A, but for testing purposes I would still like to receive debug serial output via the xds 110 on the development board. Therefore I have been trying unsuccessfully to configure UART1 and use pins PB0 and PB1 for display UART RX and TX respectively.
Here are my UART and Display configurations in the MSP_EXP432E401Y.c file:
/* * =============================== UART =============================== */ #include <ti/drivers/UART.h> #include <ti/drivers/uart/UARTMSP432E4.h> UARTMSP432E4_Object uartMSP432E4Objects[MSP_EXP432E401Y_UARTCOUNT]; unsigned char uartMSP432E4RingBuffer[MSP_EXP432E401Y_UARTCOUNT][32]; /* 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_PB0_U1RX,*/UARTMSP432E4_PA0_U0RX, .txPin = /*UARTMSP432E4_PB1_U1TX,*/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,//UARTMSP432E4_PA0_U0RX, .txPin = UARTMSP432E4_PB1_U1TX,//UARTMSP432E4_PA1_U0TX, .ctsPin = UARTMSP432E4_PIN_UNASSIGNED, .rtsPin = UARTMSP432E4_PIN_UNASSIGNED, .errorFxn = NULL } }; const UART_Config UART_config[MSP_EXP432E401Y_UARTCOUNT] = { { .fxnTablePtr = &UARTMSP432E4_fxnTable, .object = &uartMSP432E4Objects[MSP_EXP432E401Y_UART0], .hwAttrs = &uartMSP432E4HWAttrs[MSP_EXP432E401Y_UART0] }, { .fxnTablePtr = &UARTMSP432E4_fxnTable, .object = &uartMSP432E4Objects[MSP_EXP432E401Y_UART1], .hwAttrs = &uartMSP432E4HWAttrs[MSP_EXP432E401Y_UART1] } }; const uint_least8_t UART_count = MSP_EXP432E401Y_UARTCOUNT; /* * ============================= Display ============================= */ #include <ti/display/Display.h> #include <ti/display/DisplayUart.h> #include <ti/display/DisplaySharp.h> #define MAXPRINTLEN 1024 #ifndef BOARD_DISPLAY_SHARP_SIZE #define BOARD_DISPLAY_SHARP_SIZE 96 #endif DisplayUart_Object displayUartObject; DisplaySharp_Object displaySharpObject; static char displayBuf[MAXPRINTLEN]; //static uint_least8_t sharpDisplayBuf[BOARD_DISPLAY_SHARP_SIZE * BOARD_DISPLAY_SHARP_SIZE / 8]; const DisplayUart_HWAttrs displayUartHWAttrs = { .uartIdx = MSP_EXP432E401Y_UART1, .baudRate = 115200, .mutexTimeout = (unsigned int)(-1), .strBuf = displayBuf, .strBufLen = MAXPRINTLEN }; #ifndef BOARD_DISPLAY_USE_UART #define BOARD_DISPLAY_USE_UART 1 #endif #ifndef BOARD_DISPLAY_USE_UART_ANSI #define BOARD_DISPLAY_USE_UART_ANSI 0 #endif #ifndef BOARD_DISPLAY_USE_LCD #define BOARD_DISPLAY_USE_LCD 0 #endif /* * This #if/#else is needed to workaround a problem with the * IAR compiler. The IAR compiler doesn't like the empty array * initialization. (IAR Error[Pe1345]) */ #if (BOARD_DISPLAY_USE_UART || BOARD_DISPLAY_USE_LCD) const Display_Config Display_config[] = { { # if (BOARD_DISPLAY_USE_UART_ANSI) .fxnTablePtr = &DisplayUartAnsi_fxnTable, # else /* Default to minimal UART with no cursor placement */ .fxnTablePtr = &DisplayUartMin_fxnTable, # endif .object = &displayUartObject, .hwAttrs = &displayUartHWAttrs }, #endif #if (BOARD_DISPLAY_USE_LCD) { .fxnTablePtr = &DisplaySharp_fxnTable, .object = &displaySharpObject, .hwAttrs = &displaySharpHWattrs }, #endif }; const uint_least8_t Display_count = sizeof(Display_config) / sizeof(Display_Config);
And here is my UART cfg enum in the MSP432E401Y.h file:
/*! * @def MSP_EXP432E401Y_UARTName * @brief Enum of UARTs on the MSP_EXP432E401Y dev board */ typedef enum MSP_EXP432E401Y_UARTName { MSP_EXP432E401Y_UART0 = 0, MSP_EXP432E401Y_UART1, MSP_EXP432E401Y_UARTCOUNT } MSP_EXP432E401Y_UARTName;
I open the display in the main function as follows:
/* Call driver init functions */ Board_initGeneral(); Display_init(); /* define display for UART console output */ display = Display_open(Display_Type_UART, NULL); if (display == NULL) { /* Failed to open display driver */ while(1); }
If I disable my GPIO configurations for Port A pins 0 and 1, and then change my DisplayUart_HWAttrs struct param .uartIdx to MSP_EXP432E401Y_UART0, everything works and I get display output, but changing to MSP_EXP432E401Y_UART1 I no longer receive serial display output.
Is there a way for me to do what I want? I couldn't see any info in the documentation references indicating that this is not possible.
Thanks for any help you can provide.
Patrick