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板的工程师们,可以一起来探讨这个问题,但是上述方案确实可以让串口重返正确状态。