第三章 在 dsPIC30F 器件上实现自动波特率检测 00962a_cn.pdfVIP

  • 16
  • 0
  • 约 16页
  • 2017-06-27 发布于湖北
  • 举报

第三章 在 dsPIC30F 器件上实现自动波特率检测 00962a_cn.pdf

AN962 在 dsPIC30F 器件上实现自动波特率检测 信号 作者: Mike Garbutt Microchip Technology UART 信号的发送顺序实行低位在先的原则。发送字节 中首先是起始位 (逻辑零),末尾则为停止位 (逻辑 介绍 1)。发送字节通常具有8 个数据位,但也可使用不同长 度的数据位,在数据位之后可加入奇偶校验位。所有这 目前所有dsPIC30F 器件都拥有一个具备自动波特率检 些都将对自动波特率检测的计算造成影响。但应事先知 测能力的 UART 外设。UART 接收引脚(RX 引脚)上 道数据的格式。 的信号能在内部传送至一个输入捕捉模块以获得输入信 由于存在起始位和停止位,因此存在至少两个脉冲边 号边沿的时序。根据该时序,应用程序能正确设置 沿,但也可能是 10 个或更多。以数据 0x55 为例,如 UART 的波特率。 图 1 所示,它拥有 10 个脉冲边沿。 当输入数据的波特率以及处理器的振荡器频率未知时, 自动波特率检测是很有用的。由于RC 振荡器经常不够 图 1: 对应 0x55 的 UART 信号 精确且随时间变化会产生漂移,因此采用 RC 振荡器的 系统非常适合采用自动波特率检测。 D0 D1 D2 D3 D4 D5 D6 D7 方法 起始 停止 t0 = 0 t1 t2 t3 t4 t5 t6 t7 t8 t9 自动波特率检测的方法取决于接收到的已知数据。为实 现自动波特率检测,通常可使用通信协议发送特定数 据。根据已接收数据的时序可计算 U1BRG 或 U2BRG 时序和采样 寄存器的值。上述寄存器用来设定 UART 的波特率。 本应用笔记中的两个示例都使用输入数据 0x55 (ASCII 在记录了脉冲边沿的时序并去除偏移量 t0 后,可利用公 字符 “U”)来计算波特率发生器的值。该特定数据字 式 1 来计算 UxBRG 寄存器的值。在附录A 中采用线性 节提供了最大数目的脉冲边沿,因此具有最大的准确 回归算法对该公式进行了推导。计算是在最后一个脉冲 度。实际上可采用任何数据字节,此时波特率计算将会 边沿被记录后进行的,且应在下一个字节的起始位出现 自动适应被测数据。通常,数据中出现的边沿(位状态 前完成以避免造成数据丢失。因此,计算过程须设定时 变化)越多,则结果会越精确。 间限制并应对其进行检查。在某些情况下,有必要使用 一种具有较快执行速度的较简便计算方法。此时,同样 需考虑误差检查所需的时间。 公式 1 : UxBRG 线性回归计算 2(t + 2t + 3t + …+ 9t )– 9(t + t + t + …+ t )

文档评论(0)

1亿VIP精品文档

相关文档