深刻理解UART_第1页
深刻理解UART_第2页
深刻理解UART_第3页
深刻理解UART_第4页
深刻理解UART_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 UART异步串行口UART异步串行口简介数据通信的基本方式可分为并行通信与串行通信两种:Ø 并行通信:是指利用多条数据传输线将一个资料的各位同时传送。它的特点是传输速度快,适用于短距离通信,但要求通讯速率较高的应用场合。Ø 串行通信:是指利用一条传输线将资料一位位地顺序传送。特点是通信线路简单,利用简单的线缆就可实现通信,降低成本,适用于远距离通信,但传输速度慢的应用场合。UART 异步串行口的传输格式异步通信以一个字符为传输单位,通信中两个字符间的时间间隔是不固定的,然而在同一个字符中的两个相邻位代码间的时间间隔是固定的。通信协议(通信规程):是指通信双方约定的一些规则

2、。在使用异步串口传送一个字符的信息时,对资料格式有如下约定:规定有空闲位、起始位、资料位、奇偶校验位、停止位。通讯时序图如下:Ø 开始前,线路处于空闲状态,送出连续“1”。传送开始时首先发一个“0”作为起始位,然后出现在通信线上的是字符的二进制编码数据。Ø 每个字符的数据位长可以约定为5 位、6 位、7 位或8 位,一般采用ASCII 编码。后面是奇偶校验位,根据约定,用奇偶校验位将所传字符中为“1”的位数凑成奇数个或偶数个。也可以约定不要奇偶校验,这样就取消奇偶校验位。Ø 最后是表示停止位的“1”信号,这个停止位可以约定持续1 位、1.5 位或2 位的时间宽度。

3、Ø 至此一个字符传送完毕,线路又进入空闲,持续为“1”。经过一段随机的时间后,下一个字符开始传送才又发出起始位。Ø 每一个数据位的宽度等于传送波特率的倒数。微机异步串行通信中,常用的波特率为110,150,300,600,1200,2400,4800,9600 等。S3C2410的异步串行口11S3C2410 的UART(通用异步串行口)单元提供三个独立的异步串行I/O 端口,每个都可以在中断和DMA 两种模式下进行。UART支持的最高波特率达230.4kbps。每个UART通道包含2 个16 位FIFO 分别提供给接收和发送。每个UART 包含波特率发生器,接收器,发送器

4、和控制单元。波特率发生器以PCLK或UCLK为时钟源。 发送器和接收器包含16 字节FIFO 寄存器和移位寄存器,当发送数据的时候,数据先写到FIFO 然后拷贝到发送移位寄存器,然后从数据输出端口(TxDn)依次被移位输出。被接收的数据也同样从接收端口(RxDn)移位输入到移位寄存器,然后拷贝到FIFO 中。异步串行口的操作Ø 数据发送操作数据发送帧的格式是可编程的,它包含一个开始位,5 到8 个数据位,一个可选的奇偶位和一个或两个停止位,这些可以通过线性控制器(ULCONn)来设置。发送器也能够产生发送中止条件。中止条件迫使串口输出保持在逻辑0 状态,这种状态保持一个传输帧的时间长

5、度。通常在一帧传输数据完整地传输完之后,在通过这个全0 状态将中止信号发送给对方。中止信号发送之后,传送数据连续放到FIFO 中(在不使用FIFO 模式下,将被放到输出保持寄存器)。Ø 数据接收操作与数据发送一样,数据接收的帧也是可以编程的,它包含一个开始位,5 到8 个数据,一个可选的奇偶位和一位或两位停止位,它们都是通过线性控制器(ULCONn)来设置的。接收器能够检测溢出错误,奇偶校验错误,帧错误和中止状况,每种情况下都将会将一个错误标志置位。UART 异步串行口的波特率发生器每个UART 的波特率发生器为传输提供了串行移位时钟。波特率产生器的时钟源可以从S3C2410 的内部

