收藏 分享(赏)

深刻理解UART.doc

上传人:HR专家 文档编号:7045019 上传时间:2019-05-04 格式:DOC 页数:11 大小:236KB
下载 相关 举报
深刻理解UART.doc_第1页
第1页 / 共11页
深刻理解UART.doc_第2页
第2页 / 共11页
深刻理解UART.doc_第3页
第3页 / 共11页
深刻理解UART.doc_第4页
第4页 / 共11页
深刻理解UART.doc_第5页
第5页 / 共11页
点击查看更多>>
资源描述

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

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

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

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

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

6、寄存器(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/160)。tUPCLK = (UBRDIVn + 1) x 16 x 10 / PCLK 实际的传输

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

8、0x00 ULCONn 位 描述 初始状态保留 7 0 Infra-Red Mode 6 决定是否用红外模式。0 = 正常模式操作1 = 红外Tx/Rx模式0 Parity Mode 5:3 指定奇偶产生的类型并在UART的传输与接收操作中检查。0xx = 非奇偶100 = 奇101 = 偶110 = 强制奇偶/选中为1 111 = 强制奇偶/选中为0 000 Number of Stop Bit2 指定多少个停止位将被使用对于帧结束信号。0 = 每帧一个停止位1 = 每帧两个停止位0 Word Length 1:0 显示每帧传输或接收的数据位的数目。00 = 5位,01 = 6位10 = 7

9、位,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) : UBRDIVn = (int)(UCLK / (b

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

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

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

13、对于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 Level 7:6 决定传输FIFO的触发电平。00 = 空,01 = 4字节10 = 8字节,11 = 12字节00 Rx FIFO Tri

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

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

16、ss 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 = 传输器 (传输缓冲器 sysinit(); /系

17、统初始化代码,在这里不关心它Uart_Init(0,115200); /初始化串口,115200是波特率定义见下面说明Uart_Select(0); /选择串口0,标准库函数,可直接调用Uart_Printf(“nWelcom to Uart Test!n“); /在屏幕打印,标准库函数,可直接调用。Uart_Printf(“Baud rate=115200, no flow controln“);10i = 0; while(1)Uart_Printf(“i=%d n“, i+); /从串口格式化输出for (j=0; j0xffffff; j+); /延时 主函数中调用的函数的定义void

18、 Uart_Init(int pclk, int baud) int i;if(pclk = 0)pclk = PCLK; /参数 pclk 为 0 表示选用的时钟为 PCLK。rUFCON0 = 0x0; /UART 通道 0 FIFO control register, FIFO 禁止,不使用。rUFCON1 = 0x0; /UART 通道 1 FIFO control register, FIFO 禁止,不使用。rUFCON2 = 0x0; /UART 通道 2 FIFO control register, FIFO 禁止,不使用。rUMCON0 = 0x0; /UART 通道 0 MO

19、DEM control register, AFC 禁止,不使用。rUMCON1 = 0x0; /UART 通道 1 MODEM control register, AFC 禁止,不使用。/UART0rULCON0 = 0x3; /Line control register,对照寄存器的定义,可以知道这样赋值定义了数据传输格式:工作在正常模式,没有校验位,1 个停止位每帧,每帧 8 位数据。rUCON0 = 0x245; / 发送和接收都采用查询或中断模式。rUBRDIV0=( (int)(pclk/16./baud+0.5) -1 ); /波特率 divisior register 0,根据

20、公式计算,注意要验证误差范围,误差计算公式文档中已经给出。 /UART1,与 UART0 相似rULCON1 = 0x3;rUCON1 = 0x245;rUBRDIV1=( (int)(pclk/16./baud) -1 );/UART2,与 UART0 相似rULCON2 = 0x3;rUCON2 = 0x245;rUBRDIV2=( (int)(pclk/16./baud) -1 ); for(i=0;i100;i+); /延时一小会儿该实验成功后的结果可参看文件夹中的图片。因此,在异步串口实验中,我们需要做的就是完成串口的初始化工作,设定各个控制寄存器,波特率等等。有兴趣的读者可以查看该实验中所调用的库函数的具体实现,可以帮助读者理解更多的串口实现的具体细节。查看方法:用 ADS 打开该实验的工程文件,在主函数中找到标准库函数的调用处,鼠标右键点击,选择 Go to function definition of XXX,即可到达指定的库函数定义处。11

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报