出现问题的代码:
while(U2STAbits.UTXBF && !U2STAbits.TRMT) continue;
代码中涉及到了两个寄存器:UxSTA<9>UTXBF:UARTx发送缓冲器满状态位(只读)和UxSTA<8>TRMT:UARTx发送移位寄存器空位(只读)
数据手册对这两个寄存器位的描述为:
UTXBF:UARTx 发送缓冲器满状态位(只读) 1 = 发送缓冲器满 0 = 发送缓冲器未满,至少还可写入一个字符 |
TRMT:UARTx 发送移位寄存器空位(只读) 1 = 发送移位寄存器为空,同时发送缓冲器为空(上一次发送已完成) 0 = 发送移位寄存器非空,发送正在进行或等待发送 |
对于PIC24F32系列的PIC单片机的UART,都具有一个4级深度的FIFO加一个发送移位寄存器(UxTSR),组合起来实际上就有五级深度。
第一次开始发送的时候,由于UxTSR寄存器为空,这样传输数据到UxTXREG寄存器会导致该数据立即传输到UxTSR,但是在第二次及以后的发送则不会。
如果采用上述轮询方式同时查询上述两个寄存器位的话,首先
- TRM