串口通信——S5PV210串口通信接口详解(串口控制器、串口的时钟等)

以下内容源于 朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。

参考博客

s5pv210——串口通信 - biaohc - 博客园

一、S5PV210的串口控制器

S5PV210的串口控制器的相关内容,在用户手册的section8.1章节。

由UART的框图可知:

(1)串口控制器包含transmitter模块和receiver模块,两部分功能彼此独立。transmitter模块负责向外部发送信息,receiver模块负责从外部接收信息到X210内部。

(2)从总线角度来讲,串口控制器是接在APB总线上的。对我们编程有影响的是:将来计算串口控制器的源时钟时是以APB总线来计算的。

(3)transmitter模块由发送缓冲区发送移位器构成。主板需要发送信息时,首先将信息进行编码(一般用ASCII码)形成二进制流,然后将一帧数据(一般是8bit)写入发送缓冲区。发送移位器会自动从发送缓冲区中读取一帧数据,然后自动移位(移位的目的是将一帧数据的各个位分别拿出来)将其发送到Tx通信线上。我们编程的时候,初始化串口之后,只需要将数据写入缓冲区即可,硬件会自动完成发送过程。

(4)receiver模块由接收缓冲区接收移位器构成。当通过串口线向主板发送信息时,信息通过Rx通信线进入接收移位器,然后接收移位器自动移位将该二进制位存入接收缓冲区。当接收完一帧数据,receiver模块会产生一个中断给CPU,CPU接收到中断后得知receiver模块已经接收一帧数据,于是去读取这帧数据。

(5)串口底层的工作(比如怎么移位的、怎么定义起始位的、TTL电平还是RS232电平等)对程序员是隐藏的,软件工程师对串口的操作接口就是(输入与输出)缓冲区,而缓冲区的实质就是寄存器,因此对串口的操作最后还是表现为对寄存器的读写。

(6)波特率发生器,作用是产生串口发送/接收的节拍时钟。波特率发生器本质是一个时钟分频器。它的工作需要源时钟(因为串口控制器是接在APB总线上的,所以源时钟由APB总线提供),然后它的内部将源时钟进行分频(通过软件设置寄存器来配置)得到目标时钟,然后再用这个目标时钟产生波特率(硬件自动的)。

(7)自动流控(AFC,Auto Flow Control)的设计目的,是让串口通信变得更可靠,在发送方速率比接收方快的时候,流控可以保证发送和接收不会漏掉东西。但是现在有更好更高级的通讯方式(比如usb、internet),串口基本被废弃了。现在串口的主要用途,是SoC通过串口来输出调试信息。由于调试信息不是关键性信息,而且由于硬件的发展,串口本身速度已经相对很慢,硬件本身可以协调发送和接收速率,因此流控已经失去意义

二、串口的高级功能

串口的基本功能如一所述,由于技术的发展,串口新添了一些高级功能,在像210这类的高级SoC的串口控制器中,都有下面这些高级功能。

1、FIFO模式及其作用

典型的串口设计,发送/接收缓冲区只有1字节,每次发送/接收只能处理1帧数据。这样在单片机中没什么问题,但是到复杂SoC中(一般有操作系统的)就会出现问题,会导致效率低下,因为CPU需要不断切换上下文。

解决方案就是扩展(串口控制器的)发送/接收缓冲区,比如将发送/接收缓冲器设置为64字节,CPU一次性给发送缓冲区64字节的待发送数据,然后transmitter慢慢发送,发送完再找CPU要64字节数据。但是串口控制器本来的发送/接收缓冲区是1字节长度,所以做了一个变相的扩展,即FIFO。这个缓冲区之所以叫FIFO,是因为该缓冲区的工作方式类似于FIFO这种数据结构。

2、DMA模式及其作用

