簡介
本應用筆記旨在讓用戶熟悉用于ADI公司ADuC703x系列器件UART通信的除數(shù)值COMDIV0、COMDIV1和COMDIV2的計算。本應用筆記假定用戶熟悉本地互連網(wǎng)絡(LIN) 2.0規(guī)范。
本文分為以下三部分:
● LIN幀報頭:本部分說明LIN幀報頭和同步字節(jié)。
● LIN波特率計算:本部分說明一種使用LIN硬件同步(LHS)功能來計算UART除數(shù)值的方法。
● LIN波特率計算C代碼示例:本部分提供"LIN波特率計算"部分所述計算的C代碼實現(xiàn)示例。
LIN幀報頭
標準LIN通信幀如圖1所示,它分為如下部分:斷開符號、同步字節(jié)、受保護標識符、數(shù)據(jù)和校驗和。
圖1. LIN幀
●斷開符號表示LIN分包的開始。
●同步字節(jié)標定從機的波特率。
●受保護標識符用于識別從機。
●校驗和既可以是根據(jù)發(fā)送數(shù)據(jù)計算的傳統(tǒng)校驗和,也可以是根據(jù)受保護標識符和數(shù)據(jù)計算的擴展校驗和。
圖2更加詳細地顯示了同步字節(jié),它是以主機所需的波特率發(fā)送的字節(jié)0xAA.確定主機比特率的標準方法是測量從第一個下降沿到第五個下降沿的時間,然后將此值除以8,便得到所需的比特率。此值可以用于計算UART除數(shù)值。具體計算詳見后續(xù)部分。本應用筆記假設用戶已設置LHS MMR來為同步字節(jié)的全部8位計時(LHSCON1 = 0x62)。
圖2. LIN同步字節(jié)
LIN波特率計算
使用LHS系統(tǒng),用戶在收到同步字節(jié)后會得到LHSVAL0中的值。LHSVAL0包含8 TBIT的等效值,此值用于產(chǎn)生UART除數(shù)COMDIV0、COMDIV1和小數(shù)除數(shù)COMDIV2的值。有關(guān)UART的更多信息,請參閱相關(guān)ADuC703x數(shù)據(jù)手冊。
為利用標準波特率發(fā)生器計算COMDIV0/COMDIV1值,需使用如下基本UART方程式:
其中:
DL為COMDIV0和COMDIV1的值。
CD為時鐘分頻比。
就LHSVAL0而言,所需的波特率如下:
?。↙HSVAL0采用內(nèi)部5.12 MHz時鐘,假設將LHSCON1配置為測量8 TBIT.)將標準波特率方程式與所需波特率方程式合并:
僅使用標準波特率發(fā)生器方程式可得出所需的COMDIV0/ COMDIV1值。
為提高精度,使用ADuC703x小數(shù)除數(shù)和以上針對標準波特率發(fā)生器計算的DL值(COMDIV0/COMDIV1)。使用小數(shù)除數(shù)的方程式如下:
其中,M和N為COMDIV2值。
替換波特率:
上式可簡化為:
為減少小數(shù)除數(shù)計算所用的復雜數(shù)學計算,將DL的值(COMDIV0/COMDIV1)限制為2的冪數(shù)。例如,如果DL = 17,則計算N時使用DL = 16 = 2 4,這將自動調(diào)整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語言編程時,上述方程式可以簡單地利用《和》移位命令編寫。