ARM S5PV210 串行通信接口详解

news2024/11/18 11:20:49

一、串行通信接口详解 1

0. 串口的名称

  1. S5PV210 的数据手册中串口控制器在 section8.1
  2. 串口的官方名称叫:universal asynchronous reciver and transmitter,通用异步收发器
    英文缩写是uart,中文简称串口。
    在这里插入图片描述

1. S5PV210 的串口控制器工作原理框图

在这里插入图片描述

  1. 整个串口控制器包含 transmitter 和 receiver 两部分,两部分功能彼此独立,transmitter 负责210 向外部发送信息,receiver 负责从外部接收信息到 210 内部。
  2. 总线角度来讲,串口控制器是接在 APB 总线上的。对我们编程有影响的是:将来计算串口控制器的源时钟时是以APB总线来计算的。
  3. transmitter 由发送缓冲区和发送移位器构成。我们要发送信息时,首先将信息进行编码(一般用 ASCII 码)成二进制流,然后将一帧数据(一般是 8 位)写入发送缓冲区(从这里以后程序就不用管了,剩下的发送部分是硬件自动的),发送移位器会自动从发送缓冲区中读取一帧数据,然后自动移位(移位的目的是将一帧数据的各个位分别拿出来)将其发送到 Tx 通信线上。
  4. receiver 由接收缓冲区和接收移位器构成。当有人通过串口线向我发送信息时,信息通过 Rx 通信线进入我的接收移位器,然后接收移位器自动移位将该二进制位保存入我的接收缓冲区,接收完一帧数据后 receiver 会产生一个中断给 CPU,CPU 收到中断后即可知道 receiver 接收满了一帧数据,就会来读取这帧数据。

总结:发送缓冲区和接收缓冲区是关键。发送移位器和接收移位器的工作都是自动的,不用编程控制的,所以我们写串口的代码就是:首先初始化(初始化的实质是读写寄存器)好串口控制器(包括发送控制器和接收控制器),然后要发送信息时直接写入发送缓冲区,要接收信息时直接去接收缓冲区读取即可。可见,串口底层的工作(譬如怎么移位的、譬如起始位怎么定义的、譬如TTL电平还是RS232电平等)对程序员是隐藏的,程序员不用去管。软件工程师对串口操作的接口就是发送/接收缓冲区(实质就是寄存器,操作方式就是读写内存)。

  1. 串口控制器中有一个波特率发生器,作用是产生串口发送/接收的节拍时钟。波特率发生器其实就是个时钟分频器,它的工作需要源时钟(APB总线来),然后内部将源时钟进行分频(软件设置寄存器来配置)得到目标时钟,然后再用这个目标时钟产生波特率(硬件自动的)。

2. 自动流控(AFC:Auto flow control)

  1. 为什么需要流控?流控的目的是让串口通信非常可靠,在发送方速率比接收方快的时候流控可以保证发送和接收不会漏掉东西。
  2. 现在为什么不用流控?现在计算机之间有更好更高级(usb、internet)的通讯方式,串口已经基本被废弃了。现在串口的用途更多是 SoC 用来输出调试信息的。由于调试信息不是关键性信息、而且由于硬件发展串口本身速度已经相对慢的要死了,所以硬件都能协调发送和接收速率,因此流控已经失去意义了,所以现在基本都废弃了。

二、串行通信接口详解 2

0.

本来串口的功能就是上节讲过的部分,但是后来的技术发展给串口叠加了一些高级功能,在像 210 类的高级 SoC 的串口控制器中,都有这类高级功能。


1. FIFO模式及其作用

  1. 典型的串口设计,发送/接收缓冲区只有 1 字节,每次发送/接收只能处理 1 帧数据。这样在单片机中没什么问题,但是到复杂 SoC 中(一般有操作系统的)就会有问题,会导致效率低下,因为 CPU 需要不断切换上下文。
  2. 解决方案就是想办法扩展串口控制器的发送/接收缓冲区,譬如将发送/接收缓冲器设置为 64 字节,CPU 一次过来直接给发送缓冲区 64 字节的待发送数据,然后 transmitter 慢慢发,发完再找CPU 再要 64 字节。但是串口控制器本来的发送/接收缓冲区是固定的 1 字节长度的,所以做了个变相的扩展,就是 FIFO。
  3. FIFO 就是first in first out,先进先出。fifo 其实是一种数据结构,这里这个大的缓冲区叫 FIFO是因为这个缓冲区的工作方式类似于FIFO这种数据结构。

2. DMA 模式及其作用

  1. DMA direct memory access,直接内存访问。DMA 本来是 DSP 中的一种技术,DMA 技术的核心就是在交换数据时不需要 CPU 参与,模块可以自己完成。
  2. DMA 模式要解决的问题和上面 FIFO 模式是同一个问题,就是串口发送/接收要频繁的折腾CPU 造成 CPU 反复切换上下文导致系统效率低下。
  3. 传统的串口工作方式(无 FIFO 无 DMA)效率是最低的,适合低端单片机;高端单片机上CPU 事务繁忙,所以都需要串口能够自己完成大量数据发送/接收。这时候就需要 FIFO 或者 DMA 模式。FIFO 模式是一种轻量级的解决方案,DMA 模式适合大量数据迸发式的发送/接收时。

3. IrDA 模式及其用法

  1. IrDA 其实就是红外,红外就是红外线通信(电视机、空调遥控器就是红外通信的)。
  2. 红外通信的原理是发送方固定间隔时间向接收方发送红外信号(表示1或0)或者不发送红外信号(表示0或者1),接收方每隔固定时间去判断有无红外线信号来接收1和0.
  3. 分析可知,红外通信和串口通信非常像,都是每隔固定时间发送1或者0(判断1或0的物理方式不同)给接收方来通信。因此210就利用串口通信来实现了红外发送和接收。
  4. 210 的某个串口支持 IrDA 模式,开启红外模式后,我们只需要向串口写数据,这些数据就会以红外光的方式向外发射出去(当然是需要一些外部硬件支持的),然后接收方接收这些红外数据即可解码得到我们的发送信息。

三、串行通信接口详解3

1. 串行通信与中断的关系

  1. 串口通信分为发送/接收 2 部分。发送方一般不需要(也可以使用)中断即可完成发送,接收方必须(一般来说必须,也可以轮询方式接收)使用中断来接收。
  2. 发送方可以选择使用中断,也可以选择不使用中断。使用中断的工作情景是:发送方先设置好中断并绑定一个中断处理程序,然后发送方丢一帧数据给 transmitter,transmitter 发送耗费一段时间来发送这一帧数据,这段时间内发送方 CPU 可以去做别的事情,等 transmitter 发送完成后会产生一个 TXD 中断,该中断会导致事先绑定的中断处理程序执行,在中断处理程序中 CPU 会切换回来继续给 transmitter 放一帧数据,然后 CPU 切换离开;不使用中断的工作情景是:发送方事先禁止 TXD 中断(当然也不需要给相应的中断处理程序了),发送方 CPU 给一帧数据到 transmitter,然后 transmitter 耗费一段时间来发送这帧数据,这段时间 CPU 在这等着(CPU 没有切换去做别的事情),待发送方发送完成后 CPU 再给它一帧数据继续发送直到所有数据发完。CPU 是怎么知道 transmitter 已经发送完了?原来是有个状态寄存器,状态寄存器中有一个位叫发送缓冲区空标志,transmitter 发送完成(发送缓冲区空了)就会给这个标志位置位,CPU 就是通过不断查询这个标志位为 1 还是 0 来指导发送是否已经完成的。
  3. 因为串口通信是异步的,异步的意思就是说发送方占主导权。也就是说发送方随时想发就能发,但是接收方只有时刻等待才不会丢失数据。所以这个差异就导致发送方可以不用中断,而接收方不得不使用中断模式。

2. 210串行通信接口的时钟设计

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

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  1. 串口通信中时钟的设置主要看寄存器设置。重点的有:寄存器源设置(为串口控制器选择源时钟,一般选择为 PCLK_PSYS,也可以是 SCLK_UART),还有波特率发生器的 2 个寄存器。
  2. 波特率发生器有 2 个重要寄存器:UBRDIVn 和 UDIVSLOTn,其中 UBRDIVn 是主要的设置波特率的寄存器,UDIVSLOTn 是用来辅助设置的,目的是为了校准波特率的。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


源自朱有鹏老师.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/107245.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CSS -- 2D转换各属性讲解(translate,rotate,scale)

文章目录2D转换1 二维坐标系2 2D转换之移动 translate3 2D转换之旋转 rotate4 2D转换中心点 transform-origin5 2D转换之缩放scale6 2D转换综合写法7 2D转换总结2D转换 转换(transform)是CSS3中具有颠覆性的特征之一,可以实现元素的位移、旋转、缩放等效果 转换(t…

[ 常用工具篇 ] 使用 kali 实现网络钓鱼 -- setoolkit 详解实战(一)

🍬 博主介绍 👨‍🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~ ✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 🎉点赞➕评论➕收藏 养成习…

密码学讲座PPT

来自山大密码学讲座的PPT。 一些密码学领域常用名词术语 Diffie-Hellman 密钥交换;Elgamal 加密和签名;DSA 签名;因相应的离散对数问题难解,大素数的原根可用于密钥交换;RSA加密和签名: 因大整数因子分解难算,合数可成…

JetPack 组件总结

文章目录JetPackLifecycle使用Lifecycle解耦页面和组件使用Lifecycle解耦Service与组件使用ProcessLifecycleOwner监听应用程序生命周期ViewModel 与 LiveDataViewModelLiveDataViewModel LiveData 实现Fragment间通信DataBinding 的意义与应用意义使用前的配置import标签事件…

SWPUCTF 2021 新生赛

😋大家好,我是YAy_17,是一枚爱好网安的小白,自学ing。 本人水平有限,欢迎各位大佬指点,一起学习💗,一起进步⭐️。 ⭐️此后如竟没有炬火,我便是唯一的光。⭐️ 目录 g…

Kotlin + Jpa + Querydsl

Kotlin Jpa Querydsl 本篇主要介绍一下 kotlin jpa querydsl . jpa querydsl 是我很喜欢的一种搭配,它能够让你写sql语句一样的去写代码 , 以前我也写过关于 java版本的, 本篇就来看看kotlin中如何去使用 1.引入插件 主要引入jpa插件 和 kapt Kotlin annotation processi…

【剧前爆米花--爪哇岛寻宝】Cloneable接口和深浅拷贝

作者:困了电视剧 专栏:《JavaSE语法与底层详解》 文章分布:这是一篇关于接口的文章,在本篇文章中我会分享Cloneable接口的用法和机制,同时从底层分析深拷贝和浅拷贝的区别。 Cloneable接口 Cloneable这类接口可以说是…

ZigBee硬件平台小记(CC2530)

文章目录1.CC2530射频模块特征2.CC2530射频模块主要技术指标3.调试器输出接口特点输出引脚排列1.CC2530射频模块特征 基于CC2530F256单芯片ZigBee SOC(System On Chip),集成8051内核模块尺寸:36mm x 26mmSMA底座,外接…

代码随想录训练营第56天|LeetCode 647. 回文子串、516.最长回文子序列

参考 代码随想录 题目一:LeetCode 647. 回文子串 如果用暴力求解,两层for循环加一层判断,两个遍历指针i和j构成一个区间,每次判断这个区间内的字符串是否为回文串,这样的求法时间复杂度为O(n^3)。这里使用动态规划可…

Jetpack Compose中的手势操作

点击事件 监听点击事件非常简单,使用 clickable 和 combinedClickable 修饰符即可满足需求: OptIn(ExperimentalFoundationApi::class) Composable fun ClickableExample() {Column{Box(Modifier.clickable { println("clickable") }.size(3…

异常检测原理及其在计算机视觉中的应用

点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达这篇文章涵盖了三件事,首先什么是视觉角度的异常检测?用于异常检测的技术有哪些?它在哪里使用?异常检测是什么?…

微服务架构下的配置治理模式

微服务被滥用是不争的事实。被滥用的同时,很少人留意到它所带来的配置治理的问题。本文我们介绍两种常见的治理模式。基于common的配置治理模式当微服务数量多时,开发人员倾向于创建这样的配置文件:common-redis.jsoncommon-mysql.jsoncommon…

〖产品思维训练白宝书 - 产品思维认知篇③〗- 产品思维 VS 技术思维

大家好,我是 哈士奇 ,一位工作了十年的"技术混子", 致力于为开发者赋能的UP主, 目前正在运营着 TFS_CLUB社区。 💬 人生格言:优于别人,并不高贵,真正的高贵应该是优于过去的自己。💬 &#x1f4e…

【Numpy基础知识】Broadcasting广播

Numpy广播 来源:Numpy官网:https://numpy.org/doc/stable/user/basics.html 广播描述了 NumPy 在算术运算期间如何处理具有不同形状的数组。根据某些约束,较小的数组将“广播”到较大的阵列,以便它们具有兼容的形状。 导包 impo…

【Python机器学习】条件随机场模型CRF及在中文分词中实战(附源码和数据集)

需要源码请点赞关注收藏后评论区留言私信~~~ 基本思想 假如有另一个标注序列(代词 动词 名词 动词 动词),如何来评价哪个序列更合理呢? 条件随机场的做法是给两个序列“打分”,得分高的序列被认为是更合理的。既然要…

移动设备软件开发-Shape详解

Spape详解 1.自定义背景shape 1.1gradient 1.简介 定义渐变色,可以定义两色渐变和三色渐变,及渐变样式,它的属性有下面几个2.属性 angle,只对线性渐变是有效的放射性渐变必须指定放射性的半径,gradientRadiouscentetX和…

STM32的ST-link调试下载,各种调试接口硬件介绍

调试原理 STM32F-10X使用M3内核,该内核支持复杂的同i傲视操作,硬件调试模块允许在取指令(指令单步运行)或访问数据(数据断电时)使得内核停止。在内核停止时,内核状态都可被查询,完成…

JS基于编码方式实现加密解密文本

JS基于编码方式实现加密解密文本 严格来讲这是一种简单的编码方式:加密,将明文【注】转成编码。解密则是编码转码为明文本。 【注:明文是指没有加密的文字(或者字符串),一般人都能看懂。】 下面源码用到 这个fromCharCode() 方…

年底了,感谢大家2022年的支持,虚竹哥送10本JAVA好书

❤️作者主页:小虚竹 ❤️作者简介:大家好,我是小虚竹。Java领域优质创作者🏆,CSDN博客专家🏆,华为云享专家🏆,掘金年度人气作者🏆,阿里云专家博主&#x1f3…

碧兴物联IPO过会:拟募资4亿 预计年净利降幅超10%

雷递网 雷建平 12月21日碧兴物联科技(深圳)股份有限公司(简称:“碧兴物联”)日前IPO过会,准备在科创板上市。碧兴物联计划募资4.13亿元。其中,1.92亿元用于智慧生态环境大数据服务项目&#xff…