S5PV210 串口配置与实验(轮询方式)
S5PV210 UART 相关说明
通用异步收发器简称 UART, 即 UNIVERSAL ASYNCHRONOUS RECEIVER AND TRANSMITTER,它用来传输串行数据。发送数据时, CPU 将并行数据写入 UART,UART 按照一定的格式在一根电线上串行发出;接收数据时, UART 检测另一根电线的信号,将串行收集在缓冲区中, CPU 即可读取 UART 获得这些数据。
在 S5PV210 中, UART 提供了 4 对独立的异步串口 I/O 端口,有 4 个独立的通道,每个通道可以工作于 DMA 模式或者中断模式。其中,通道 0 有 256byte 的的发送 FIFO 和 256byte 的接收 FIFO,通道 1 有 64byte 的的发送 FIFO 64byte 的接收 FIFO,而通道 2 和 3 只有 16byte 的的发送 FIFO 和 16byte 的接收 FIFO。
S5PV210 的 UART 结构图如下:

串口初始化程序
void uart_init()
{
/* 1 配置引脚用于 RX0/TX0 功能 */
GPA0CON = 0x22;
/* 2 设置数据格式等 */
UFCON0 = 0x1; // 使能 FIFO
UMCON0 = 0x0; // 无流控
ULCON0 = 0x3; // 数据位:8, 无校验, 停止位: 1
UCON0 = 0x5; // 时钟: PCLK,禁止中断,使能 UART 发送、接收
/* 3 设置波特率 */
UBRDIV0 = UART_UBRDIV_VAL; // 34
UDIVSLOT0 = UART_UDIVSLOT_VAL; // 0xDFDD
}
程序分析:
第一步 配置引脚用于 RX0/TX0 功能
GPA0CON 寄存器如下图所示:

配置 GPA0CON = 0x22。
第二步 设置数据格式
ULCON0 寄存器如下图所示:

Word Length = 11,8bit 的数据;
Number of Stop Bit = 0,1bit 的停止位;
Parity Mode = 000,无校验;
Infrared Mode =0,使用普通模式;
所以 ULCON0 = 0x3。
第三步 配置 UART
UCON0 寄存器如下图所示:


Receive Mode = 01 ,使用中断模式或者轮询模式;
Transmit Mode = 01,使用中断模式或者轮询模式;
Send Break Signal = 0,普通传输;
Loop-back Mode = 0,不使用回环方式;
我们采用轮询的方式接受和发送数据,不使用中断,所以 bit[6-9]均为 0;
Clock Selection = 0,使用 PCLK 作为 UART 的工作时钟;
我们不使用 DMA,所以 bit[16]和 bit[20]均为 0;
所以 UCON0 = 0x5。
第四步 UFCON0 和 UMCON0
这两个寄存器比较简单, UFCON0 用来使能 FIFO, UMCON0 用来设置无流控。
第五步 设置波特率
主要是配置如下两个寄存器:

