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

          新聞中心

          EEPW首頁 > EDA/PCB > 設(shè)計應(yīng)用 > 基于FPGA的帶CRC校驗的異步串口通信

          基于FPGA的帶CRC校驗的異步串口通信

          作者: 時間:2010-12-23 來源:網(wǎng)絡(luò) 收藏

          1.2.1 波特率設(shè)置
          系統(tǒng)時鐘是由PFGA的16引腳輸入的24 MHz時鐘,而的波特率設(shè)置為9 600 b/s,所以需要對主頻進行分頻。分頻過程定義了2個常量,分別用來存儲波特率96 000 b/s的分頻計數(shù)最大值bpspara和分頻計數(shù)的一半bps_para_2。每個系統(tǒng)時鐘的上升沿來臨時計數(shù)器cnt加1,每bps_para_2個系統(tǒng)時鐘周期clk_bps改變1次狀態(tài),這樣就產(chǎn)生了96 000 b/s的波特率。部分分頻代碼如下:
          c.JPG
          1.2.2 數(shù)據(jù)接收
          數(shù)據(jù)接收模塊所要完成的任務(wù)包括:
          (1)連續(xù)接收3個字節(jié):1個字節(jié)的數(shù)據(jù)信息和2個字節(jié)的數(shù)據(jù)信息的校驗碼;
          (2)取出這3個字節(jié)的第一個字節(jié),重新生成碼;
          (3)講新生成的碼與接收到得CRC比較,若相同則傳輸過程中沒有出現(xiàn)錯誤;若不相同則傳輸過程有錯誤,等待接收下一組數(shù)據(jù)。
          ①單字節(jié)串/并轉(zhuǎn)換
          串口發(fā)送數(shù)據(jù)的格式:1位起始位(低),8位數(shù)據(jù)位,1位停止位(高),共10位(這里沒有校驗位ParityBit)傳輸時的順序是:起始位+數(shù)據(jù)位低位---數(shù)據(jù)位高位+停止位,其時序圖如圖3所示;
          d.JPG

          ②3字節(jié)連續(xù)接收并儲存
          為了連續(xù)接收3個字節(jié)數(shù)據(jù),定義中斷寄存器neg_int和計數(shù)器count,復(fù)位時都清零,開始接收數(shù)據(jù)時rx_int置高,每接受完1個字節(jié),rx_int清零,此時檢測rx_int的下降沿,下降沿到來時計數(shù)器count加1,直到接收完第3個字節(jié)時count的值是3。部分程序如下:
          e.JPG
          因為HDL是硬件描述語言,所以必須時刻檢測是否有起始位到來,需用幾個并行的always語句塊來處理。在接受完第1個字節(jié)后繼續(xù)檢測下降沿,并把接收到的數(shù)據(jù)暫存到寄存器data中,接收完第2個字節(jié)后仍繼續(xù)檢測下降沿,并暫存數(shù)據(jù)到crc16[15:8],接收完第3個字節(jié)繼續(xù)檢測下降沿,暫存數(shù)據(jù)到crc16[7:O]。等待下面的校驗處理。下面用case語句塊來暫存數(shù)據(jù)。

          fpga相關(guān)文章:fpga是什么


          通信相關(guān)文章:通信原理




          關(guān)鍵詞: FPGA CRC 異步串口 通信

          評論


          相關(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); })();