大家好、
-如果轮询 TX_RDY 位且该位卡在0、如何复位 UART 模块?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
大家好、
-如果轮询 TX_RDY 位且该位卡在0、如何复位 UART 模块?
当数据从发送缓冲区复制到移位寄存器以开始传输时、设置 TX_RDY。
如果您在 EVM 中查看我们的 init_UART 函数、您将看到此行:
Uart1Regs.UARTTXBUF.ALL =';//输出一个字节来启动操作。
这会设置 TX_RDY。 如果没有发送第一个字节、它似乎不会被置位。
TX_RDY 是比 TX_EMPTY 更好的信号、因为您可以在前一个字节仍在传输时使用它来加载字节。
尊敬的 Ian:
-请帮助检查这是否正常。 谢谢你。
if (Uart0Regs.UARTTXST.bit.TX_RDY){
UART_TX_TIMEOUT = 0;
(笑声)
}否则{
if (UART_TX_TIMEOUT >= UART_TX_TIME){
(笑声)
UART_TX_TIMEOUT = 0;
Uart0Regs.UARTCTRL3.bit.SW_RESET = 1;//添加复位
Uart0Regs.UARTTXBUF.ALL =';//输出一个字节来启动操作。
}否则{
UART_TX_TIMEOUT++;
}
}
UART 没有外部时钟进入。 一旦它获得一个起始位、它就会以给定的波特率对位进行采样、直到它到达字节的末尾、或者您已经将其编程为接收的位数。 我们发现锁定它的唯一方法是在错误的时间向 UARTHBAUD、UARTMBAUD、UARTLBAUD 寄存器写入较低的值。 这会将其锁定、但只会暂时锁定。 如果您不是动态更改波特率、那么您应该不能将其锁定。
在消息不完整的情况下、最好在消息上设置某种超时以保持同步、并且最好在一段时间内至少在字节之间设置一次字节宽延迟、以便在字节被截断时允许重新同步。
当然、最好对消息进行校验和。
最好是从事务的另一端返回一条消息、说该消息已被接受。 部分原因是收件人无法拉伸时钟、因此您需要确保不会太快地发送消息。
但是、由于没有外部时钟、死锁不是一个问题。