波特率设置相关公式:
UBRDIVn + (num of 1's in UDIVSLOTn)/16 = (PCLK / (bps x 16)) −1
UART 工作于 PSYS 下,所以 PCLK 即 PCLK_PSYS = 66MHz,我们的波特率 bps 设置为 115200,所以
(66MHz/(115200 x 16)) – 1 = 34.80 = UBRDIVn + (num of 1's in UDIVSLOTn)/16
所以,设置 UBRDIV0 = 34,num of 1's in UDIVSLOTn = 13。
根据下图得出 UDIVSLOTn 的值(友善的手册中直接用的(num of 1's in UDIVSLOTn)这个值):

轮询方式接收和发送一个字符
/* 接收一个字符 */
char getc(void)
{
while ((UFSTAT0 & 0xff) == 0); // 如果 RX FIFO 空,等待
return URXH0; // 取数据
}
/* 发送一个字符 */
void putc(char c)
{
while (UFSTAT0 & (1<<24)); // 如果 TX FIFO 满,等待
UTXH0 = c; // 写数据
}
通过读 UFSTAT0 发送/接收状态寄存器,当 Rx FIFO Count 不为 0 时说明接收到数据,读 URXH0 寄存器可以得到 8bit 的数据; 当 Tx FIFO Full = 0 时说明可以发送数据,写 8bit 的数据到 UTXH0。
UFSTAT0 寄存器如下图所示:

所做修改
在《友善之臂210手册》中,讲解的是通过 UTRSTAT0 这个 buffer state reg 来查看当前的状态,因为我们采用的 FIFO模式,并且 UTRSTAT0 与程序所用 Reg 也不符,所以手册中显然是错误的,我们写的分析是修改过的。(可能我参考的手册并不是友善之臂的最新版,没有检察出有此处小错误)
本篇文章参考:《友善之臂210手册》
S5PV210 串口配置与实验(轮询方式)的更多相关文章
- WPF非轮询方式更新数据库变化SqlDependency(数据库修改前台自动更新)
上一章节我们讲到wpf的柱状图组件,它包含了非轮询方式更新数据库变化SqlDependency的内容,但是没有详细解释,现在给大家一个比较简单的例子来说明这部分内容. 上一章节: WPF柱状图(支持数 ...
- 14.4.9 Configuring Spin Lock Polling 配置Spin lock 轮询:
14.4.9 Configuring Spin Lock Polling 配置Spin lock 轮询: 很多InnoDB mutexes 和rw-locks 是保留一小段时间,在一个多核系统, 它可 ...
- 负载均衡算法,轮询方式 大话设计模式之工厂模式 C#
负载均衡算法,轮询方式 2018-04-13 17:37 by 天才卧龙, 13 阅读, 0 评论, 收藏, 编辑 学无止境,精益求精 十年河东,十年河西,莫欺少年穷 学历代表你的过去,能力代表你的现 ...
- CPU处理多任务——中断与轮询方式比较
中断方式与轮询方式比较 中断的基本概念 程序中断通常简称中断,是指CPU在正常运行程序的过程中,由于预选安排或发生了各种随机的内部或外部事件,使CPU中断正在运行的程序,而转到为相应的服务程序去处 ...
- S5PV210 串口实验(中断方式)
结合之前的串口实验(轮询方式)与中断体系分析,我们来做下中断方式的串口接收实验. start.S .global _start .global IRQ_handle _start: /* 关 Watc ...
- Apache的代理服务器的配置 (正向代理 ,反向代理,轮询调度)
一. 代理服务器的了解1.代理服务器 代理服务器英文全称是Proxy Server,其功能就是代理网络用户去取得网络信息. Squid是一个缓存Internet 数据的软件,其接收用户的下载申请,并自 ...
- STM32F10x_硬件I2C主从通信(轮询发送,中断接收)
Ⅰ.写在前面 关注我分享文章的朋友应该知道我在前面讲述过(软件.硬件)I2C主机控制从机EEPROM的例子.在I2C通信主机控制程序是比较常见的一种,可以说在实际项目中,很多应用都会使用到I2C通信. ...
- 误人子弟的网络,谈谈HTTP协议中的短轮询、长轮询、长连接和短连接
引言 最近刚到公司不到一个月,正处于熟悉项目和源码的阶段,因此最近经常会看一些源码.在研究一个项目的时候,源码里面用到了HTTP的长轮询.由于之前没太接触过,因此LZ便趁着这个机会,好好了解了一下HT ...
- STM32学习笔记(五) USART异步串行口输入输出(轮询模式)
学习是一个简单的过程,只要有善于发掘的眼睛,总能学到新知识,然而如何坚持不懈的学习却很困难,对我亦如此,生活中有太多的诱惑,最后只想说一句勿忘初心.闲话不多扯,本篇讲诉的是异步串行口的输入输出,串口在 ...
随机推荐
- mui.fire()触发自定义事件
导读:添加自定义事件监听操作和标准js事件监听类似,可直接通过window对象添加,通过mui.fire()方法可触发目标窗口的自定义事件. 监听自定义事件 添加自定义事件监听操作和标准js事件监听类 ...
- 源码管理工具Git-windows平台使用Gitblit搭建Git服务器
原文地址:https://blog.csdn.net/smellmine/article/details/52139299 搭建Git服务器,请参照上面链接. 注意: 第十二步:以Windows Se ...
- 【jenkins git】Failed to connect to repository:Error performing command:git.exe ls-remote-h
jenkins使用git源码管理报错:Failed to connect to repository:Error performing command:git.exe ls-remote-h 本机需要 ...
- re、词云
正则: re.S使点也能匹配到\n:re.I不区分规则中的大小写:re.X忽略空格及#后的注释:re.M把^和$由文首文末变为各行的首尾. Egの删除各行行尾的alex,alex不区分大小写: ...
- Python学习第三章
1.模块: 其实每个.py文件本身就是一个模块,当读者做完了一个.py文件,如果别人打算直接分享你的成果,只要在他编写的.py文件中倒入(import)就好了. 比如想在hello1.py文件里直接使 ...
- 【手记】解决VS发布asp.net项目报错“该项目中不存在目标GatherAllFilesToPublish”及后续问题
办法在最后. 用VS2017打开一个以前用VS2010写的asp.net项目后,设置好发布选项(发布到文件夹),发布的时候报错如图: 搜索一番,找到的办法是: 在项目文件(xxx.csproj)中,在 ...
- 深圳scala-meetup-20180902(3)- Using heterogeneous Monads in for-comprehension with Monad Transformer
scala中的Option类型是个很好用的数据结构,用None来替代java的null可以大大降低代码的复杂性,它还是一个更容易解释的状态表达形式,比如在读取数据时我们用Some(Row)来代表读取的 ...
- SharkApktool 源码攻略
作者:HAI_ 原文来自:https://bbs.ichunqiu.com/thread-43219-1-1.html 0×00 前言 网上的资料对于apktool的源码分析,来来回回就那么几个,而且 ...
- Tomcat 部署 Web 项目的本质理解
手动创建Web项目 不借助集成开发工具IDE,直接手动创建一个Web项目,有助于理解Web项目的本质. 1.首先建立一个myweb文件夹(自己定义项目名). 2.然后可以建一个html文件(文件里面只 ...
- Swift5 语言指南(十四) 下标
类,结构和枚举可以定义下标,下标是用于访问集合,列表或序列的成员元素的快捷方式.您可以使用下标按索引设置和检索值,而无需单独的设置和检索方法.例如,您可以访问在元素Array实例作为someArray ...