-1

我在同步模式下使用 USART 从主机计算机到固件(位于 ATMega 1284P 中)进行通信。我在固件端的最大缓冲区大小是 20,如果我不断地将数据从主机发送到固件,并且从固件到主机计算机的一些回复,通信会以某种方式锁定。我怀疑发送数据缓冲区(TXB)和接收数据缓冲区(RXB)共同发送/接收固件数据的UDR寄存器被锁定,导致通信停止。对这个问题有什么建议吗?

PS:对于从固件到主机的传输,代码是:UCSRA & (1 << UDRE) 应该是 TRUE

对于从主机到固件的接收,条件是:UCSRA & (1 << RXC) 应该为 TRUE

我正在使用硬件中断 M_USARTx_RX_vect 来检查来自主机的串行字符的可用性。

更新: 固件 - 初始来源:MarlinSerial.cpp:USART 定义,Marlin_main.cpp:程序流程

4

1 回答 1

0

UDR 寄存器物理上两次出现在 avr 地址空间中的同一地址(特殊 io 寄存器映射)。硬件中 rx 的 udr 和 uasrt 的 tx 之间没有锁定。

显示的条件对我来说似乎没问题,但我没有查看 avr 数据表。

也许你在写/读你的循环时遇到了一些问题?20个字符缓冲区?请出示您的代码(请缩小我们需要了解的最低限度)。

于 2014-09-02T12:08:23.663 回答