2009 Microchip Technology Inc.
初稿
DS39897B_CN 第 187 页PIC24FJ256GB110 系列
PIC24FJ256GB110 系列
DS39897B_CN 第 188 页
初稿
2009 Microchip Technology Inc.16.1 UART 波特率发生器 (BRG)
UART 模块包含一个专用的 16 位波特率发生器。 UxBRG 寄存器控制一个自由运行的16位定时器的周期。公式16-1 给出了BRGH =
0
时计算波特率的公式。公式
16-1: UART 波特率 (BRGH = 0)
(1,2)例16-1 给出了如下条件下的波特率误差计算:
• FCY = 4 MHz
• 目标波特率 = 9600
最大可能波特率(BRGH = 0)是FCY/16(当UxBRG =
0
时),最小可能波特率是FCY/(16 * 65536)。公式16-2 给出了 BRGH = 1时计算波特率的公式。
公式
16-2: UART 波特率 (BRGH = 1)
(1,2)最大可能波特率(BRGH = 1)是FCY/4(当 UxBRG =
0
时),最小可能波特率是FCY/(4 * 65536)。向UxBRG 寄存器写入新值会使 BRG 定时器复位 (清 零)。这可以确保BRG 无需等待定时器溢出就可以产生 新的波特率。
例
16-1:
波特率误差计算 (BRGH = 0)(1)注
1: F
CY表示指令周期时钟频率 (FOSC/2)。2: 基于 F
CY = FOSC/2,打盹模式和 PLL 被禁止。波特率 = FCY
16 • (UxBRG + 1) FCY
16 • 波特率
UxBRG = – 1
波特率 = FCY
4 • (UxBRG + 1) FCY
4 • 波特率
UxBRG = – 1
注
1: F
CY表示指令周期时钟频率。2: 基于 F
CY = FOSC/2,打盹模式和 PLL 被禁止。目标波特率 = FCY/(16 (UxBRG + 1)) 求解UxBRG 值:
UxBRG = ((FCY/ 目标波特率 )/16) – 1 UxBRG = ((4000000/9600)/16) – 1 UxBRG = 25
计算波特率 = 4000000/(16 (25 + 1))
= 9615
误差 = ( 计算波特率 – 目标波特率 )/ 目标波特率
= (9615 – 9600)/9600
= 0.16%
注
1: 基于 F
CY = FOSC/2,打盹模式和 PLL 被禁止。 2009 Microchip Technology Inc.
初稿
DS39897B_CN 第 189 页PIC24FJ256GB110 系列
16.2 8 位数据模式下的发送
1. 设置UART:
a) 将适当的值写入数据位、奇偶校验位和停止 位。
b) 将适当的波特率值写入 UxBRG 寄存器。
c) 设置发送和接收中断允许位和优先级位。
2. 使能UART。
3. 将UTXEN 位置 1 (该位置 1 后发送操作中断两 个周期)。
4. 将数据字节写入UxTXREG 字的低字节。该值将 被立即传输到发送移位寄存器 (Transmit Shift Register,TSR),且在波特率时钟的下一个上升 沿开始移出串行比特流。
5. 或者,当UTXEN =
0
时,数据字节也可被发送,且随后用户可将UTXEN 置 1。由于波特率时钟 将从清零状态启动,这将立即开始发送串行比特 流。
6. 中断控制位UTXISELx 的设置决定何时产生发送 中断。
16.3 9 位数据模式下的发送
1. 设置UART (如第 16.2 节 “8 位数据模式下的 发送”中所述)。
2. 使能UART。
3. 将UTXEN 位置 1 (产生发送中断)。
4. 仅向UxTXREG 写入一个 16 位的值。
5. 向UxTXREG 写入一个字可触发 9 位数据向 TSR 的传输。串行比特流将会在波特率时钟的第一个 上升沿开始移出。
6. 中断控制位UTXISELx 的设置决定何时产生发送 中断。
16.4 间隔和同步发送序列
下述序列会发送一个报文帧头,包括一个间隔字符和其 后的一个自动波特率同步字节。
1. 将UART 配置为所需的模式。
2. 将UTXEN 和 UTXBRK 置 1 以设置间隔字符。
3. 将一个“虚拟”字符装入UxTXREG 中以启动发 送 (值被忽略)。
4. 向UxTXREG 写入 “55h”;将同步字符装入发 送FIFO 中。
5. 间隔字符发送后,硬件会将UTXBRK 位复位。然 后开始发送同步字符。
16.5 8 位或 9 位数据模式下的接收
1. 设置UART (如第 16.2 节 “8 位数据模式下的 发送”中所述)。
2. 使能UART。
3. 当接收到一个或多个数据字符时,将会根据中断 控制位URXISELx 的设置产生接收中断。
4. 读OERR 位以确定是否发生了溢出错误。OERR 位必须用软件复位。
5. 读UxRXREG。
读取UxRXREG 字符的行为会将下一个字符传送到接收 FIFO 的顶部,其中包含一组新的 PERR 和 FERR 值。
16.6 UxCTS 和 UxRTS 控制引脚的操作
UARTx 允许发送 (UxCTS)和请求发送 (UxRTS)是 两个与UART 模块相关、由硬件控制的引脚。这两个引 脚允许UART 运行在单工模式和流控制模式下。它们用 于 控 制 UART 与数据终端设备 (Data Terminal Equipment,DTE)之间的发送和接收。UxMODE 寄存 器中的UEN1:UEN0 位用来配置这两个引脚。
16.7 红外支持
UART 模块提供两种类型的红外 UART 支持:一种是 IrDA 时钟输出,用于支持外部 IrDA 编码器和解码器(传 统模块支持);另一种是完全实现的IrDA 编码器和解码 器。请注意,由于IrDA 模式需要 16 倍频波特率时钟,
它们仅在BRGH 位(UxMODE<3>)为
0
时才能工作。16.7.1 用于外部IRDA 支持的 IRDA 时钟输出 为了支持外部IrDA 编码器和解码器,可将 BCLKx 引脚
(和UxRTS引脚相同)配置为产生16倍频波特率时钟。
当使能了UART 模块且 UEN1:UEN0 = 11时,BCLKx 引脚将输出16 倍频波特率时钟,用于支持 IrDA 编解码 器芯片。
16.7.2 内置IRDA 编码器和解码器
UART 模块在其内部完全实现了 IrDA 编码器和解码器。
内 置 IrDA 编码器和解码器的功能可通过 IREN 位
(UxMODE<12>)来使能。当使能(IREN = 1)时,接 收引脚 (UxRX)可作为红外接收器的输入引脚。发送 引脚 (UxTX)可作为红外发送器的输出引脚。
PIC24FJ256GB110 系列
DS39897B_CN 第 190 页
初稿
2009 Microchip Technology Inc.寄存器
16-1: UxMODE:UARTx 模式寄存器
R/W-0 U-0 R/W-0 R/W-0 R/W-0 U-0 R/W-0 R/W-0 UARTEN(1) — USIDL IREN(2) RTSMD — UEN1 UEN0
bit 15 bit 8
R/C-0, HC R/W-0 R/W-0, HC R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 WAKE LPBACK ABAUD RXINV BRGH PDSEL1 PDSEL0 STSEL
bit 7 bit 0
图注: C = 可清零位 HC = 硬件清零位
R = 可读位 W = 可写位 U = 未实现位,读为 0
-n = POR 时的值 1 = 置 1 0 = 清零 x = 未知
bit 15
UARTEN:UARTx 使能位
(1)1 = 使能 UARTx ; UARTx 根据 UEN1:UEN0 的定义控制所有 UARTx 引脚 0 = 禁止 UARTx ;由端口锁存器控制所有 UARTx 引脚; UARTx 的功耗最小
bit 14 未实现:读为0
bit 13
USIDL:空闲模式停止位
1 = 当器件进入空闲模式时,模块停止工作 0 = 在空闲模式下模块继续工作
bit 12
IREN: IrDA
®编码器和解码器使能位(2)1 = 使能 IrDA 编码器和解码器
0 = 禁止 IrDA 编码器和解码器
bit 11RTSMD:UxRTS 引脚模式选择位
1 = UxRTS 引脚处于单工模式 0 = UxRTS 引脚处于流控制模式
bit 10 未实现:读为0
bit 9-8
UEN1:UEN0:UARTx 使能位
11 = 使能并使用 UxTX、 UxRX 和 BCLKx 引脚; UxCTS 引脚由端口锁存器控制 10 = 使能并使用 UxTX、 UxRX、 UxCTS 和 UxRTS 引脚
01 = 使能并使用 UxTX、 UxRX 和 UxRTS 引脚; UxCTS 引脚由端口锁存器控制 00 = 使能并使用 UxTX 和 UxRX 引脚; UxCTS 和 UxRTS/BCLKx 引脚由端口锁存器控制
bit 7WAKE:在休眠模式下检测到启动位唤醒使能位
1 = UARTx将继续采样UxRX引脚;在出现下降沿时产生中断,在出现下一个上升沿时由硬件清零该位 0 = 禁止唤醒
bit 6
LPBACK:UARTx 环回模式选择位 1 = 使能环回模式
0 = 禁止环回模式
bit 5
ABAUD:自动波特率使能位
1 = 使能对下一个字符的波特率测量——需要在接收其他数据前接收同步字段 (55h);完成时由硬件
清零0 = 禁止波特率测量或测量已完成
注
1: 如果 UARTEN = 1,则外设输入和输出必须配置给可用的
RPn 引脚。更多信息,请参见第 9.4 节 “外设 引脚选择”。2: 此功能只能在 16 倍频 BRG 模式 (BRGH = 0)下使用。
2009 Microchip Technology Inc.
初稿
DS39897B_CN 第 191 页PIC24FJ256GB110 系列
bit 4
RXINV:接收极性翻转位 1 = UxRX 的空闲状态为 0 0 = UxRX 的空闲状态为 1
bit 3BRGH:高波特率使能位
1 = BRG 在每个位周期内产生 4 个时钟信号 (4 倍频波特率时钟,高速模式)
0 = BRG 在每个位周期内产生 16 个时钟信号 (16 倍频波特率时钟,标准模式)
bit 2-1
PDSEL1:PDSEL0:奇偶校验和数据选择位 11 = 9 位数据,无奇偶校验
10 = 8 位数据,奇校验 01 = 8 位数据,偶校验 00 = 8 位数据,无奇偶校验
bit 0STSEL:停止位选择位
1 = 2 个停止位 0 = 1 个停止位
寄存器
16-1: UxMODE:UARTx 模式寄存器 (续)
注
1: 如果 UARTEN = 1,则外设输入和输出必须配置给可用的
RPn 引脚。更多信息,请参见第 9.4 节 “外设 引脚选择”。2: 此功能只能在 16 倍频 BRG 模式 (BRGH = 0)下使用。
PIC24FJ256GB110 系列
DS39897B_CN 第 192 页
初稿
2009 Microchip Technology Inc.寄存器
16-2: UxSTA:UARTx 状态和控制寄存器
R/W-0 R/W-0 R/W-0 U-0 R/W-0 HC R/W-0 R-0 R-1 UTXISEL1 UTXINV(1) UTXISEL0 — UTXBRK UTXEN(2) UTXBF TRMT
bit 15 bit 8
R/W-0 R/W-0 R/W-0 R-1 R-0 R-0 R/C-0 R-0
URXISEL1 URXISEL0 ADDEN RIDLE PERR FERR OERR URXDA
bit 7 bit 0
图注: C = 可清零位 HC = 硬件清零位
R = 可读位 W = 可写位 U = 未实现位,读为 0
-n = POR 时的值 1 = 置 1 0 = 清零 x = 未知
bit 15,13
UTXISEL1:UTXISEL0:发送中断模式选择位 11 = 保留;不要使用
10 = 当一个字符被传输到发送移位寄存器 (TSR)导致发送缓冲器为空时,产生中断 01 = 当最后一个字符被移出发送移位寄存器;所有发送操作完毕时产生中断
00 = 当一个字符被传输到发送移位寄存器 (这意味着发送缓冲器中至少还有一个字符)时产生中断
bit 14UTXINV:IrDA
®编码器发送极性翻转位(1)IREN = 0:
1 = UxTX 的空闲状态为 0 0 = UxTX 的空闲状态为 1
IREN = 1:1 = UxTX 的空闲状态为 1 0 = UxTX 的空闲状态为 0
bit 12 未实现:读为0
bit 11
UTXBRK:发送间隔位
1 = 在下次发送时发出同步间隔字符——启动位,后跟 12 个 0
位,然后是停止位;完成时由硬件清零0 = 禁止或已完成同步间隔字符的发送
bit 10
UTXEN:发送使能位
(2)1 = 使能发送, UARTx 控制 UxTX 引脚
0 = 禁止发送,中止所有等待的发送,缓冲器复位。由端口控制 UxTX 引脚。
bit 9
UTXBF:发送缓冲器满状态位 (只读)
1 = 发送缓冲器满
0 = 发送缓冲器未满,至少还可写入一个或多个字符
bit 8TRMT:发送移位寄存器空位 (只读)
1 = 发送移位寄存器为空,同时发送缓冲器为空 (上一次发送已完成)
0 = 发送移位寄存器非空,发送在进行中或排队
注
1: 仅当使能了 IrDA 编码器 (IREN = 1)时,该位的值才影响模块的发送属性。
2: 如果 UARTEN = 1,则外设输入和输出必须配置给可用的
RPn 引脚。更多信息,请参见第 9.4 节 “外设 引脚选择”。 2009 Microchip Technology Inc.
初稿
DS39897B_CN 第 193 页PIC24FJ256GB110 系列
bit 7-6
URXISEL1:URXISEL0:接收中断模式选择位
11 = 当 RSR 传输使接收缓冲器为满时 (即,有 4 个数据字符),中断标志位置 1 10 = 当 RSR 传输使接收缓冲器 3/4 满时 (即,有 3 个数据字符),中断标志位置 1
0x = 当接收到一个字符且 RSR 的内容被传输给接收缓冲器时,中断标志位置 1。接收缓冲器有一个或
多个字符。bit 5
ADDEN:地址字符检测位 (接收数据的第 8 位 = 1)
1 = 使能地址检测模式。如果没有选择 9 位模式,这个控制位将无效。
0 = 禁止地址检测模式
bit 4
RIDLE:接收器空闲位 (只读)
1 = 接收器空闲 0 = 接收器工作
bit 3
PERR:奇偶校验错误状态位 (只读)
1 = 检测到当前字符 (在接收 FIFO 顶部的字符)的奇偶校验错误 0 = 未检测到奇偶校验错误
bit 2
FERR:帧错误状态位 (只读)
1 = 检测到当前字符 (在接收 FIFO 顶部的字符)的帧错误 0 = 未检测到帧错误
bit 1
OERR:接收缓冲器溢出错误状态位 (清零 / 只读)
1 = 接收缓冲器已溢出
0 = 接收缓冲器未溢出。清零原来置1的OERR位(1
→0的跳变)将使接收缓冲器和RSR复位到空状态
bit 0URXDA:接收缓冲器中是否有数据位 (只读)
1 = 接收缓冲器中有数据,有至少一个或多个字符可被读取 0 = 接收缓冲器为空
寄存器
16-2: UxSTA:UARTx 状态和控制寄存器 (续)
注