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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > DSP與PCI網(wǎng)卡接口設(shè)計

          DSP與PCI網(wǎng)卡接口設(shè)計

          作者: 時間:2009-10-21 來源:網(wǎng)絡(luò) 收藏
           圖3中,通過9054來讀寫內(nèi)存,地址空間由的基地址開始。PCI9054作為的從設(shè)備和RTL8139的主設(shè)備。當(dāng)PCI寫時,接收寫信號,返回ready信號直到寫FIFO滿為止,并保持ready信號到寫FIFO可用。當(dāng)PCI9054從RTL8139讀出數(shù)據(jù)時將保持ready信號,直到BALST信號(表示PCI總線上的最后傳輸)有效,讀周期被終止,沒有讀出的數(shù)據(jù)將被FIFO舍棄。

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

            要使嵌入式系統(tǒng)要獨立運行,必須外接EPROM或Flash存儲器用于存放程序。與EPROM相比,Flash芯片功耗低,支持在工作電壓下的擦寫,可以方便地編寫自己的Flash芯片燒錄程序,通過在片方式完成對Flash芯片的寫操作。本采用的是SST公司生產(chǎn)的SST39VF400A,它是一款基于CMOS技術(shù)的高性能、多用途的Flash存儲芯片,其存儲容量達(dá)4Mb,功耗低,使用2.7~3.3V單電源供電。為了方便程序的調(diào)試,外接了1片64K×16b的SRAM,以用于存放發(fā)送數(shù)據(jù)和接收數(shù)據(jù),以便于對比,及時地發(fā)現(xiàn)數(shù)據(jù)傳輸?shù)恼_性。邏輯控制部分主要用于主處理器對外設(shè)(如PCI橋芯片、網(wǎng)絡(luò)適配芯片、SRAM及Flash等)的讀寫控制及地址分配。

          3軟件

            軟件主要分為PCI網(wǎng)橋和網(wǎng)絡(luò)二部分。PCI網(wǎng)橋部分主要是對PCI9054進(jìn)行初始化,即對它的PCI端配置寄存器和本地端配置寄存器進(jìn)行正確的編程配置,以實現(xiàn)DSP與PCI的無縫連接。網(wǎng)絡(luò)部分的編程包括對RTL8139進(jìn)行復(fù)位初始化,數(shù)據(jù)包的接收和發(fā)送。

            RTL8139已經(jīng)實現(xiàn)了OSI中的物理層和數(shù)據(jù)鏈路層的功能,只需再加上高層協(xié)議即可。作為一個嵌入式系統(tǒng),為了節(jié)省系統(tǒng)資源,需要盡量使用簡化的協(xié)議。因此IP地址和本機物理地址在初始化RTL8139時設(shè)定,采用本地管理的地址方式,上層協(xié)議進(jìn)行了簡化,沒有封裝復(fù)雜的TCP協(xié)議。

            簡化的初始化程序如下:

            #define CMD_RST 0x10 //復(fù)位標(biāo)志

            #define CMD_RE0x08 //接收使能

            #define CMD_TE0x04 //發(fā)送使能

            #define SUCCESS0xFF //初始化成功標(biāo)志

            Reset_init_rtl8139()

            {

          CMD=0x10;//軟復(fù)位網(wǎng)卡

          while((read_cmd CMD_RST)==0) read_cmd=CMD;

                              //檢查網(wǎng)卡是否復(fù)位完成

          write_mac_ip();     //設(shè)定網(wǎng)卡的MAC地址和IP地址

          CMD=CMD_RE | CMD_TE;   //接收發(fā)送使能

          set_RxConfig(); //接收配置

          set_TxConfig(); //發(fā)送配置

          init_rx_addr(); //初始化接收緩沖區(qū)地址

          Rxmissed=0; //clear 0

          CMD=CMD_RE | CMD_TE;

          return SUCCESS;

            }

            程序中:CMD為RTL8139的Command寄存器,通過它來對芯片復(fù)位并檢查復(fù)位成功與否;write_mac_ip()是向IDR0~IDR5寫入MAC地址,設(shè)定IP地址;set_RxConfig()主要是對Receive Configuration Register進(jìn)行設(shè)置。此外,網(wǎng)卡初始化程序設(shè)定只接收物理地址匹配的包,不接收組播和廣播。

            RTL8139接收緩沖區(qū)的大小可選,并設(shè)定為16KB。初始化過程中根據(jù)DSP的快慢還需要加一些延時,這一點非常重要。因為許多寄存器的設(shè)置都需要時間,若時間不夠,某些寄存器的值可能會設(shè)置不正確,從而導(dǎo)致初始化失敗,RTL8139的收發(fā)功能也會受到影響。

            RTL8139數(shù)據(jù)的收發(fā)用中斷方式完成。當(dāng)主處理器要向網(wǎng)上發(fā)送數(shù)據(jù)時,先將1幀數(shù)據(jù)通過DMA通道送到控制器的發(fā)送緩沖區(qū),然后發(fā)出傳送命令,RTL8139按照PCI總線主模式將數(shù)據(jù)從發(fā)送緩沖區(qū)轉(zhuǎn)移到內(nèi)部發(fā)送FIFO中。當(dāng)FIFO中數(shù)據(jù)包完整時,RTL8139即開始包發(fā)送。控制器在數(shù)據(jù)發(fā)送完成后通過中斷方式通知主處理器;接收數(shù)據(jù)時,網(wǎng)上來的數(shù)據(jù)包首先被放在接收FIFO中,同時RTL8139要進(jìn)行組播地址過濾。當(dāng)接收FIFO中數(shù)據(jù)包已達(dá)到接收配置寄存器的要求時,RTL8139請求PCI總線按照PCI主模式將數(shù)據(jù)傳到接收緩沖區(qū),接收滿1幀后,同樣以中斷方式通知主處理器。數(shù)據(jù)的收發(fā)是通過 DMA通道來完成的。中斷子程序流程圖如圖4所示。

            數(shù)據(jù)包的封裝按照IEEE802.3協(xié)議、IP協(xié)議和UDP協(xié)議,其幀格式如圖5所示。

            封裝的過程依次在源數(shù)據(jù)前加上UDP頭、IP頭和LLC頭。LLC頭即通常所說的以太網(wǎng)包頭,但也可以根據(jù)自己的需要加上其他協(xié)議如TCP、ARP或HTTP。不過在嵌入式系統(tǒng)中,為了節(jié)省資源,應(yīng)盡量減少協(xié)議的使用。在分組語音數(shù)據(jù)傳輸中,實時語音數(shù)據(jù)可以用UDP,而控制信號可以用TCP。

          4 結(jié)束語

            本文所提出的DSP與RTL8139的解決方案已在試驗中得到實現(xiàn),并已用于IP分組語音數(shù)據(jù)的以太網(wǎng)傳輸,效果良好。隨著ISA總線的淘汰,PCI接口的網(wǎng)絡(luò)控制器必將在嵌入式領(lǐng)域中得到更廣泛的應(yīng)用。


          上一頁 1 2 3 下一頁

          評論


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