DMA是英文direct memory access的缩写,中文名是“直接内存访问”。DMA模式要解决的问题与上面的FIFO模式要解决的问题一致,就是串口发送/接收要频繁地折腾CPU,造成CPU反复切换上下文,导致系统效率低下。DMA技术的核心就是在交换数据时不需要CPU参与,模块自己完成。

传统的串口工作方式(无FIFO无DMA)效率是最低的,适合低端单片机。高端单片机上CPU事务繁忙,所以都需要串口能够自己完成大量数据发送/接收。FIFO模式是一种轻量级的解决方案,DMA模式适合大量数据迸发式的发送/接收时。

3、IrDA模式及其用法

IrDA即红外线通信(电视机、空调遥控器就是红外通信的)。发送方(固定间隔时间)向接收方发送红外信号或者不发送红外信号,接收方通过判断有无红外线信号来接收1和0。

红外通信和串口通信非常像,都是每隔固定时间发送1或者0给接收方,因此S5PV210就利用串口通信来实现红外发送和接收。S5PV210的某个串口支持IrDA模式,开启红外模式后,只需要向串口写数据,这些数据就会以红外光的方式向外发射出去(当然是需要一些外部硬件支持的),然后接收方接收这些红外数据即可解码得到所发送的信息。

三、串行通信与中断的关系

串口通信分为发送/接收2部分,其中发送方一般不需要(但也可以使用)中断,来完成数据的发送,接收方必须(其实也可以轮询方式接收)使用中断来接收。

(1)发送方使用中断

发送方先设置好中断并绑定一个中断处理程序,然后发送方丢一帧数据给transmitter模块,transmitter模块需要耗费一段时间来发送这一帧数据,这段时间内发送方CPU可以切换到别的任务,等transmitter模块发送完成后会产生一个TXD中断,通知CPU去执行事先绑定的中断处理程序,在中断处理程序中CPU给transmitter模块放一帧数据,然后CPU切换离开。

(2)发送方不使用中断

发送方事先禁止TXD中断,发送方CPU给一帧数据到transmitter模块,然后transmitter模块耗费一段时间来发送这帧数据,这段时间CPU没有切换去做别的事情,一直在等待数据发送完成,发送完成后CPU再给它一帧数据继续发送,直到所有数据发完。

CPU是怎么知道transmitter模块已经发送完了?有一个状态寄存器,状态寄存器中有一个位叫发送缓冲区空标志,transmitter模块发送完成(发送缓冲区空了)就会给这个标志位置位,CPU通过不断查询这个标志位为1还是0,得知发送是否已经完成。

(3)接收方必须使用中断

因为串口通信是异步的,异步的意思就是说发送方占主导权。发送方随时想发就能发,而接收方只有时刻等待才不会丢失数据。这个差异使得发送方可以不用中断来发送数据,而接收方不得不使用中断模式来接收数据。

四、S5PV210串口的时钟信号

(1)串口通信为什么需要时钟?

因为串口通信需要一个固定的波特率,所以transmitter模块和receiver模块都需要一个时钟信号。

(2)S5PV210的时钟信号从哪里来?

时钟信号从哪里来?源时钟信号是外部APB总线(PCLK_PSYS,66MHz)提供给串口模块的(这就是为什么我们说串口是挂在APB总线上的),然后进到串口控制器内部后给波特率发生器(实质上是一个分频器),在波特率发生器中进行分频,分频后得到一个低频时钟,这个时钟就是给transmitter和receiver使用的。

(3)如何设置串口的时钟信号?

串口通信中时钟的设置主要看寄存器的设置。

第一,设置UCONn寄存器,为串口控制器选择源时钟(一般选择为PCLK_PSYS,也可以是SCLK_UART)。

第二,设置波特率发生器的2个寄存器UBRDIVn、UDIVSLOTn。UBRDIVn寄存器用来设置波特率,UDIVSLOTn用来辅助设置(目的是为了校准波特率)。

具体见博文串口通信——S5PV210串口通信的简单案例中对各个寄存器的bit含义的介绍。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天糊土

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值