s5pv210----串口设置之输入输出字符

发布者:凌晨2点369最新更新时间:2020-12-19 来源: eefocus关键字: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结构图如下: 

UART使用标准的TTL/CMCOS 逻辑电平来表示数据,为了增强数据抗干扰能力和提高传输长度,通常将TTL/CMOS逻辑电平转换为RS-232 逻辑电平,查看原理图可知Mini210S使用的是MAX3232SOP芯片,使用的是TX0 和DX0:

搜索“XuTXD0”,可知

通过设置UART相关寄存器,我们就可以驱动UART工作,达到发送和接收字符的目的。

第二节  程序相关讲解

完整代码见目录12.uart_putchar,对比前一个目录11.clock_c,区别在于main.c和多了一个
uart.c文件。
 
1.  main.c
完整代码如下:
int main()
{
char c;
uart_init();        // 初始化串口  
 
while (1)
{
 c = getc ();    // 接收一个字符c
 putc(c+1);     // 发送字符c+1
}
return 0;
 
在main函数中,先会调用uart_init()初始化UART,然后使用 getc接收PC发过来的字符,再调
用putc()将该字符+1回复给PC。
2.  uart.c
art_init() 代码如下:
oid uart_init()
 
 
// 1 配置引脚用于RX/TX 功能
GPA0CON = 0x22222222;
GPA1CON = 0x2222;
 
// 2 设置数据格式等
UFCON0 = 0x1;      // 使能FIFO 
UMCON0 = 0x0;      // 无流控
ULCON0 = 0x3;      // 数据位:8, 无校验, 停止位: 1
UCON0  = 0x5;        // 时钟:PCLK,禁止中断,使能UART发送、接收
 
// 3 设置波特率
UBRDIV0 = UART_UBRDIV_VAL;       // 35
UDIVSLOT0 = UART_UDIVSLOT_VAL;   // 0x1
}
 
上述代码共有3 个步骤,下面我们来一一讲解每一个步骤:
第一步  配置引脚用于RX/TX 功能
参考UART引脚连接图,我们需要设置GPA0CON 和GPA1CON 寄存器使GPA0和GPA1引脚用于UART
功能。

第二步  设置数据格式等
<1>   ULCON0用来设置数据格式,见下图


  Word Length = 11,8bit 的数据;
  Number of Stop Bit = 0,1bit 的停止位;
  Parity Mode = 000,无校验;
  Infrared Mode =0,使用普通模式;
所以ULCON0=0x3
 
<2>  9 UCON0 是UART的配置寄存器,见下图

  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
 
<3>  UFCON0和UMCON0
这两个寄存器比较简单,UFCON0用来使能FIFO,UMCON0用来设置无流控。
 
第三步  设置波特率
波特率即每秒传输的数据位数,涉及两个寄存器:UBRDIV0 和UDIVSLOT0

