Other Parts Discussed in Thread: MSP-EXP432E401Y
您好!
我正在 MSP-EXP432E401Y Launchpad 上开发 UART 驱动程序。 我已经使用 FreeRTOS 对 Uartecho 的示例代码进行了更改。 现在我能够处理接收中断、但传输中断不会被触发。 下面是我正在处理的代码片段。 如果我缺少任何内容、请告诉我。
//
//
// UART 中断处理程序。
//
//
空 UART0_IRQHandler (空)
{
uint32_t ui32Status = 0;
uint8_t ui8RxData = 0;
//
//获取中断状态。
//
ui32Status = MAP_UARTIntStatus (UART0_BASE、TRUE);
if (((ui32Status & UART_INT_RX || ui32Status & UART_INT_RT)&& MAP_UARTCharsAvail (UART0_BASE))
{
//
//清除已发出的中断。
//
MAP_UARTIntClear (UART0_BASE、UART_INT_RX);
//读取数据
ui8RxData =(无符号字符) map_UARTCharGetNonBlocking (UART0_BASE);
//此处添加全局数据结构
}
IF (ui32Status 和 UART_INT_TX)
{
MAP_UARTIntClear (UART0_BASE、UART_INT_TX);
if (TxBuf.ui16NbCharToSend > 0)
{
MAP_UARTCharPutNonBlocking (UART0_BASE、TxBuf.ui8DatBuf[TxBuf.ui16NbCharToSend]);
TxBuf.ui16NbCharToSend--;
}
其他
{
///MAX485方向引脚 RX 操作被置位
GPIOPinWrite (GPIO_PORTN_BASE、GPIO_PIN_1、0);
MAP_UARTIntDisable (UART0_BASE、UART_INT_TX);
}
}
}
空 UART0_Init (uint32_t ui32baud)
{
UART_Handle UART;
UART_Params uartParams;
/*调用驱动程序初始化函数*/
UART_INIT();
/*将 LED 引脚配置为收发器- PN1*/
GPIO_setConfig (Board_GPIO_LED0、GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW);
/*创建一个数据处理关闭的 UART。 *
UART_PARAMS_INIT (uartParams);
uartParams.writeDataMode = UART_DATA_BINARY;
uartParams.readDataMode = UART_DATA_BINARY;
uartParams.readReturnMode = UART_return_full;
uartParams.readEcho = UART_ECHO_OFF;
uartParams.波特 率= ui32波特;
UART = UART_OPEN (Board_UART0、uartParams);
if (UART == NULL){
/* UART_open()失败*/
while (1);
}
IntRegister (INT_UART0、UART0_IRQHandler);
MAP_IntEnable (INT_UART0);
MAP_UARTIntEnable (UART0_BASE、UART_INT_RX | UART_INT_RT);
}
//
//
//向 UART 发送字符串。
//
//
空 UARTSend (const uint8_t * pui8Buffer、uint16_t ui16Count)
{
uint16_t ui16cnt;
//禁用全局中断
MAP_IntMasterDisable();
///MAX485方向引脚 TX 操作被置位
GPIOPinWrite (GPIO_PORTN_BASE、GPIO_PIN_1、2);
for (ui16Cnt = 0;ui16Cnt < ui16Count;ui16Cnt++)
{
TxBuf.ui8DatBuf[ui16Cnt]=* pui8Buffer++;
}
TxBuf.ui16NbCharToSend = ui16Count;
//启用 UART 发送中断
MAP_UARTIntEnable (UART0_BASE、UART_INT_TX);
//启用处理器中断
MAP_IntMasterEnable();
}