UART通信接口实现原理
UART通信接口实现原理串口发送数据格式:1位起始位(‘0’),8位数据位,1位停止位(‘1’),空闲位(‘1’)。
接收数据: 按照串口传输协议,检测起始位,为防止因干扰或其它因素引起的电平跳动,以波特率16倍的频率检测,一旦检测到起始位,就开始接收数据,要保证在数据位的中间取样。
对于异步接收器而言,同步的实现就是靠寻找起始位来作为一帧数据的开始。通常的做法是产生一个16倍(或32倍)于波特率的时钟信号clkl6x,当 clkl6x的前后两个脉冲沿检测到串行输入信号从高到低的跳变时,即表明一帧数据的开始,然后再经过8个clkl6x周期,以该时刻点为基准,每隔16个。1k16x周期(即串行通信周期),就将该时刻收到的串行数据移入移位寄存器rsr中,当8位数据(假设数据长度为8位)均移入寄存器后,再将rsr的内容移入二级缓冲rbr,设置数据准备好信号dataready,去控制数据的并行输出。同时,用dataready信号上升沿对接收帧数进行计数。本设计中协议规定文件以一个十六进制00数据作为结束,因此检测到帧数据为00时将RX_ done信号置高,表明文件接收完毕。如需要给出出错信号,可以判断奇偶校验位,如有错,设置校验错信号parityerror;再判断其后的停止位,如有错,则设置帧错误信号framingerrorarxd为串行输入信号,clkl6x可以根据实际的波特率由高频时钟信号分频得到。dout是并行输出信号。
发送数据: 串口数据发送相对接收较为简单,只需要依次发送起始位,数据位,停止位即可,注意波特率的计算。
由于实际用的板子的晶振是50MHz的,所以调用了分频子模块counter,以得到9600Hz的16倍的clkl6x的时钟。
谢谢楼主分享
页:
[1]