<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 手機(jī)與無線通信 > 設(shè)計(jì)應(yīng)用 > Modbus通信協(xié)議的FPGA實(shí)現(xiàn)

          Modbus通信協(xié)議的FPGA實(shí)現(xiàn)

          作者: 時(shí)間:2010-08-11 來源:網(wǎng)絡(luò) 收藏


          3.3 發(fā)送模塊
          發(fā)送模塊包括發(fā)送控制模塊,發(fā)送機(jī)模塊,發(fā)送狀態(tài)寄存器模塊等。
          發(fā)送機(jī)模塊是基于普通UART發(fā)送原理設(shè)計(jì),其發(fā)送過程如下:
          (1)等待TDRE=‘1’,即等待發(fā)送數(shù)據(jù)寄存器(TDR)為空,隨后TDR中載入一個(gè)字節(jié)數(shù)據(jù),并把TDRE清零。
          (2)根據(jù)波特率設(shè)置Sel_baud[1..0]對(duì)TDR里的數(shù)據(jù)進(jìn)行奇偶校驗(yàn)計(jì)算。
          (3)把TDR里的數(shù)據(jù)放入發(fā)送移位寄存器TSR的1~8位,TSR第O位放起始位(‘O’),TSR第9位放入奇偶校驗(yàn)位或者停止位(‘1’)。
          (4)通過對(duì)TSR右移,一位一位地發(fā)送出9位數(shù)據(jù)比特,最后發(fā)送停止位(‘1’)。
          3.4 CRC模塊
          CRC模塊包括接收CRC控制模塊,發(fā)送CRC控制模塊,CRC產(chǎn)生模塊三部分。


          生成CRC的過程為:
          (1)將一個(gè)16位寄存器裝入十六進(jìn)制FFFF(全1),將之稱作CRC寄存器。
          (2)將報(bào)文的第一個(gè)8位字節(jié)與16位CRC寄存器的低字節(jié)異或,結(jié)果置于CRC寄存器。
          (3)將CRC寄存器右移1位(向LSB方向),MSB充零,提取并檢測LSB。
          (4)如果LSB為0:重復(fù)步驟(3)(另一次移位);如果LSB為1:對(duì)CRC寄存器異或多項(xiàng)式值0xA00l(1010000000000001)。
          (5)重復(fù)步驟(3)和(4),直到完成8次移位。當(dāng)做完此操作后,將完成對(duì)8位字節(jié)的完整操作。
          (6)對(duì)報(bào)文中的下一個(gè)字節(jié)重復(fù)步驟(2)~(5),繼續(xù)此操作直至所有報(bào)文被處理完畢。
          (7)CRC寄存器中的最終內(nèi)容為CRC值。


          這種方式計(jì)算CRC值的時(shí)間比其他方式計(jì)算CRC(比如查表法等)的時(shí)間稍微要長,但是它節(jié)省了資源,比如查表法計(jì)算CRC需要一個(gè)數(shù)組來存放所有可能的CRC結(jié)果值。圖5為對(duì)數(shù)據(jù)串“010300000001”(十六進(jìn)制)CRC-16運(yùn)算的仿真時(shí)序圖,時(shí)鐘周期為50 MHz,由圖可見,整個(gè)計(jì)算時(shí)間在2.5 μs內(nèi),估算一個(gè)含有240個(gè)字符的消息,CRC校驗(yàn)總時(shí)間約為2.5μs×(240/6)=100μs,這樣長的校驗(yàn)計(jì)算時(shí)間對(duì)于來說是完全可以接受的。

          4 基于該接口的MODBUS從站協(xié)處理器
          協(xié)處理器框圖如圖6所示。


          從站協(xié)處理器控制模塊程序控制過程如下:
          (1)置CE_為‘1’,把MAX485芯片信號(hào)輸出置低,即控制RS 485接口芯片處于接收狀態(tài)。
          (2)等待一段延遲時(shí)間(RS 485接口芯片穩(wěn)定時(shí)間),使能接口模塊即置CE_Modbus為‘1’,并置接收Modbus幀模式。
          (3)如果接收到一個(gè)完整的幀(消息),則轉(zhuǎn)到步驟(4),如果沒接收到一個(gè)完整的消息,一直處于等待狀態(tài)。
          (4)先置CE_Modbus為‘O’,再解釋接收緩沖寄存器里消息,等待消息處理完畢,如果消息不是發(fā)往該從站或者為廣播消息,則轉(zhuǎn)到步驟(2);否則把信號(hào)輸出置高,轉(zhuǎn)到步驟(5)。
          (5)等待一段延遲時(shí)間,使能Modbus協(xié)議接口模塊即置CE_Modbus為‘1’,并置發(fā)送Modbus協(xié)議幀模式。



          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();