没有合适的资源?快使用搜索试试~ 我知道了~
通用异步收发器(UART)学习指南
需积分: 9 9 下载量 161 浏览量
2009-11-27
12:22:33
上传
评论 1
收藏 402KB PDF 举报
温馨提示
试读
28页
文章介绍了通用异步收发器(UART)学习,其中包括函数介绍,以及通用异步收发器(UART)的原理,还有一些例程,很重要,很清楚。
资源推荐
资源详情
资源评论
广州周立功单片机发展有限公司 Tel:(020)38730976 38730977 Fax:38730925 http://www.zlgmcu.com
目 录
第 1 章 通用异步收发器(UART).............................................................................1
1.1 UART总体特性............................................................................................................2
1.2 UART功能概述............................................................................................................3
1.3 UART库函数................................................................................................................7
1.4 UART例程..................................................................................................................16
i
广州周立功单片机发展有限公司 Tel:(020)38730976 38730977 Fax:38730925 http://www.zlgmcu.com
第1章 通用异步收发器(UART)
表 1.1 UART 库函数索引
函 数 原 型 页码
void UARTConfigSetExpClk(unsigned long ulBase,
unsigned long ulUARTClk,
unsigned long ulBaud,
unsigned long ulConfig)
7
void UARTConfigGetExpClk(unsigned long ulBase,
unsigned long ulUARTClk,
unsigned long *pulBaud,
unsigned long *pulConfig)
8
#define UARTConfigSet(a, b, c) UARTConfigSetExpClk(a, SysCtlClockGet( ), b, c) 8
#define UARTConfigGet(a, b, c) UARTConfigGetExpClk(a, SysCtlClockGet( ), b, c) 8
void UARTParityModeSet(unsigned long ulBase, unsigned long ulParity) 9
unsigned long UARTParityModeGet(unsigned long ulBase) 9
void UARTFIFOLevelSet(unsigned long ulBase, unsigned long ulTxLevel, unsigned long ulRxLevel) 9
void UARTFIFOLevelGet(unsigned long ulBase,
unsigned long *pulTxLevel,
unsigned long *pulRxLevel)
10
void UARTEnable(unsigned long ulBase) 10
void UARTDisable(unsigned long ulBase) 10
void UARTEnableSIR(unsigned long ulBase, tBoolean bLowPower) 11
void UARTDisableSIR(unsigned long ulBase) 11
void UARTDMAEnable(unsigned long ulBase, unsigned long ulDMAFlags) 11
void UARTDMADisable(unsigned long ulBase, unsigned long ulDMAFlags) 11
void UARTCharPut(unsigned long ulBase, unsigned char ucData) 12
long UARTCharGet(unsigned long ulBase) 12
tBoolean UARTSpaceAvail(unsigned long ulBase) 12
tBoolean UARTCharsAvail(unsigned long ulBase) 12
tBoolean UARTCharPutNonBlocking(unsigned long ulBase, unsigned char ucData) 12
long UARTCharGetNonBlocking(unsigned long ulBase) 13
#define UARTCharNonBlockingPut(a, b) UARTCharPutNonBlocking(a, b) 13
#define UARTCharNonBlockingGet(a) UARTCharGetNonBlocking(a) 13
tBoolean UARTBusy(unsigned long ulBase) 13
void UARTBreakCtl(unsigned long ulBase, tBoolean bBreakState) 14
void UARTIntEnable(unsigned long ulBase, unsigned long ulIntFlags) 14
void UARTIntDisable(unsigned long ulBase, unsigned long ulIntFlags) 15
void UARTIntClear(unsigned long ulBase, unsigned long ulIntFlags) 15
unsigned long UARTIntStatus(unsigned long ulBase, tBoolean bMasked) 15
void UARTIntRegister(unsigned long ulBase, void(*pfnHandler)(void)) 15
1
广州周立功单片机发展有限公司 Tel:(020)38730976 38730977 Fax:38730925 http://www.zlgmcu.com
void UARTIntUnregister(unsigned long ulBase) 15
1.1 UART 总体特性
1. UART 简介
计算机与外部设备的连接,基本上使用了两类接口:串行接口与并行接口。并行接口是
指数据的各个位同时进行传送,其特点是传输速度块,但当传输距离远、位数又多时,通信
线路变复杂且成本提高。串行通信是指数据一位位地顺序传送,其特点是适合于远距离通信,
通信线路简单,只要一对传输线就可以实现双向通信,从而大大降低了成本。
串行通信又分为异步与同步两类。UART(Universal Asynchronous Receiver/Transmitter,
通用异步收发器)正是设备间进行异步通信的关键模块。它的重要作用如下所示:
z 处理数据总路线和串行口之间的串/并、并/串转换;
z 通信双方只要采用相同的帧格式和波特率,就能在未共享时钟信号的情况下,仅用
两根信号线(Rx 和 Tx)就可以完成通信过程;
z 采用异步方式,数据收发完毕后,可通过中断或置位标志位的方式通知微控制器进
行处理,大大提高微控制器的工作效率。
若加入一个合适的电平转换器,如 SP3232E、SP3485,UART 还能用于 RS-232、RS-485
通信,或与计算机的端口连接。UART 应用非常广泛,手机、工业控制、PC 等应用中都要
用到 UART。
2. Stellaris 系列 ARM 的 UART 特性
Stellaris(群星)系列 ARM 的 UART 具有完全可编程、16C550 型串行接口的特性(但
是并不兼容)。Stellaris 系列 ARM 含有 1 至 3 个 UART 模块。每个 UART 都具有以下特性:
独立的发送 FIFO 和接收 FIFO(First-In First-Out,先进先出)
z FIFO 长度可编程,包括提供传统双缓冲接口的 1 字节深的操作
z FIFO 触发深度为:1/8、1/4、1/2、3/4、7/8
z 可编程的波特率发生器,允许速率高达 3.125Mbps(兆位每秒)
z 标准的异步通信:起始位、停止位和奇偶校验位
z 检测错误的起始位
z 线中止(Line-break)的产生和检测
z 完全可编程的串行接口特性:
5、6、7 或 8 个数据位
偶校验、奇校验、粘着或无奇偶校验位的产生/检测
产生 1 或 2 个停止位(使用 2 个停止位可以降低误码率)
z 某些型号集成 IrDA 串行红外(SIR)编码器/解码器,具有以下特性:
用户可以根据需要对 IrDA 串行红外(SIR)或 UART 输入/输出端进行编程
IrDA SIR 编码器/解码器功能模块在半双工时其数据速率可高达 115.2Kbps
位持续时间(bit duration)为 3/16(正常)或 1.41~2.23µs(低功耗)
如图 1.1 所示,为 Stellaris 系列 ARM 芯片 UART 与电脑 COM 端口连接的典型应用电
路。CZ1 和 CZ2 是电脑 DB9 形式的 COM 接口,U1 是 Exar(原 Sipex)公司的 UART 转
RS-232C 的接口芯片 SP3232E,可在 3.3V 下工作。
注意:接在 UART 端口的上拉电阻请不要省略
,否则可能会影响到通信的可靠性。
2
广州周立功单片机发展有限公司 Tel:(020)38730976 38730977 Fax:38730925 http://www.zlgmcu.com
图 1.1 UART 与电脑连接的典型应用电路
1.2 UART 功能概述
1. 发送/接收逻辑
发送逻辑对从发送 FIFO 读取的数据执行“并→串”转换。控制逻辑输出起始位在先的
串行位流,并且根据控制寄存器中已编程的配置,会面紧跟着数据位(注意:最低位 LSB
先输出)、奇偶校验位和停止位。参见图 1.2 的描述。
在检测到一个有效的起始脉冲后,接收逻辑对接收到的位流执行“串→并”转换。此外
还会对溢出错误、奇偶校验错误、帧错误和线中止(line-break)错误进行检测,并将检测
到的状态附加到被写入接收 FIFO 的数据中。
图 1.2 UART 字符帧(LSB 在前)
2. 波特率的产生
波特率除数(baud-rate divisor)是一个 22 位数,它由 16 位整数和 6 位小数组成。波特
率发生器使用这两个值组成的数字来决定位周期。通过带有小数波特率的除法器,在足够高
的系统时钟速率下,UART 可以产生所有标准的波特率,而误差很小。
波特率除数公式:
BRD = BRDI.BRDF = SystemClock/(16×BaudRate)
其中:
BRD 是 22 位的波特率除数,由 16 位整数和 6 位小数组成
BRDI 是 BRD 的整数部分
BRDF 是 BRD 的小数部分
SystemClock 是系统时钟(UART 模块的时钟直接来自 SystemClock)
3
广州周立功单片机发展有限公司 Tel:(020)38730976 38730977 Fax:38730925 http://www.zlgmcu.com
BaudRate 是波特率(9600,38400,115200 等)
以 6MHz 晶振作为系统时钟、波特率取 115200 为例,误差仅 0.16%,完全符合要求。
利用《Stellaris 外设驱动库》配置 UART 的方法是采用函数 UARTConfigSet( )。以 UART0
为例,设置波特率为 9600、数据位 8、停止位 1、无校验的方法如下:
UARTConfigSet(UART0_BASE, // 配置 UART0
9600, // 波特率:9600
UART_CONFIG_WLEN_8 | // 数据位:8 位
UART_CONFIG_STOP_ONE | // 停止位:1 位
UART_CONFIG_PAR_NONE); // 校验位:无
3. 数据收发
发送时,数据被写入发送 FIFO。如果 UART 被使能,则会按照预先设置好的参数(波
特率、数据位、停止位、校验位等)开始发送数据,一直到发送 FIFO 中没有数据。一旦向
发送 FIFO 写数据(如果 FIFO 未空),UART 的忙标志位 BUSY 就有效,并且在发送数据期
间一直保持有效。BUSY 位仅在发送 FIFO 为空,且已从移位寄存器发送最后一个字符,包
括停止位时才变无效。即 UART 不再使能,它也可以指示忙状态。BUSY 位的相关库函数
是 UARTBusy( ),参见表 1.24 的描述。
在 UART 接收器空闲时,如果数据输入变成“低电平”,即接收到了起始位,则接收计
数器开始运行,并且数据在 Baud16 的第 8 个周期被采样。如果 Rx 在 Baud16 的第 8 周期仍
然为低电平,则起始位有效,否则会被认为是错误的起始位并将其忽略。
如果起始位有效,则根据数据字符被编程的长度,在 Baud16 的每第 16 个周期对连续
的数据位(即一个位周期之后)进行采样。如果奇偶校验模式使能,则还会检测奇偶校验位。
最后,如果 Rx 为高电平,则有效的停止位被确认,否则发生帧错误。当接收到一个完
整的字符时,将数据存放在接收 FIFO 中。
4. 中断控制
出现以下情况时,可使 UART 产生中断:
z FIFO 溢出错误
z 线中止错误(line-break,即 Rx 信号一直为 0 的状态,包括校验位和停止位在内)
z 奇偶校验错误
z
帧错误(停止位不为 1)
z 接收超时(接收 FIFO 已有数据但未满,而后续数据长时间不来)
z 发送
z 接收
由于所有中断事件在发送到中断控制器之前会一起进行“或运算”操作,所以任意时刻
UART 只能向中断产生一个中断请求。通过查询中断状态函数 UARTIntStatus( ),软件可以
在同一个中断服务函数里处理多个中断事件(多个并列的 if 语句)。
5. FIFO 操作
FIFO 是“First-In First-Out”的缩写,意为“先进先出”,是一种常见的队列操作。
Stellaris 系列 ARM 的 UART 模块包含有 2 个 16 字节的 FIFO:一个用于发送,另一个
用于接收。可以将两个 FIFO 分别配置为以不同深度触发中断。可供选择的配置包括:1/8、
1/4、1/2、3/4 和 7/8 深度。例如,如果接收 FIFO 选择 1/4,则在 UART 接收到 4 个数据时
4
剩余27页未读,继续阅读
资源评论
xueloveyangjing
- 粉丝: 2
- 资源: 30
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功