《朱老师物联网大讲堂》学习笔记
学习地址:www.zhulaoshi.org
s5pv210串口通信
见数据手册《S5PV210_UM_REV1.1》8.1
串口,也叫UART,英文全称是UNIVERSAL ASYNCHRONOUS RECEIVER AND TRANSMITTER
下面是我们要讲解的串口原理图
图的最左边是外设总线,peripheral bus
右边是发送器,transmitter,接收器,receiver,
这两个部分是独立的,
都由control unit来控制。
从总线的角度来看,
串口控制器是接在APB总线上的,
以后串口控制器的时钟是以APB总线来计算的。
发送器transmitter有发送缓冲区和发送移位器组成,
首先将信息进行编码成二进制流,
然后将一帧数据写入发送缓冲区,以后程序就不用管了,
剩下的发送部分是硬件自动的,
发送移位器会自动从发送缓冲区中读取一帧数据,
然后自动移位,
移位的目的就是将一帧数据的各个位分别拿出来,
将其发送到我们的TX通信线上。
receiver由接收缓冲区和接收移位器组成,
当有人通过串口向我发送信息时,
信息通过RX通信线进入我的接收移位器,
然后接收移位器自动移位将该二进制保存入我的接收缓冲区,
接收完一帧数据后receiver会产生一个中断给CPU,
CPU接收到中断后就知道receiver接收满一帧数据了,就会回来读取这帧数据。
总结下:
发送缓冲区和接收缓冲区是关键,
发送移位器和接收移位器的工作都是自动的,不用编程控制的,
所以我们写串口的代码就是:
首先初始化好串口控制器,
然后要发送数据时,直接写入发送缓冲区,
而要接收数据时,直接去接收缓冲区读取即可。
可见串口底层的工作,
比如串口怎么移位的,
起始位怎么定义的,
TTL电平还是RS232电平等,
都程序员是隐藏的,程序员不用管,
软件工程师对串口操作的接口就是,
发送/接收缓冲区,其实质就是寄存器,
又因为IO与内存统一编址,操作方式就是读写内存。
ps:初始化串口的实质就是读写寄存器
串口控制器中有一个波特率发生器,
作用是产生串口发送/接收的节拍时钟,
波特率发生器作用于我们的移位器,
它告诉其多长时间动一次,
它的节拍从哪里来的呢?
其实就是个时钟分频器,
它的工作需要源时钟,
从APB总线来,
然后内部将源时钟分频(软件设置寄存器来配置)得到目标时钟,
然后再用这个目标时钟产生波特率(这个过程是硬件自动完成的)。
我们以后编程要做的就是,初始化,收发。
自动流控(AFC:auto flow control)
流控线:接收方来不及接收,就把流控线拉低,
发送方看见流控线被拉低,就会地址发送,
接收方接收完毕,就拉高流控线,
发送方就会继续发送。
流控让串口通信非常可靠,
不过现在基本已经不用了,更多是用来输出调试信息的。
现在的硬件速率已经远远高于串口速率了,所以流控基本没什么用了。