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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于NiosⅡ的1553B總線通訊模塊設(shè)計(jì)與開(kāi)發(fā)

          基于NiosⅡ的1553B總線通訊模塊設(shè)計(jì)與開(kāi)發(fā)

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

            2.4 以太網(wǎng)接口設(shè)計(jì)

          本文引用地址:http://www.ex-cimer.com/article/268250.htm

            以太網(wǎng)控制器選用DM9000A,芯片為48管腳的LQFP封裝,支持處理器接口以字節(jié)/字模式的I/O命令操作內(nèi)部存儲(chǔ)器數(shù)據(jù),集成10/100M帶有AUTO-MDIX的接收器,支持用于全雙工流控制的IEEE802.3x標(biāo)準(zhǔn),提供IP/TCP/UDP校驗(yàn)和生成以及校驗(yàn)過(guò)程,可選的EEPROM配置。

            DM9000A與控制器和RJ45連接器的連接如圖4所示。DM9000A與控制器有兩種數(shù)據(jù)總線寬度的連接方式,即8位/16位模式,論文選用16位操作模式。DM9000A通過(guò)TX+、TX-、RX+和RX- 4條線與自帶隔離變壓器的RJ45轉(zhuǎn)換器相連。RESET引腳為DM9000A的復(fù)位引腳,低電平有效;X1外接25 Hz時(shí)鐘頻率。

            

           

            2.5 接口設(shè)計(jì)

            BU-61580與控制器的接口形式非常靈活,本文根據(jù)需求和資源情況選擇16位緩沖連接方式。為了提高本模塊的抗干擾性,論文采用變壓器耦合方式。BU-61580的外圍電路連接圖如圖5所示。

            

           

            3 模塊軟件設(shè)計(jì)與開(kāi)發(fā)

            3.1 軟件結(jié)構(gòu)設(shè)計(jì)

            軟件結(jié)構(gòu)層次由NiosII處理器系統(tǒng)硬件、設(shè)備驅(qū)動(dòng)程序、HAL API、μC/OSII、LwIP協(xié)議棧、系統(tǒng)初始化和應(yīng)用程序7部分組成,如圖6所示。

            

           

            1)NiosII處理器系統(tǒng)硬件:模型的核心,包括在中實(shí)現(xiàn)的NiosII軟核處理器和硬件外設(shè);2)設(shè)備驅(qū)動(dòng)程序:管理以太網(wǎng)、組件和其它外設(shè)的軟件函數(shù);3)HAL API:硬件抽象層應(yīng)用程序接口,對(duì)設(shè)備驅(qū)動(dòng)程序提供標(biāo)準(zhǔn)化的接口,對(duì)外層提供類(lèi)似于POSIX的API;4)μC /OSII:實(shí)時(shí)操作系統(tǒng)層,為L(zhǎng)wIP協(xié)議棧、任務(wù)和嵌入式Web任務(wù)提供多任務(wù)和任務(wù)間通訊服務(wù);5)LwIP協(xié)議棧:通過(guò)套接字API為應(yīng)用程序和應(yīng)用系統(tǒng)初始化提供網(wǎng)絡(luò)服務(wù);6)系統(tǒng)初始化:包括μC/OSII、LwIP協(xié)議棧和1553B組件初始化函數(shù),也包括所有應(yīng)用程序的任務(wù)、信號(hào)量、隊(duì)列和事件性標(biāo)志等實(shí)時(shí)操作系統(tǒng)任務(wù)間通訊資源的創(chuàng)建;7)應(yīng)用程序:最外一層是建立的各項(xiàng)應(yīng)用任務(wù)。

            應(yīng)用程序工作過(guò)程如下:首先進(jìn)行系統(tǒng)初始化,然后進(jìn)入工作等待狀態(tài)。以太網(wǎng)任務(wù)等待客戶端通過(guò)以太網(wǎng)發(fā)來(lái)的數(shù)據(jù)包,當(dāng)有數(shù)包到達(dá)時(shí),經(jīng)物理層處理后交于TCP/IP層處理。在TCP/IP協(xié)議層之上,建立了3個(gè)套接字接口來(lái)偵聽(tīng)套接字連接:嵌入式Web端口、PING端口和1553B端口。對(duì)于1553B任務(wù),根據(jù)客戶端不同的請(qǐng)求,將啟動(dòng)不同的任務(wù)來(lái)完成相應(yīng)的數(shù)據(jù)命令的發(fā)送或狀態(tài)的讀取。

            3.2 基于μC/OSII的LwIP協(xié)議實(shí)現(xiàn)

            輕量型IP(Light Weight IP,LwIP)協(xié)議是用于嵌入式系統(tǒng)開(kāi)放源代碼的TCP/IP協(xié)議棧。LwIP在保持TCP協(xié)議主要功能的基礎(chǔ)上減少對(duì)RAM的占用,非常適合在嵌入式系統(tǒng)中使用。

            LwIP協(xié)議棧在設(shè)計(jì)時(shí)就考慮了移植問(wèn)題,把所有與硬件、OS和編譯器相關(guān)的部分獨(dú)立了出來(lái),因此LwIP在μC/OSII上移植只需修改目錄下的文件即可。

            3.3 1553B總線協(xié)議任務(wù)的實(shí)現(xiàn)

            為方便對(duì)BU-61580芯片操作,開(kāi)發(fā)了BU-61580的驅(qū)動(dòng)程序。驅(qū)動(dòng)程序包括BU-61580芯片的初始化函數(shù)、BC發(fā)送接收命令函數(shù)、BC發(fā)送發(fā)送命令函數(shù)、BC發(fā)送接收/發(fā)送命令函數(shù)、BC發(fā)送不帶數(shù)據(jù)字的方式命令函數(shù)和BC發(fā)送帶數(shù)據(jù)字的方式命令函數(shù)。

            參考嵌入式Web服務(wù)器的實(shí)現(xiàn)方式,基于LwIP和μC/OSII建立了端口號(hào)為8000的1553B套字接口任務(wù),流程如圖7所示。

            

           

            首先建立1553B任務(wù)接口守護(hù)進(jìn)程,創(chuàng)建TCP套接字,綁定端口,將TCP套接字轉(zhuǎn)換成偵聽(tīng)套接字,進(jìn)入循環(huán)結(jié)構(gòu),等待接受用戶的連接請(qǐng)求。當(dāng)有客戶端請(qǐng)求連接端口8000時(shí),調(diào)用套接字?jǐn)?shù)據(jù)接收函數(shù)recv()將客戶端發(fā)送的數(shù)據(jù)讀取過(guò)來(lái),將數(shù)據(jù)映射到定義的結(jié)構(gòu)體變量alt_avalon_BU61580*bdev上;用請(qǐng)求解析函數(shù)int 1553B_request(alt_avalon BU61580*bdev)根據(jù)messagemode判斷需要采取什么操作方式:然后BU-61580的發(fā)送數(shù)據(jù)函數(shù)將數(shù)據(jù)內(nèi)容寫(xiě)到相應(yīng)的寄存器或存儲(chǔ)器內(nèi),啟動(dòng)BC發(fā)送;如果調(diào)用讀取數(shù)據(jù)函數(shù),則將存儲(chǔ)器或寄存器地址傳遞給讀取函數(shù),將讀取到的數(shù)據(jù)調(diào)用函數(shù)int 1553B_transmit(&bdev[i],i)經(jīng)以太網(wǎng)打包后發(fā)送給客戶端。

          tcp/ip相關(guān)文章:tcp/ip是什么


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


          存儲(chǔ)器相關(guān)文章:存儲(chǔ)器原理




          關(guān)鍵詞: NiosⅡ 1553B FPGA

          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(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); })();