波特率设置相关公式:UBRDIVn + (num of 1's in UDIVSLOTn)/16 =  (PCLK / (bps x 16)) −1
其中,由Maximum Operating Frequenc y for Each Sub -block 图可知,UART工作于PSYS下,所
以PCLK即PCLK_PSYS = 66.5MHz,我们的波特率bps 设置为115200,所以
(66.5MHz/(115200 x 16) )  –  1 = 35.08  = UBRDIVn + (num of 1's in UDIVSLOTn)/16, 所以我
们设置UBRDIV0=35,UDIVSLOT0=0x1
 
getc()和putc()的代码如下:
// 接收一个字符  
char getc(void)
{
while ((UFSTAT0 & 0xff) == 0);    // 如果RX FIFO 空,等待
return URXH0;                     // 取数据
}
 
// 发送一个字符
void putc(char c)
{
while (UFSTAT0 & (1<<24));     // 如果TX FIFO 满,等待
UTXH0 = c;                        // 写数据
}

发送/接收状态寄存器
通过读UTRSTAT0 发送/接收状态寄存器,当Receive buffer data ready= 1 时说明接收到数据,读URXH0 寄存器可以得到8bit的数据;当Transmitter empty = 1 时说明可以发送数据,写8bit的数据到UTXH0。


第三节  编译代码和烧写运行
编译代码,在Fedora终端执行如下命令:
# cd 12.uart_putchar
# make  
在12.uart_putchar 目录下会生成uart.bin,我们将其烧写到开发板中。

第四节  实验现象
先连接好串口线,并通过MiniTools 自带的串口助手打开串口(注意要设置好波特率等参数,如图),然后从 PC键盘中敲入一个字符,则串口终端会显示该字符在ASCII 表中的下一字符,如输入‘a’,串口终端会出现‘b’


关键字:s5pv210  串口设置 引用地址:s5pv210----串口设置之输入输出字符

上一篇:TQ210 嵌入式A8环境搭建及编译内核、镜像、文件系统
下一篇:S5PV210地址寻址能力映射

推荐阅读最新更新时间:2024-11-02 15:16

ARM芯片的时钟系统详解(S5PV210芯片)
1、时钟介绍 时钟是同步工作系统的同步节拍,时钟的快慢就是我们常说的工作频率,以赫兹(HZ)为单位。时钟系统指导器件的运行,我们分析器件的工作特性时,常常会看器件的时序图,时序图中的时钟周期就是时钟系统来决定的。 2、时钟来源 2.1、 三种时钟配置 1、外部直接输入时钟信号,SoC有个引脚用来输入外部时钟信号,用的很少。 2、外部晶振+内部时钟发生器产生时钟,大部分低频单片机都是这么工作的。 3、外部晶振+内部时钟发生器+内部PLL产生高频时钟+内部分频器分频得到各种频率的时钟。 2.2、S5PV210的时钟来源 S5PV210的时钟来源属于第三种,也可以说复杂的Soc都是第三种,因为复杂Soc的内部器件是很多的,具体原
[单片机]
ARM芯片的时钟系统详解(<font color='red'>S5PV210</font>芯片)
S5PV210开发 -- TTL和CMOS电平
接着 S5PV210开发 -- UART 详解 来讲,里面提到 TTL和RS232电平。 RS232 电平 逻辑1:-3V~-15V 逻辑0:+3V~+15V TTL 电平 逻辑1:+2V~+5V 逻辑0:+0V~+0.8V 一、什么是逻辑电平 要了解逻辑电平的内容,首先要知道以下几个概念的含义: 1:输入高电平(Vih):保证逻辑门的输入为高电平时所允许的最小输入高电平,当输入电平高于Vih时,则认为输入电平为高电平。 2:输入低电平(Vil):保证逻辑门的输入为低电平时所允许的最大输入低电平,当输入电平低于Vil时,则认为输入电平为低电平。 3:输出高电平(Voh):保证逻辑门的输出为高电平时的输出电平
[单片机]
<font color='red'>S5PV210</font>开发 -- TTL和CMOS电平
S5PV210(TQ210)学习笔记——系统时钟和串口
TQ210的系统时钟配置和串口配置非常简单,本文从TQ210的系统时钟配置开始讨论。 TQ210的时钟配置跟2440/6410的时钟配置差不多,只是锁相环的个数略有不同,配置步骤是一样的。配置系统时钟,无非要经过以下几个步骤: (1)设置系统PLL锁定时间 (2)配置PLL (3)配置各模块分频系数 (4)切换到PLL时钟 简单的看着四步似乎没有头绪,但是看到手册中的 S5PV210时钟生成线路图 就可以理解了,现在截图如下: 上图中无非就三种模块,PLL、MUX和DIV,MUX控制时钟源选择,PLL负责生成PLL时钟,DIV负责分频。 为了系统稳定,在设计电路时我们一般不会使用太高频率的晶振(避免高频线间/层间干
[单片机]
<font color='red'>S5PV210</font>(TQ210)学习笔记——系统时钟和<font color='red'>串口</font>
S5PV210(TQ210)学习笔记——按键驱动程序
经过前面的配置,S5PV210开发已经可以成功进入Linux控制台了,那么,有了这个环境就可以开始学习Linux驱动的编写和测试了。学习Linux设备驱动,通常是从字符设备驱动开始。我写的第一个驱动程序是Led的,其实也就是熟悉下字符设备驱动的基本结构,本文以中断方式的按键驱动为例,简单的介绍下字符设备驱动程序。 一 按键驱动程序的简单实现 下面是基于中断和消息的按键驱动程序,其工作原理是:当应用程序读取键值时,会调用按键驱动程序的read函数,而我们实现的read函数检测完读取长度后没有直接读取键值而是等待按键消息,如果没有按键,程序会进入休眠状态,这样可以节省大量的CPU,而当我们按键时硬件会产生中断,程序自动进入中断处理函数
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved