Chinaunix首页 | 论坛 | 博客
  • 博客访问: 102839
  • 博文数量: 30
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 12
  • 用 户 组: 普通用户
  • 注册时间: 2013-05-27 00:03
文章分类

全部博文(30)

文章存档

2013年(30)

分类: LINUX

2013-08-12 13:31:34

原文地址:(十)、  UART 作者:machoe

  UARTUniversal Asynchronous Receiver/Transmitter,通用异步接收/发送装置,也就是我们通常所说的串口。学过单片机的同学肯定对串口有很深的了解,对于我来说,这也是我学单片机时所学的第一种通信方式。后来渐渐发现,这种简单的通信方式应用范围非常广。本章来详细介绍一下TQ2440开发板的串口使用方法

、通信方式

发送数据:CPU将数据写入UARTUART将数据按照一定的格式在一根线上发出;

接收数据:UART检测另一根线上的信号,将串行收集的数据放在缓冲区中,CPU就可以读缓冲区来获得数据。

UART是全双工的通信方式,最简单的只需要3根线,TxD用于发送数据,RxD用于接收数据,GnD用于给双方提供参考地。

1)       PC机常使用的RS232-C标准:

RS英文“推荐标准”的缩写,232为标识号,C表示修改次数):

由电子工业协会(Electronic Industries AssociationEIA) 所制定的异步传输标准接口。通常 RS-232 接口以9个引脚 (DB-9) 或是25个引脚 (DB-25) 的型态出现,一般个人计算机上会有两组 RS-232 接口,分别称为 COM1 COM2逻辑1(MARK)=-3V-15V;逻辑0(SPACE)=+3+15V

2)       S3C2440使用的TTL/CMOS标准:

逻辑15V3.3V2.5V1.8V

逻辑00V

数据传输通常从最低有效位(LSB)开始。然而,有些UART允许灵活选择先发送最低有效位或最高有效位(MSB)。微控制器中的UART传送数据的速度通常用波特率(b/s,即:位/秒)来表示,常用的波特率有:4800960019200115200等。例如,在S3C2440微控制器中常用115200bpsUART波特率还受发送和接收线对距离(线长度)的影响。

帧(FRAME)由具有完整意义的、不可分割的若干位组成,包括:开始位、数据位、校验位和停止位。发送数据前,UART之间要约定波特率、数据传输的格式(即要用多少个数据位、是否使用校验位和停止位,如果使用校验位,是奇校验还是偶校验)。

S3C2440 UART的特性 S3C2440 UART简介

S3C24403个独立通道的UART,每个通道都可以工作于中断模式或DMA模式。UART由波特率发生器、发送器、接收器、和控制逻辑组成。

使用系统时钟:波特率可以达到115200.

使用外部时钟,则可以达到更高的波特率。

S3C2440 UART的每个通道有64Byte的接收/发送FIFOFirst In First Out)。发送数据时,CPU先将数据写入发送的FIFO中,然后UART会自动的将FIFO中的数据复制到“发送移位器”(Transmit Shifter)中,发送移位器将数据一位一位地发送到TxD数据线上。接收过程,正好与发送相反,接收移位器先从RxD数据线上将数据一位一位的保存在接收FIFO中供CPU读取。其内部结构图如下图:

S3C2440 UART每个通道支持停止位有1位、2位,数据位有5678位,支持检验位,另外还支持红外发送/接收功能。

、相关寄存器及使用

在使用UART之前,我们还要对UART进行一番配置,比如:设置波特率、传输格式、选择相应的引脚功能、选择UART的工作方式(中断或DMA)等等。设置过程其实就是对相关的寄存器进行赋值,下面对主要的寄存器做一下简介,其它详见手册。

1)        ULCONn寄存器:用来设置传输格式

具体功能见下表:

 

红外模式

[6]

0:正常模式;            1:红外模式

检验模式

[53]

设置检验位:

0xx:无校验;(x为任意)

100:奇校验; 101:偶校验;

101:偶校验;

110:发送数据时强制为1,接收数据时检查是否为1

111:发送数据时强制为0,接收数据时检查是否为0.

停止位宽度

[2]

0:一帧有一个停止位;

1:一帧有两个停止位。

数据位宽度

[10]

005位;  016

107位;  118

2)        UCONn寄存器:用于选择时钟、设置UART中断的方式。

这里只讲一下比较难理解的位:

l  [5]:自环模式的选择,有时为了测试,需要将串口的发送和接收连在一起。该位就为我们提供了这个功能,如果此位为0,则串口为正常模式;若此位被置位,则打开了自环模式,UART内部模块就将TxDRxD连在了一起,用于自发自收。

l  [6]接收错误中断使能。用于当接收过程中发生错误时是否产生中断。

3)        UTRSTATn寄存器:用来表明数据是否发送完毕、是否已经接收到数据。

 

发送器空

[2]

当发送缓冲区中没有数据,并且最后一个数据也已经发送出去,此位被自动设为1

发送缓冲区

[1]

当发送缓冲区中没有数据时,此位被自动置1

接收缓冲区数据就绪

[0]

当接收到数据时,此位被自动置1

4)        UTXHn寄存器:向其写入数据,UART会自动保存在缓冲区中,并自动发送出去。

5)        URXHn寄存器:当UART接收到数据时,CPU可以读此寄存器以获得数据。

本章程序在上一章的基础上,减少了中断、按键、led功能,增加了串口的功能。

程序入口依然为head.S文件,依次完成:关看门狗、初始化时钟、初始化SDRAM、代码搬运,重设栈指针,跳转到主函数(MAIN)运行。

main.c文件中,首先调用uart0_init()函数完成对串口的初始化工作。然后,发送一句话,接着进入死循环,不断的查询是否接收到数据,如果接收到,再判断是否是数字或字母,如果是则将数据+1,再发送出去。

 

将编译好的.BIN文件烧到NAND FLASH中运行。注意:网上有网友问过为什么程序直接烧到0x30000000中无法运行,这是由于SP指针和.lds链接脚本的设置原因,请网友自行分析,并参考以前的博客。

本章程序运行后,首先在终端或minicom或其它的串口通讯软件上,打印出一句话:

welcome to here

       It is happy and easy that studing ARM and Linux follow machoe

大家看得出,现象中的两句话是不在同一行,但第二行并没有在新一行的开头处。有兴趣的读者可以自行修改,提示一下:注意代码中的“\n“。

1.韦东山 《嵌入式LINUX应用开发完全手册》

2.三星  《S3C2440手册》

3.

4.

 

阅读(1144) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~