• 沒有找到結果。

通用异步收发器 (UART)

在文檔中 的 64/80/100 引脚 (頁 189-197)

 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 11

RTSMD: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 7

WAKE:在休眠模式下检测到启动位唤醒使能位

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 3

BRGH:高波特率使能位

1 = BRG 在每个位周期内产生 4 个时钟信号 (4 倍频波特率时钟,高速模式)

0 = BRG 在每个位周期内产生 16 个时钟信号 (16 倍频波特率时钟,标准模式)

bit 2-1

PDSEL1:PDSEL0:奇偶校验和数据选择位 11 = 9 位数据,无奇偶校验

10 = 8 位数据,奇校验 01 = 8 位数据,偶校验 00 = 8 位数据,无奇偶校验

bit 0

STSEL:停止位选择位

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 14

UTXINV: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 8

TRMT:发送移位寄存器空位 (只读)

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 0

URXDA:接收缓冲器中是否有数据位 (只读)

1 = 接收缓冲器中有数据,有至少一个或多个字符可被读取 0 = 接收缓冲器为空

寄存器

16-2: UxSTA:UARTx 状态和控制寄存器 (续)

1: 仅当使能了 IrDA 编码器 (IREN = 1)时,该位的值才影响模块的发送属性。

2: 如果 UARTEN = 1,则外设输入和输出必须配置给可用的

RPn 引脚。更多信息,请参见第 9.4 节 “外设 引脚选择”。

在文檔中 的 64/80/100 引脚 (頁 189-197)