您好!
我正在使用2个 UART (UART-0和 UART-1)、基本上 UART-1将从另一台计算机或系统接收数据(请求)并发回响应、在 UART-00的帮助 下、我只关注数据流(打印接收到的/传输的数据)。 UART-0与 DMA 搭配使用、工作正常、但我面临 UART-1问题(我不使用 DMA 处理此问题)、问题是、我接收的数据与我发送的数据顺序不同。 例如:
第一次迭代
我发送:01-23-45-67-89-AB-CD-ef
我收到:01
第二次迭代
我发送:01-23-45-67-89-AB-CD-ef
我收到:23-45-67-89-AB-CD-ef-01
第三次迭代
我发送:01-23-45-67-89-AB-CD-ef
我收到:23-45-67-89-AB-CD-ef-01
这是我的代码的一部分:
引脚多路复用中的 UART1配置
MAP_PRCMPeripheralClkEnable(PRCM_UARTA1, PRCM_RUN_MODE_CLK);
MAP_PinTypeUART(ucPin_RS485TX, PIN_MODE_2);
MAP_PinTypeUART(ucPin_RS485RX, PIN_MODE_2);
MAP_UARTConfigSetExpClk(UARTA1_BASE, MAP_PRCMPeripheralClockGet(PRCM_UARTA1),
9600, (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE |
UART_CONFIG_PAR_NONE));
//MAP_UARTFlowControlSet(UARTA1_BASE, UART_FLOWCONTROL_NONE);
MAP_UARTFIFODisable(UARTA1_BASE);
UARTIntRegister(UARTA1_BASE, vUartHandleIsr);
MAP_IntPrioritySet(INT_UARTA1, IRQ_PRIORITY_UART1); //IRQ_PRIORITY_UART1 = INT_PRIORITY_LVL_1
UARTIntClear(UARTA1_BASE, UART_INT_RX);
UARTIntEnable(UARTA1_BASE, UART_INT_RX);
vUartHandleIsr 函数:
static void vUartHandleIsr(void)
{
unsigned long IrqStatus;
unsigned char ucReceivedByte;
IrqStatus = UARTIntStatus(UARTA1_BASE, true); //0
UARTIntClear(UARTA1_BASE, IrqStatus);
//If new char had been received
if((IrqStatus & UART_INT_RX) && MAP_UARTCharsAvail(UARTA1_BASE))
{
ucReceivedByte = (unsigned char)(MAP_UARTCharGetNonBlocking(UARTA1_BASE));
vPrintf("%x\r\n", ucReceivedByte);
// <call function to store received data in buffer>
}
}
我认为此代码非常接近 UART 示例、我不确定是什么导致 UART 在我第一次发送数据时错过其余数据(它仅接受第一个字节)、然后对于我发送的下一个数据数组、 始终第一个字节成为最后一个字节。 希望我能在这里找到帮助、
此致、
哈比卜