<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
關(guān) 閉

新聞中心

EEPW首頁(yè) > 工控自動(dòng)化 > 設計應用 > 計算機多設備接口波特率不匹配的研究

計算機多設備接口波特率不匹配的研究

作者: 時(shí)間:2010-07-06 來(lái)源:網(wǎng)絡(luò ) 收藏

引言

本文引用地址:http://dyxdggzs.com/article/202529.htm

  不同在傳輸數據時(shí)所要求的頻率往往不同,而在一些僅使用一個(gè)晶振的系統上,如果一個(gè)的頻率完全匹配,那么其他所使用的頻率往往就不完全符合要求。例如,為了實(shí)現USB總線(xiàn)的48 MHz的傳輸頻率,一般可以用12 MHz的晶振來(lái)倍頻得到,而12 MHz的晶振在進(jìn)行串口通信時(shí)由于與標準不成倍數關(guān)系,因而期望和實(shí)際往往不同。
在波特率較低時(shí),這種誤差影響不大。例如,期望波特率為57 600 bps時(shí),實(shí)際波特率為57 692 bps,傳輸正常;而當期望波特率高達115 200 bps時(shí),則實(shí)際波特率為125 000 bps,誤差較大。實(shí)驗結果表明,此時(shí)如不對其進(jìn)行修正,則無(wú)法進(jìn)行正確傳輸。

  筆者通過(guò)實(shí)驗研究證明,通過(guò)使用小數波特率發(fā)生器,完全可以像低波特率時(shí)一樣正確地傳輸,實(shí)現了多位小數的分數逼近法的算法,避免了人工計算過(guò)程,徹底實(shí)現了波特率計算和修正的自動(dòng)化。

1 小數波特率發(fā)生器工作原理

  當外部晶振或者VPB時(shí)鐘值不是標準波特率的整數倍時(shí),波特率的設定往往會(huì )出現偏差。通過(guò)小數波特率發(fā)生器則可減小或者消除這種偏差。

  下面以L(fǎng)PC214x處理器的串口UART1為例闡述小數波特率發(fā)生器的工作原理。要使用小數波特率發(fā)生器,需要設置小數分頻寄存器(U1FDR),該寄存器控制產(chǎn)生波特率的時(shí)鐘分頻器。

  預分頻器接收VPB時(shí)鐘,并經(jīng)過(guò)指定的小數要求產(chǎn)生一個(gè)輸出時(shí)鐘,小數由該寄存器的值決定。

  在不使用小數波特率發(fā)生器時(shí),UART1波特率由下式計算:

UART1baudrate = PCLK/(16×(256×U1DLM+U1DLL))

  當使用小數波特率發(fā)生器時(shí),則由下式計算:

UART1baudrate = [PCLK/(16 ×(256 × U1DLM + U1DLL))] ×(MulVal / (MulVal + DivAddVal)

  其中PCLK為VPB總線(xiàn)時(shí)鐘,U1DLM和U1DLL為標準的UART1波特率除數寄存器??梢钥闯?,MulVal / (MulVal + DivAddVal)就是用來(lái)修正波特率的小數值,被稱(chēng)作校準系數。它由兩個(gè)參數構成:DivAddVal(波特率生成欲分頻除數值)和MulVal(波特率預分頻乘數值)。DivAddVal和MulVal都必須為整數,且滿(mǎn)足:

1 ≤ MulVal≤ 15,0 ≤ DivAddVal ≤ 15。

  根據以上公式很容易計算串口波特率,但是實(shí)際應用中,更多的是在使用非標準晶振時(shí)確定波特率校準系數,即設定U1FDR寄存器DivAddVal和MulVal的值。確定波特率校準系數可以分如下3步進(jìn)行:

① 確定除數鎖存器的值: 根據需要的波特率bps,按照沒(méi)有校準系數的波特率計算公式確定除數鎖存器的值(DLM,DLL)。由于采用非標準晶振,得到的結果通常為小數。無(wú)論小數值大小,均舍棄小數部分的值,對結果進(jìn)行取整操作(不是四舍五入),得到除數鎖存器的值。
② 確定校準前的波特率: 將①得到的除數值(DLM,DLL)代入不帶校準系數的串口波特率計算公式,得到未經(jīng)過(guò)校準的波特率BPS。
③ 確定校準系數p: p=bps/BPS=MulVal/(MulVal+DivAddVal)
根據限制條件1≤MulVal≤15和0≤DivAddVal≤15,尋找合適的值,使得到誤差盡可能小的校準系數。

2 多位小數的分數逼近算法

(1) 傳統獲取MulVal和DivAddVal整數值的方法

  假設系統晶振為12 MHz,擬設定波特率bps為115 200 bps,根據前面所述校準系數的確定過(guò)程,12 000 000/(16×115 200)=6.51,取6為除數值,那么BPS=12 000 000/[16×(256×0+6)]=125 000 bps,所以p=bps/BPS=0.921 6。

  傳統獲取MulVal和DivAddVal整數值的方法大多依靠經(jīng)驗技巧或者反復試驗。如參考文獻2《深入淺出ARM7LPC214x下》中,第77頁(yè)描述的那樣:


上一頁(yè) 1 2 下一頁(yè)

關(guān)鍵詞: 計算機 波特率 設備 接口

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>