6、系统时钟或UCLK 中来选择。波特率由时钟源(PCLK 或UCLK)16 分频然后被UART 波特率除数寄存器(UBRDIVn)指定的16 位除数决定。因此,UBRDIVn 的值可以按照下式确定:UBRDIVn=(int)(PCLK/(bps*16)-1 , 其中bps为波特率。例如,如果波特率为115200bps 且PCLK 或UCLK 为40MHz,则UBRDIVn 为:UBRDIVn =(int)(40000000)(115200*16)-1= (int)(21.7)-1= 21-1 = 20UART异步串行口波特率发生器的误差极限UART传输10bit数据的时间误差应该小于1.87(3

7、/160)。tUPCLK = (UBRDIVn + 1) x 16 x 10 / PCLK 实际的传输10bit所需时间。tUEXACT = 10 / baud-rate 理想情况下传输10位需要的时间。UART error(tUPCLK tUEXACT) / tUEXACT x 100%异步串行口的相关寄存器Ø 线路控制寄存器(ULCON)线性控制寄存器,主要用来规定传输帧的格式。下面表格是线控制寄存器的地址和位定义:寄存器地址读/写描述重置值 ULCON0 0x50000000读/写UART通道0线路控制寄存器0x00 ULCON1 0x50004000读/写UART通道1线路控

8、制寄存器0x00 ULCON2 0x50008000读/写UART通道2线路控制寄存器0x00 ULCONn位描述初始状态保留7 0 Infra-Red Mode6 决定是否用红外模式。0 = 正常模式操作1 = 红外Tx/Rx模式0 Parity Mode5:3 指定奇偶产生的类型并在UART的传输与接收操作中检查。0xx = 非奇偶100 = 奇101 = 偶110 = 强制奇偶/选中为1 111 = 强制奇偶/选中为0 000 Number of Stop Bit2 指定多少个停止位将被使用对于帧结束信号。0 = 每帧一个停止位1 = 每帧两个停止位0 Word Length1:0 显示

9、每帧传输或接收的数据位的数目。00 = 5位,01 = 6位10 = 7位,11 = 8位00 Ø 控制寄存器(UCON)寄存器地址读/写描述重置值UCON0 0x50000004读/写UART通道0控制寄存器0x00 UCON1 0x50004004读/写UART通道1控制寄存器0x00 UCON2 0x50008004读/写UART通道2控制寄存器0x00 UCONn位 描述初始状态Clock Selection10 选择PCLK或UCLK对于UART的波特率。0=PCLK : UBRDIVn = (int)(PCLK / (bps x 16) ) -1 1=UCLK(GPH8)

10、 : UBRDIVn = (int)(UCLK / (bps x 16) ) -1 0 Tx Interrupt Type9 中断请求类型。0 = 脉冲型(当Tx缓冲区在无输入输出模式下变空或当Tx在输入输出模式下的输入输出到达触发电平时,中断就被请求。) 1 = 电平型(当Tx缓冲区在无输入输出模式下变空或当Tx在输入输出模式下的输入输出到达触发电平时,中断就被请求。) 0 Rx Interrupt Type8 中断请求类型。0 = 脉冲型(当Rx缓冲区在无输入输出模式下接收数据或当Rx在输入输出模式下的输入输出到达触发电平时,中断就被请求。) 1 = 电平型(当Rx缓冲区在无输入输出模式下

11、接收数据或当Rx在输入输出模式下的输入输出到达触发电平时,中断就被请求。) 0 Rx Time Out Enable7 当UART的输入输出被使能时,使Rx的定时中断使能/失能。这个中断是一个接收中断。 0 = 失能,1 = 使能0 Rx Error Status Interrupt Enable6 使UART在一个例外上产生中断是使能的,例如一个暂停,帧出错,奇偶出错或溢出出错在一个接收操作中。0 = 不产生接收出错的状态中断1 = 产生接收出错的状态中断0 Loopback Mode5 设置回溯位为1将引起UART加入到回溯模式中。这种模式只是为测试目的而提供的。0 = 正常操作, 1 =

12、 回溯模式0 Send Break Signal4 设置这个位将引起UART在一帧的时间内传送一个暂停。这个位在送出暂停信号后会被自动清除。0 = 正常传输,1 = 传送暂停信号0 Transmit Mode3:2 决定哪一个函数当前能够对Tx写入数据到UART传输缓冲寄存器。 00 = 失能01 = 中断请求或轮流检测模式10 = DMA0请求(只对于UART0),DMA3请求(只对于UART2) 11 = DMA1请求(只对于UART1) 00 Receive Mode1:0 决定哪一个函数当前能够读取数据从UART接收缓冲寄存器。00 = 失能01 = 中断请求或轮流检测模式10 = D

13、MA0请求(只对于UART0),DMA3请求(只对于UART2) 11 = DMA1请求(只对于UART1) 00 Ø FIFO控制寄存器(UFCON)寄存器地址读/写描述重置值UFCON0 0x50000008读/写UART通道0FIFO控制寄存器 0x0 UFCON1 0x50004008读/写UART通道1FIFO控制寄存器0x0 UFCON2 0x50008008读/写UART通道2FIFO控制寄存器0x0 UFCONn位 描述初始状态Tx FIFO Trigger Level7:6 决定传输FIFO的触发电平。00 = 空,01 = 4字节10 = 8字节,11 = 12字

14、节00 Rx FIFO Trigger Level5:4 决定接收FIFO的触发电平。00 = 4字节,01 = 8字节10 = 12字节,11 = 16字节00 保留3 0 Tx FIFO Reset2 在重新设置FIFO后自动清除。0 = 正常,1= Tx FIFO重置0 Rx FIFO Reset1 在重新设置FIFO后自动清除。0 = 正常,1= Rx FIFO重置0 FIFO Enable0 0 = 失能1 = 使能0 Ø MODEM控制寄存器(UMCON)寄存器地址读/写描述重置值UMCON0 0x5000000C读/写UART通道0Modem控制寄存器0x0 UMCON

15、1 0x5000400C读/写UART通道1Modem控制寄存器0x0 保留 0x5000800C-保留未定义UMCONn位 描述初始状态保留7:5 这些位必须是000 Auto Flow Control (AFC)4 0 = 失能1 = 使能0 保留3:1 这些位必须是000 Request to Send0 如果AFC位是使能的,这个值将被忽略。在这种情况下S3C2410X将自动控制nRTS。如果AFC位是失能的,nRTS必须由软件控制。0 = H电平(不激活nRTS),1 = L电平(激活nRTS) 0 Ø 发送/接收状态寄存器(UTRSTAT) Register Addres

16、s R/W Description Reset Value UTRSTAT0 0x50000010 R UART通道0 Tx/Rx状态寄存器 0x6 UTRSTAT1 0x50004010 R UART通道1 Tx/Rx状态寄存器 0x6 UTRSTAT2 0x50008010 R UART通道2 Tx/Rx状态寄存器0x6 UTRSTATn Bit Description Initial State Transmitter empty 2 当传输缓冲寄存器中没有有效的值传输并且传输转换寄存器中为空的时候,自动置1. 0 = 不为空 1 = 传输器 (传输缓冲器 & 转换寄存器) 为空

17、1 Transmit buffer empty 1 当传输缓冲寄存器中没有有效的值传输时自动置10 = 缓冲寄存器不为空 1 = 为空 (在非FIFO模式中,中断和DMA被请求,在FIFO模式中,只有当TxFIFO的触发级被设置为00的时候,中断和DMA被请求) 如果 UART使用FIFO, 用户应当检查UFSTAT寄存器的Tx FIFO计数位和Tx FIFO满标志位代替检查该位.1 Receive buffer data ready 0 当接受缓冲寄存器中没有有效的值传输时自动置10 = 为空1 = 缓冲寄存器接受到数据 (在非FIFO模式中,中断和DMA被请求) 如果 UART使用FIFO

18、, 用户应当检查UFSTAT寄存器的Rx FIFO计数位代替检查该位0 Ø 错误状态寄存器(UERSTAT)Register Address R/W Description Reset Value UERSTAT0 0x50000014 R UART通道0Rx错误状态寄存器0x0 UERSTAT1 0x50004014 R UART通道1Rx错误状态寄存器0x0 UERSTAT2 0x50008014 R UART通道2Rx错误状态寄存器0x0 UERSTATn Bit Description Initial State Reserved 3 0 = 接受中没有帧错误 1 = 帧错误

19、 (中断请求) 0 Frame Error 2 在接受操作中发生了帧错误后自动置1. 0 =接受中没有帧错误 1 =帧错误 (中断请求)0 Reserved 1 0 =接受中没有帧错误 1 =帧错误 (中断请求)0 Overrun Error 0 在接受操作中发生了溢出错误后自动置10 =接受中没有溢出错误1 =溢出错误 (中断请求) 0 Ø FIFO状态寄存器(UFSTAT)Register Address R/W Description Reset Value UFSTAT0 0x50000018 R UART通道0FIFO状态寄存器 0x00 UFSTAT1 0x5000401

20、8 R UART通道1FIFO状态寄存器0x00 UFSTAT2 0x50008018 R UART通道2FIFO状态寄存器0x00 UFSTATn Bit Description Initial State Reserved 15:10 0 Tx FIFO Full 9 当传输过程中传输FIFO为满的时候自动置1 0 0 = 0-byte Tx FIFO数据15-byte 1 = Full Rx FIFO Full 8 当接收过程中接收FIFO为满的时候自动置1 0 0 = 0-byteRx FIFO数据 15-byte 1 = Full Tx FIFO Count 7:4 Tx FIFO中

21、数据的个数 0 Rx FIFO Count 3:0 Rx FIFO中数据的个数 0 Ø MODEM状态寄存器(UMSTAT)Register Address R/W Description Reset Value UMSTAT0 0x5000001C R UART通道0 Modem状态寄存器0x0 UMSTAT1 0x5000401C R UART通道1 Modem状态寄存器0x0 Reserved 0x5000801C 保留的未定义UMSTAT0 Bit Description Initial State Reserved 3 0 Delta CTS 2 该位指示输入到S3C241

22、0X的nCTS信号自从上次读后已经改变状态0 =没有被改变 1 =被改变0 Reserved 1 0 Clear to Send 0 0 = CTS 信号没有被激活(nCTS pin is high.) 1 = CTS 信号被激活 (nCTS pin is low.) 0 Ø 发送缓冲寄存器(UTXHn)Register Address R/W Description Reset Value UTXH0 0x50000020(L) 0x50000023(B) W (by byte) UART通道0发送缓冲寄存器 UTXH1 0x50004020(L) 0x50004023(B) W

23、(by byte) UART通道1发送缓冲寄存器 UTXH2 0x50008020(L) 0x50008023(B) W (by byte) UART通道3发送缓冲寄存器 UTXHn Bit Description Initial State TXDATAn 7:0 UARTn的传输数据 Ø 接收缓冲寄存器(URXHn)Register Address R/W Description Reset Value URXH0 0x50000024(L) 0x50000027(B) R (by byte) UART通道0接收缓冲寄存器 URXH1 0x50004024(L) 0x500040

24、27(B) R (by byte) UART通道1接收缓冲寄存器 URXH2 0x50008024(L) 0x50008027(B) R (by byte) UART通道2接收缓冲寄存器 URXHn Bit Description Initial State RXDATAn 7:0 UARTn接受的数据 Ø 波特率除数寄存器Register Address R/W Description Reset Value UBRDIV0 0x50000028 R/W波特率除数寄存器0 UBRDIV1 0x50004028 R/W波特率除数寄存器1 UBRDIV2 0x50008028 R/W波

25、特率除数寄存器2 UBRDIVn Bit Description Initial State UBRDIV 15:0 波特率除数值 UBRDIVn >0 实验内容根据前面的原理介绍,写一个程序来测试串口的基本功能。异步串口实验步骤从上面的寄存器介绍可以看到,与UART有关的寄存器共有11*3(因为有3个UART通道)之多。本实验使用UART0。1. 初始化把使用到的的引脚GPH2、GPH3定义为TXD0、RXD0: GPHCON |= 0xa0 GPHUP |= 0x0c (上拉) ULCON0 ( UART channel 0 line control register ):设为0x0

26、3 此值含义为:8个数据位,1个停止位,无校验,正常操作模式(与之相对的是Infra-Red Mode,此模式表示0、1的方式比较特殊)。 UCON0 (UART channel 0 control register ):设为0x245 除了位3:0,其他位都使用默认值。位3:0=0b0101表示:发送、接收都使用“中断或查询方式”本实验使用查询方式。 UFCON0 (UART channel 0 FIFO control register ):设为0x00 每个UART内部都有一个16字节的发送FIFO和接收FIFO,但是本实验不使用FIFO,设为默认值0 UMCON0 (UART chan

27、nel 0 Modem control register ):设为0x00 本实验不使用流控,设为默认值0 UBRDIV0 ( R/W Baud rate divisior register 0 ):设为12 本实验未使用PLL, PCLK=12MHz,设置波特率为115200,则由公式 UBRDIVn = (int)(PCLK / (bps x 16) ) 1 可以计算得UBRDIV0,请使用S3C2410数据手册第314页的误差公式验算一下此波特率是否在可容忍的误差范围之内,如果不在,则需要更换另一个波特率(本实验使用的115200是符合的)。 2. 发送数据UTRSTAT0 ( UART

28、 channel 0 Tx/Rx status register ): 位2:无数据发送时,自动设为1。当我们要使用串口发送数据时,先读此位以判断是否有数据正在占用发送口。 位1:发送FIFO是否为空,本实验未用此位 位0:接收缓冲区是否有数据,若有,此位设为1。本实验中,需要不断查询此位一判断是否有数据已经被接收。 UTXH0 (UART channel 0 transmit buffer register ): 把要发送的数据写入此寄存器。 3. 接收数据UTRSTAT0:如同上述“2、发送数据”所列,我们用到位0 URXH0 (UART channel 0 receive buffer

29、register ): 异步串口实验代码ü 主函数void Main(void) int i,j; sysinit(); /系统初始化代码,在这里不关心它 Uart_Init(0,115200); /初始化串口,115200是波特率定义见下面说明 Uart_Select(0); /选择串口0,标准库函数,可直接调用 Uart_Printf("nWelcom to Uart Test!n"); /在屏幕打印,标准库函数,可直接调用。 Uart_Printf("Baud rate=115200, no flow controln"); i = 0; while(1) Uart_Printf("i=%d n", i+);/从串口格式化输出 for (j=0; j<0xffffff; j+);/延时 ü 主函数中调用的函数的定义void Uart_Init(int pclk, int baud) int i; if(pclk

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论