一种基于C8051F310的UART扩展实现
(2)软件实现
本文引用地址:http://www.amcfsurvey.com/article/109142.htm发送状态机软件实现:将数据进入到发送缓冲寄存器,然后置SW_TX端口为低电平,启动发送,装载波特率源,此后每经过1/2个位时间后通过移位操作将发送缓冲寄存器中的数据按位改变SW_TX数据线电平从而实现数据的发送。
接收状态机软件实现:当PCA0模块捕捉到SW_RX下边沿后为产生中断,捕捉接收起始位,然后转载波特率,此后每1/2个位时间读取SW_RX线数据位,通过移位操作进入接收缓存。在第九位是由PCA0捕捉停止位,完成接收。
多个UART的扩展实现
由于软件UART主要利用中断来控制接收和发送的,因此,当进行多个UART扩展是不可避免的遇到了由于中断处理时间对于UART上发送数据和接收数据的位时间对准问题。根据UART传输原理为了保证接收的准确性一般采用在1/2个位时间处读取和发送数据。因此无论进行多少个UART扩展其总的时间开销应小于1/2个位时间,因此当配置多个UART扩展时传输的波特率是有限制的。同时为了尽可能的多扩展UART应当尽量采用较高的系统时钟频率。
在本设计中利用C8051F310实现了4路UART扩展。分别利用定时器T0,定时器T2,定时器T3和PCA定时器作为波特率产生定时器。设定波特率为9600b/s。
考虑中断处理时间,前文提到了总的中断处理时间应小于1/2个位时间,考虑了最差情况,即4路中断同时并发的情况,一般而言此种情况是不常发生的,因此,认为只要满足下式:
即可满足n个UART扩展的要求,其中为平均中断处理时间。
对于中断时间的测定,可采用在中断开始和中断结束处设置断点读取定时器计数值方式获得。
由此可以看出能否尽量多的扩展一定波特率要求的UART,主要是控制中断处理的时间采用尽量少的中断处理完成读取和发送的I/O端口控制,以及相应的移位操作,一般接收状态机中中断时间较长,而中断发送机时间较短。
多串口数据转发协议
本设计中实现多串口软件扩展的目的是为了解决端口不足的问题,利用一个串口实现对于多个UART设备的通讯,同时克服硬件扩展中信道占用问题,因此需要编制数据中继转发协议。
下行数据的读取
UART设备的数据发送可以分为两类:分为主从式和直发式,主从式数据的获取需要先向设备发送指令,通过指令获取相应设备数据。直发式设备则无论处于何种状态,系统加电后按照预定数据协议向上发送数据。在本设计中同时存在这两类设备。
对于直发式设备本设计采用直接利用一路软件UART获取数据,将数据保存在单片机预先开辟好的一组存储区域中,对于主从式设备本设计采用由单片机按照其最小工作周期连续采集数据进行存储的方式(即利用单片保持数据的最小采集周期更新)。
采集的时序安排,由于下挂的各种设备数据采集周期不同,因此不可避免的存在各种数据采集的时序问题,由于采用中断方式进行采集,这种时序的安排体现在了中断的优先级安排上。为了最大限度的保持数据采集的实时性,应将数据周期较长的设备设定为高优先级中断,这样在其设备采集设备的同时可以更新其他低速设备。
上行数据的转发
上行数据转发采用指令方式,即利用指令判断从数据存储区中获取那些设备的数据。通过这种方式把原来两类设备数据传输方式统一到了主从式上。
评论