ADuC703x系列LIN波特率计算
扫描二维码
随时随地手机看文章
简介
本应用笔记旨在让用户熟悉用于ADI公司ADuC703x系列器件UART通信的除数值COMDIV0、COMDIV1和COMDIV2的计算。本应用笔记假定用户熟悉本地互连网络(LIN) 2.0规范。
本文分为以下三部分:
● LIN帧报头:本部分说明LIN帧报头和同步字节。
● LIN波特率计算:本部分说明一种使用LIN硬件同步(LHS)功能来计算UART除数值的方法。
● LIN波特率计算C代码示例:本部分提供"LIN波特率计算"部分所述计算的C代码实现示例。
LIN帧报头
标准LIN通信帧如图1所示,它分为如下部分:断开符号、同步字节、受保护标识符、数据和校验和。
图1. LIN帧
●断开符号表示LIN分包的开始。
●同步字节标定从机的波特率。
●受保护标识符用于识别从机。
●校验和既可以是根据发送数据计算的传统校验和,也可以是根据受保护标识符和数据计算的扩展校验和。
图2更加详细地显示了同步字节,它是以主机所需的波特率发送的字节0xAA.确定主机比特率的标准方法是测量从第一个下降沿到第五个下降沿的时间,然后将此值除以8,便得到所需的比特率。此值可以用于计算UART除数值。具体计算详见后续部分。本应用笔记假设用户已设置LHS MMR来为同步字节的全部8位计时(LHSCON1 = 0x62)。
图2. LIN同步字节
LIN波特率计算
使用LHS系统,用户在收到同步字节后会得到LHSVAL0中的值。LHSVAL0包含8 TBIT的等效值,此值用于产生UART除数COMDIV0、COMDIV1和小数除数COMDIV2的值。有关UART的更多信息,请参阅相关ADuC703x数据手册。
为利用标准波特率发生器计算COMDIV0/COMDIV1值,需使用如下基本UART方程式:
其中:
DL为COMDIV0和COMDIV1的值。
CD为时钟分频比。
就LHSVAL0而言,所需的波特率如下:
(LHSVAL0采用内部5.12 MHz时钟,假设将LHSCON1配置为测量8 TBIT.)将标准波特率方程式与所需波特率方程式合并:
仅使用标准波特率发生器方程式可得出所需的COMDIV0/ COMDIV1值。
为提高精度,使用ADuC703x小数除数和以上针对标准波特率发生器计算的DL值(COMDIV0/COMDIV1)。使用小数除数的方程式如下:
其中,M和N为COMDIV2值。
替换波特率:
上式可简化为:
为减少小数除数计算所用的复杂数学计算,将DL的值(COMDIV0/COMDIV1)限制为2的幂数。例如,如果DL = 17,则计算N时使用DL = 16 = 2 4,这将自动调整N的值以补偿DL修改所引入的误差。
如果将M设为1
例如,对于19,200 bps的波特率,如果CD = 0、DL = 33、LHSVAL0 = 2133,则N = 21,波特率为19,197 bps;如果使用DL = 32、N = 85,则波特率为19,203 bps.
LIN波特率计算C代码示例
使用C语言编程时,上述方程式可以简单地利用《和》移位命令编写。