主题中讨论的其他器件:MSP-EXP432E401Y
您好!
我正在 MSP-EXP432E401Y 开发板上开发 MSP432E401。 我正在尝试让一个简单的 UART 工作、但我似乎无法启动 ISR。 我已经从 SimpleLink SDK 运行了 UART_echo 演示、它可以按预期工作、但我的代码不能正常工作。 该项目基于 SDK 中的空示例、我已经将项目中的启动文件与 UART_echo 中的启动文件进行了比较、重要的是相同的。 如果我将 UART_ECHO.c 文件复制到我的项目中、并将其调整为在 UART5上运行(并排除我自己的 main.c)、演示代码将按预期工作- ISR 将按预期触发以回显接收到的字符。
我使用的是 DriverLib、SimpleLink v4.20.00.12。 我的代码如下所示:
#include <stdint.h>#include <stdbool.h>#include "ti/devices/msp432e4/driverlib/driverlib.h"#define UART_BUF_SIZE 32volatile unsigned char uartBuf[UART_BUF_SIZE] = "System Test\n";volatile unsigned char uartHead = 12, uartTail = 0, uartCount = 12;void UART5_IRQHandler(void){ uint32_t ui32Status = UARTIntStatus(UART5_BASE, true); UARTIntClear(UART5_BASE, ui32Status); if ((ui32Status & UART_INT_TX) && uartCount) { UARTCharPutNonBlocking(UART5_BASE, uartBuf[uartTail]); uartTail = (uartTail + 1) % UART_BUF_SIZE; uartCount--; }}int main(void){ uint32_t SysClock; // running from PLL at 120 MHz SysClock = SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | SYSCTL_CFG_VCO_480), 120000000); // enable main interrupts IntMasterEnable(); SysCtlPeripheralEnable(SYSCTL_PERIPH_UART5); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC); GPIOPinConfigure(GPIO_PC6_U5RX); GPIOPinConfigure(GPIO_PC7_U5TX); GPIOPinTypeUART(GPIO_PORTC_BASE, GPIO_PIN_6 | GPIO_PIN_7); UARTConfigSetExpClk(UART5_BASE, SysClock, 115200, (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_NONE)); IntEnable(INT_UART5); UARTIntEnable(UART5_BASE, UART_INT_RX | UART_INT_RT | UART_INT_TX); // start TX uartTail = 1; uartCount--; UARTCharPutNonBlocking(UART5_BASE, uartBuf[0]); while (1) { }}
在连接到 PC5和 PC7的终端上、我可以看到第一个字符、但不再显示。 调试中、UART5 ISR 从未触发-看起来 TX 中断从未触发。 我已经按照这个示例和文档进行了操作、我不确定我在这里缺少什么-有人能不能建议我做的真正明显的错误、请回答?