AVR ATMega1284P USART通讯锁定

时间:2014-09-02 11:40:50

标签: serial-port communication avr usart

我在同步模式下使用USART从主机与固件进行通信(驻留在ATMega 1284P中)。我在固件端的最大缓冲区大小是20,如果我连续地从主机向固件发送数据,并且从固件到主机的某些回复,则会以某种方式锁定通信。我怀疑发送数据缓冲区(TXB)和接收数据缓冲区(RXB)共同发送/接收固件数据的UDR寄存器是否被锁定,导致通信停止。有关此问题的任何建议吗?

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

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

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

更新: Firmware - Initial Source:MarlinSerial.cpp:USART定义,Marlin_main.cpp:程序流程

1 个答案:

答案 0 :(得分:0)

UDR寄存器实际上是avr地址空间中相同地址的两倍(特殊io寄存器映射)。在硬件中,rx的udr与uasrt的tx之间没有锁定。

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

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