我在这个论坛上看到其他几篇文章提到了类似的问题,但在任何地方都找不到明确的答案。
我的 UART 初始化代码如下所示:
//注意:我使用哪种 UART 无关紧要。 我尝试了0到7、它们都做了同样的事情。
#define PC_UART_SYSCTL SYSCTL_PERIPH_UART3
#define PC_UART_base UART3_base
SysCtlPeripheralEnable (PC_UART_SYSCTL);
while (!SysCtlPeripheralReady (PC_UART_SYSCTL))
{
}
UARTDisable (PC_UART_base);
UARTConfigSetExpClk (PC_UART_base、getSystemClockFreqHz ()、PC_UART_BAUD_RATE、
( UART_CONFIG_WLEN_8
| UART_CONFIG_STOP_ONE
| UART_CONFIG_PAR_NONE));
这似乎与 TivaWare 手册的编程示例部分中的代码相匹配。
稍后、我对 UART 执行环回测试:
bool 传递= true; //必须在更改设置之前禁用 UARTDisable (PC_UART_base); //将 UART 置于环回模式 PlaceUARToopback (PC_UART_base、1); //清除任何挂起的 Rx 错误 UARTIntClear (PC_UART_base、0xffffffffff); UARTRxErrorClear (PC_UART_base); UARTEnable (PC_UART_base); UARTCharPut (PC_UART_base、0x5a); Value = UARTCharGet (PC_UART_base); 传递=(值= 0x5a); 如果(传递) 为{ *puStatus &=~post_UART_loopback; } 否则 { *puStatus |= POST_UART_LOOPACK; } UARTDisable (PC_UART_base); PlaceUART环 回(PC_UART_base、0);
回送测试通常会失败(尽管会间歇性通过)。
如果我使用 CCS 调试器单步执行初始化代码、我会看到在调用 UARTConfigSetExpClk ()之后 、UART 的 RX 错误状态寄存器显示了一个中断和一个组帧错误、并且数据寄存器的内容为0x0500。 如果我继续步进、几条指令后、错误会被清除、DR 会进入0x0000。
但是、如果我没有 单步执行就只运行到环回测试、则错误仍然会被置位、并且 DR 仍然包含0x0500。 即使在环回测试代码中调用 UARTRxErrorClear ()后,错误位仍保持置位,导致测试失败。
我还发现、如果我在调用回送测试之前添加了100ms 的延迟、那么一切正常。
在 UART 控制寄存器的内容到达正确状态之前、似乎存在某种时间滞后。 在设置 UART 时、我是否忽略了一些操作?
此致、
Dave