Linux应用开发(十)——通用异步收发器UART

Linux应用开发(十)——通用异步收发器UART,第1张

Linux应用开发(十)——通用异步收发器UART

文章目录
  • 前言
  • 一、UART原理及UART部件使用方法
    • UART原理说明
    • 数据的传输流程
    • S3C2410 UART特性
    • UART的使用
      • 1.将所涉及的UART通道管脚设为UART功能
      • 2.UBRDIVn寄存器:设置波特率
      • 3.ULCONn寄存器:设置传输格式
      • 4.UCONn寄存器
      • 5.UFCONn寄存器、UFSTATn寄存器
      • 6.UMCONn寄存器、UMSTATn寄存器
      • 7.UTRSTATn寄存器
      • 8.UERSTATn寄存器
      • 9.UTXHn寄存器
      • 10.URXHn寄存器
  • 二、UART *** 作实例
    • 代码思路
    • 代码分析
    • UART初始化
  • 总结


前言

了解UART的原理
掌握S3C2410中的UART的使用


一、UART原理及UART部件使用方法 UART原理说明

通用异步收发器简称UART,它用来传输串行数据
发送数据时:CPU将并行数据写入UART,UART按照一定的格式在一根电线上串行发出;
接收数据时:UART检测另一根电线上的信号,将串行收集放在缓冲区中,CPU即可读取UART获取这些数据。UART之间以全双工方式进行数据的传输,最精简的连接方法只有3根电线;TxD用于发送数据,RxD用于接收数据,Gnd用于双方提供参考电平,连接图如下:

UART使用标准的TTL/CMOS逻辑电平来表示数据,高电平表示1,低电平表示0.但是为了增加抗干扰性,提高传输长度,通常将TTL/COMS逻辑电平转换为RS-232逻辑电平,3~12V为0,-3 ~-12V表示1.(电气规范)

TxD、RxD数据线以“位”为最小单位传输数据。帧由具有完整意义的,不可分割的若干组成,它包含开始位,数据位,检验位(需要的话),停止位。发送数据之前,UART之间要约定好数据的传输速率(即每位所占据的时间,其倒数称为比特率)、数据的传输格式(即有多少个数据位,是否使用检验位,是奇校验还是偶校验,有多少个停止位)。

数据的传输流程
  1. 平时数据线处于“空闭状态”(1状态)
  2. 当要发送数据时,UART改变TxD数据线状态(变为0状态)并维持一位的时间,这样接收方检测到开始位后,再等待1.5位的时间就开始一位一位地检测数据线地状态得到所传输地数据。
  3. UART一帧中可以有5,6,7或8位的数据,发送方一位一位的改变数据线的状态将它们发出去,首先发送最低位
  4. 如果使用检验功能,UART在发送完数据位后,还要发送1个校验位。有两种校验方法:奇校验,偶校验——数据位连同校验位中,“1”的个数为奇数还是偶数
  5. 最后发送停止位,数据线恢复到空闭状态。停止位的长度有3种,1,1.5,2.
    如下图,演示了UART使用7位数据位,偶校验,2个停止位的格式传输字符’A’时对应的两种电气规范:
S3C2410 UART特性

S3C2410的UART功能,有3个独立的通道,每个通道都可以工作于中断模式或DMA模式,即UART可以发出中断或则DMA请求以便UART、CPU间传输数据。UART由波特率发生器,发送器,接收器和控制逻辑组成。
UART的每个通道都有16字节的发送FIFO和16字节的接收FIFO.
发送数据时,CPU先将数据写入发送FIFO种,然后UART会自动将FIFO中的数据复制到“发送移位寄存器”中,发送移位寄存器将数据一位一位地发送到TxDn数据线上。
接收数据时,“接收移位寄存器”将RxDn数据线上地数据一位一位接收进来,然后复制到接收FIFO中,CPU即可从中读取数据。

UART的使用

在使用UART之前需要设置波特率,传输格式(有多少个数据位,停止位,校验位,奇校验还是偶检验,是否使用流控制);对于S3C2410,还要选择所涉及管脚为UART功能,选择UART通道的工作模式为中断或DMA模式。设置好之后,往某个寄存器写入数据即可发送,读取某个寄存器即可得到接收到的数据。可以通过查询状态寄存器或设置中断来获知数据是否发送完毕,是否已经接收到数据。

1.将所涉及的UART通道管脚设为UART功能

设置GPHCON寄存器将GPH2、GPH3引脚功能设为TxD0,RxD0.

2.UBRDIVn寄存器:设置波特率 3.ULCONn寄存器:设置传输格式

数据位宽,停止位宽,校验模式,红外模式

4.UCONn寄存器

用于选择UART时钟源、设置UART中断方式等。
接收模式(中断,DMA,禁止),发送方式(禁止,中断,DMA),自环模式(内部相连,自发自收)、接受错误状态中断使能、接收超时使能、接收中断方式、发送中断方式、时钟选择。

5.UFCONn寄存器、UFSTATn寄存器

作用是设置是否使用FIFO,设置FIFO地触发阙值。读取UFSTATn寄存器可以知道FIFO是否已满,其中数据有多少个。

6.UMCONn寄存器、UMSTATn寄存器 7.UTRSTATn寄存器

表明数据是否已经发送完毕,是否接收到数据。
用于流量控制

8.UERSTATn寄存器

用来表示各种错误是否发生 0-4分别表示溢出错误,校验错误,帧错误,beak信号

9.UTXHn寄存器

CPU将数据写入这个寄存器,UART会将它保存到缓冲区,并且自动发送出去

10.URXHn寄存器

当UART接收到数据时,CPU读取这个寄存器,即可获得数据

二、UART *** 作实例 代码思路

首先设置MPLL提高系统时钟,令PCLK为50MHz,UART选择PCLK作为时钟源。将代码复制到SDRAM中,调用main函数。重点:(UART0的初始化,收发数据)

代码分析

MPLL启动这一段,大家就自己阅读书籍,不太好拍

UART初始化

uart0_init函数
字符发送函数
字符接收函数
主函数

总结

很想来一把实际的 *** 作,但是没有这个板子,同时这本书也出的比较久了,很多的 *** 作比较旧了,如果现在去配置这些环境比较费时间。还是学习好原理以后,咱们再做具体的项目来当作练习。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5693894.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存