串口通信——S5PV210串口通信接口详解

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

参考博客

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

一、S5PV210的串口控制器

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

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

(2)串口控制器是接在APB总线上的。

(3)transmitter模块由发送缓冲区发送移位器构成。主板需要发送信息时,首先将信息进行编码形成二进制流,然后将一帧数据写入发送缓冲区,发送移位器会自动从发送缓冲区中读取一帧数据,然后自动移位(移位的目的是将一帧数据的各个位分别拿出来)将其发送到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)提供源时钟信号,然后串口控制器里的波特率发生器进行分频,得到一个低频时钟,这个时钟就是给transmitter模块和receiver模块使用的。

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

第一,为串口控制器选择源时钟,一般选择为PCLK_PSYS,也可以是SCLK_UART。

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

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

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

相关文章

串口通信——S5PV210串口通信的简单案例

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。 参考博客:s5pv210——串口通信 - biaohc - 博客园 一、代码与测试 1、代码文件 完整的案例文件见链接。 (1)start.S文件 /* * 演示串口通信 */#define WTCON …

iOS学习系列 - 扩展机制category与associative

category与associative作为objective-c的扩展机制的两个特性,category即类型,可以通过它来扩展方法;associative,可以通过它来扩展属性;在iOS开发中,可能category比较常见,相对的associative&am…

Spring Boot JWT 快速入门

本章节讨论 jwt 在 spring boot 中的应用。意在快速入门 jwt。 java jdk1.8maven 3.2spring boot 2.0JSON Web Token(JWT) 他是一个用于 Web 身份验证的令牌。 1 JWT 概述 1.1 什么是JWT 直观的理解 JWT 就是一串字符串,如下(来自…

Flex与Java通信之HttpService方式

2019独角兽企业重金招聘Python工程师标准>>> Flex用RemoteObject方式与Java通信是最常用的方式,这是一种最直观的方式。当然Flex也可以用HttpService与服务器类如servlet通信,这也是本次学习的重点。 这次学习是在上节的基础上进行的。本节学…

中断——S5PV210的中断体系简介

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。 参考博客 s5pv210的中断体系 - biaohc - 博客园 我的RTOS 之一 --S5PV210 异常向量表基址和软中断测试_liujia2100的博客-CSDN博客 从0开始学ARM-异常及中断处理、异常向量表、swi_一口Linux的技术…

中断——S5PV210的中断案例

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。 参考博客 s5pv210——中断 - biaohc - 博客园 S5PV210的中断体系简介_天糊土的博客-CSDN博客 一、S5PV210的中断流程 第一部分是我们为中断响应而做的预备工作。 1、初始化中断控制器 比如先关闭所…

按键——S5PV210的按键简介(轮询方式+中断方式)

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。 参考博客 s5pv210——按键 - biaohc - 博客园 一、按键的简介 1、按键的物理特性 按钮没有被按下时,内部是断开的。按钮被按下时,内部保持接通状态;放手后由于弹…

HAproxy + Keepalive实现LDAP代理服务

HAproxy Keepalive实现LDAP代理服务因为公司的各种高自研发的系统非常多,这些系统又全部是在使用LDAP做认证,目前我们有几台DC控制器来分担这些ldap请求,用户通过访问ldap.xxxx.com这个域名来连接ldap服务器,我们通过DNS轮询的方…

中断——S5PV210的中断源

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。 前言 s5pv210中因为支持的中断源很多,因此直接设计了4个中断寄存器,每个32位,每位对应一个中断源。理论上210最多支持128个中断,实际支持不足128个&a…

排序与查找

为什么80%的码农都做不了架构师?>>> sort.h #ifndef SORT_H_INCLUDED #define SORT_H_INCLUDEDvoid bubble_sort(int a[], int len);void select_sort(int a[], int len);#endif // SORT_H_INCLUDED sort.cpp #include "sort.h"void bubble_s…

LCD——S5PV210的LCD的理论与操作

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。 参考博客 s5pv210 LCD编程原理 - biaohc - 博客园 一、关于LCD的简介 1、LCD简介 (1)什么是LCD LCD(Liquid Crystal Display)俗称液晶。液晶是一种材…

分析三星提供的sd_fusing文件夹(用来制作SD卡启动镜像)

以下内容源于网络资源的学习与整理,如有其侵权请告知删除。 参考博客 uboot分析:SD卡镜像制作脚本分析 - 走看看 如何烧写u-boot到SD卡 S5PV210 Uboot开发与移植01:Uboot概述(推荐) 一、sd_fusing文件夹简介 1、文件…

Linux系统管理----LVM逻辑卷和磁盘配额作业习题

1.为主机增加80G SCSI 接口硬盘 2.划分三个各20G的主分区 [rootlocalhost chen]# fdisk /dev/sdb 命令(输入 m 获取帮助):n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): Using default r…

外存——S5PV210的外部存储器(nandflash与inand的介绍)

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。 参考内容 关于iNand ,oneNand,moviNAND的区别——大家一起来扫盲 - 嵌入式系统 总结 本文首先介绍了目前主流的外存设备有哪些。 然后介绍了NandFlash芯片的接口、结构、常见操作,以及…

uboot中关于LCD的代码分析

以下内容源于朱有鹏《物联网大讲坛》课程的学习,如有侵权,请告知删除。 1、在uboot-jiuding/board.c中,init_sequence中的display_banner中的open_backlight函数中,给GPF3_5输出高电平。 注释掉这一句uboot的LCD显示照样正常的&am…

寒假自助游之济南

以前很少去旅行,主要原因是孩子年龄比较小,再就是经济方面的考虑。如今孩子渐渐长大了,行路与读万卷书同等重要,遂决定以后无论寒暑假都应陪孩子到处走一走。我不喜欢那种走马观花式的跟团游,因而自助游便是最佳选择。…

与fastboot相关的知识

以下内容源于朱有鹏嵌入式课程的学习,如有侵权,请告知删除。 一、fastboot的基本知识 1、什么是fastboot (1)fastboot是android使用的一种刷机方法。 android系统设计了2种刷机方式:fastboot和recovery。 &#xf…

Android中Activity启动模式详解

在Android中每个界面都是一个Activity&#xff0c;切换界面操作其实是多个不同Activity之间的实例化操作。在Android中Activity的启动模式决定了Activity的启动运行方式。 Android总Activity的启动模式分为四种&#xff1a; Activity启动模式设置&#xff1a; <activity and…

第一次软工作业展示——潘学

第一次软工作业完成啦&#xff01; 回首这个作业的完成过程&#xff0c;我是很有收获。这个作业有几个难点&#xff1a;1、在给定目录下读取TXT文件的内容&#xff1b;2、从读到的内容中分析出单词&#xff1b;3、统计单词的出现频率并输出。 我之前只学习过C和java&#xff0c…