TLC16550C含有 autoflow control.
auto_/RTS, auto_/CTS 這種模式能防止覆蓋接受端緩衝區,但是發射端緩衝區到底如何,就要看你的驅動程序了。
/RTS 是request to send, 是輸出信號,意思是要對方發送數據。
/CTS是 clear to send ,是輸入信號,意思是已收到/RTS,可以發送數據。
/DSR,/DTR也是類似理解。
硬件部分涉及各種讀寫時序圖,電氣特性,在電路圖設計時有用。
軟件寄存器功能及其設置。
void init_serial(void)
{
CSR=CSR&0xfffffffe;//dsp register
EXP=0x0;
LCR = 0x80; //先設置波特率寄存器
DLL = 0x30;
DLM = 0x00;
LCR = 0x03;
FCR = 0x01;
MCR = 0x20;
IER = 0x01;
CSR=CSR|1;
}
LC16550C寄存器有隻讀/只寫區分,IIR類似中斷標誌寄存器(IFR),這種外設一般都帶有自己的一套中斷控制系統,而暴露一個外中斷。
編程經驗:
按照上述模式設置寄存器,唯一沒有考慮的問題是如何消除串口錯誤狀態,這在我的程序實踐中:是靠空閒時反覆讀一些只讀寄存器來消除的。
實際上應該有更好的清除模式纔對。
使用瑞泰DSP6713-A板的工程師們,可以一起來探討這個問題,但是上述方案確實可以讓串口重返正確狀態。