新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于BM3803MG與VxWorks的BSP的設(shè)計(jì)實(shí)現(xiàn)

基于BM3803MG與VxWorks的BSP的設(shè)計(jì)實(shí)現(xiàn)

作者: 時(shí)間:2016-02-22 來源:網(wǎng)絡(luò) 收藏

  (2)數(shù)據(jù)包接收

本文引用地址:http://2s4d.com/article/201602/287214.htm

  KSZ8851-16mll 軟件驅(qū)動(dòng)以中斷方式接收數(shù)據(jù)包,當(dāng)操作系統(tǒng)接收到中斷時(shí),會(huì)調(diào)用中斷向量表的中斷服務(wù)程序處理網(wǎng)卡中斷(包括對(duì)錯(cuò)誤的檢查和狀態(tài)的改變),中斷服務(wù)程序把從網(wǎng)卡的接收緩存?zhèn)鬏數(shù)较到y(tǒng)緩存的所有費(fèi)時(shí)工作都放在任務(wù)層里完成。KSZ8851-16mll接收包的具體流程如圖3所示。

    

 

  (3)數(shù)據(jù)包發(fā)送

  上層應(yīng)用程序調(diào)用KSZ8851-16mll的發(fā)送程序?qū)崿F(xiàn)通過以太網(wǎng)控制器傳送連續(xù)的數(shù)據(jù)塊,如圖4所示。數(shù)據(jù)包的發(fā)送主要是依靠KSZ8851-16mll中的發(fā)送數(shù)據(jù)緩存區(qū),軟件驅(qū)動(dòng)將發(fā)送數(shù)據(jù)寫入發(fā)送數(shù)據(jù)緩沖區(qū)。當(dāng)網(wǎng)卡芯片檢測(cè)到處理器發(fā)來的數(shù)據(jù)發(fā)送信號(hào)后,將寫入發(fā)送緩沖區(qū)的數(shù)據(jù)包處理成Ethernet數(shù)據(jù)包的形式進(jìn)行發(fā)送。如果以太網(wǎng)控制器傳輸數(shù)據(jù)時(shí)出現(xiàn)錯(cuò)誤,用戶可以決定重新發(fā)送該幀數(shù)據(jù)還是丟棄該幀數(shù)據(jù)。

    

 

  2.4 END網(wǎng)絡(luò)驅(qū)動(dòng)程序

  網(wǎng)絡(luò)設(shè)備發(fā)送和接收數(shù)據(jù)包一般有中斷和輪詢兩種方式,本文采用中斷方式。

  2.4.1 END驅(qū)動(dòng)程序中的基本數(shù)據(jù)結(jié)構(gòu)

  END_0BJ:END_0BJ中定義所有網(wǎng)絡(luò)相關(guān)的部分,提供一個(gè)獨(dú)立于設(shè)備的數(shù)據(jù)結(jié)構(gòu),在這個(gè)數(shù)據(jù)結(jié)構(gòu)中包含了設(shè)備名稱、設(shè)備編號(hào)、設(shè)備描述以及設(shè)備指針等與設(shè)備相關(guān)的基本信息。這些信息只是提供設(shè)備的一個(gè)描述,不包含控制信息[5]。

  2.4.2 END驅(qū)動(dòng)程序的函數(shù)實(shí)現(xiàn)

  在END驅(qū)動(dòng)程序中,需要實(shí)現(xiàn)設(shè)備的加載、卸載、控制、發(fā)送和接收、設(shè)備啟動(dòng)和停止、輪詢發(fā)送和接收等功能函數(shù)。下面給出幾個(gè)重要功能函數(shù)的實(shí)現(xiàn):

  (1)加載網(wǎng)絡(luò)設(shè)備函數(shù)KS8851EndLoad():是KSZ8851-

  16mll驅(qū)動(dòng)程序的初始化入口點(diǎn)。KS8851EndLoad()中執(zhí)行幾個(gè)必要操作:初始化END_OBJ結(jié)構(gòu)、初始化網(wǎng)絡(luò)緩沖內(nèi)存、初始化MIB、設(shè)置網(wǎng)絡(luò)準(zhǔn)備好標(biāo)志。

  (2)啟動(dòng)設(shè)備函數(shù)KS8851Start():其作用是使設(shè)備處于活動(dòng)狀態(tài)和注冊(cè)中斷服務(wù)程序。函數(shù)實(shí)現(xiàn)如下:

  STATUS KS8851Start(DRV_CTRL * pDrvCtrl)

  {

  /*驅(qū)動(dòng)程序的中斷服務(wù)程序和設(shè)備中斷連接*/

  intConnect((VOIDFUNCPTR *)IVEC_EXTINT0,

  (VOIDFUNCPTR)ks8851EndInt, (int)pDrvCtrl);

  /*打開中斷設(shè)備*/

  (* ks8851IntEnable) (INUM_TO_LVL(pDrvCtrl->ilevel));

  }

  其中,intConnect()函數(shù)實(shí)現(xiàn)注冊(cè)驅(qū)動(dòng)程序的中斷服務(wù)程序,KS8851IntEnable是對(duì)CPU與網(wǎng)卡相連的中斷進(jìn)行使能。

  (3) 發(fā)送數(shù)據(jù)包函數(shù)KS8851EndSend():獲得發(fā)送器的使用權(quán)、查詢發(fā)送緩沖區(qū)、啟動(dòng)設(shè)備發(fā)送數(shù)據(jù)、統(tǒng)計(jì)MIB的錯(cuò)誤數(shù)和釋放已經(jīng)發(fā)送的數(shù)據(jù)包 [6]。當(dāng)要發(fā)送數(shù)據(jù)包時(shí),上層應(yīng)用程序?qū)⒁l(fā)送的數(shù)據(jù)包寫入?yún)f(xié)議層的緩沖區(qū)中交由協(xié)議層進(jìn)行處理,經(jīng)協(xié)議層處理的包含了協(xié)議層附加信息的數(shù)據(jù)包將被發(fā)送給MUX層的接口函數(shù)muxSend( ),再由KS8851EndSend()函數(shù)寫入緩沖由網(wǎng)卡發(fā)送出去。

  (4)接收數(shù)據(jù)包函數(shù) KS8851reveive( ):當(dāng)接收一個(gè)數(shù)據(jù)包時(shí)會(huì)觸發(fā)一個(gè)中斷,網(wǎng)卡的中斷服務(wù)程序(KS8851EndInt( ))將通過調(diào)用netJobAdd( )向任務(wù)隊(duì)列注冊(cè)一個(gè)網(wǎng)絡(luò)任務(wù),此網(wǎng)絡(luò)任務(wù)為數(shù)據(jù)包接收函數(shù)(KS8851reveive( )),負(fù)責(zé)接收數(shù)據(jù)包。KS8851reveive( )由tNettask來調(diào)用。接收到的數(shù)據(jù)包由MUX的接口函數(shù)muxReveive調(diào)用協(xié)議層的接口函數(shù)stackRcvRtn傳遞到協(xié)議層,最終數(shù)據(jù)到達(dá)應(yīng)用層的緩沖區(qū)中。應(yīng)用層程序通過read( )函數(shù)對(duì)其讀取。數(shù)據(jù)包經(jīng)過物理層到達(dá)數(shù)據(jù)鏈路層,然后通過MUX 層到達(dá)網(wǎng)絡(luò)層,再通過TCP/IP 協(xié)議層到達(dá)應(yīng)用層,即完成了數(shù)據(jù)包接收的全過程[7]。

  3 向BSP中添加驅(qū)動(dòng)程序

  已經(jīng)編寫好的網(wǎng)卡驅(qū)動(dòng)程序加入BSP中需要以下幾步:

  (1)修改sysLib.c:

  使能外部中斷0,并設(shè)置中斷觸發(fā)方式為邊沿觸發(fā)。

  (2)在config.h中添加如下語(yǔ)句:

  #define INCLUDE_END

  #define INCLUDE_KS8851_END

  (3)在configNet.h中添加新的裝載函數(shù):

  END_TBL_ENTRY endDevTbl [] =

  {

  .....

  #ifdef INCLUDE_KS_8851_END

  {0,KS8851_LOAD_FUNC, KS8851_LOAD_STRING,

  KS8851_BUFF_LOAN,NULL, FALSE},

  #endif

  .....

  };

  通過以上步驟,驅(qū)動(dòng)程序已經(jīng)添加到BSP中,編譯后生成所需要的帶有KSZ8851-16mll驅(qū)動(dòng)的_rom鏡像文件,下載到開發(fā)板里,實(shí)現(xiàn)開發(fā)板與主機(jī)間的網(wǎng)絡(luò)通信。

  4 基于ROM的鏡像下載流程

  網(wǎng)卡的驅(qū)動(dòng)程序完成之后,需對(duì)驅(qū)動(dòng)程序進(jìn)行測(cè)試,查出驅(qū)動(dòng)程序潛在的缺陷以及驗(yàn)證驅(qū)動(dòng)功能是否完善。測(cè)試環(huán)境如圖5所示。

    

 

  本文使用專用燒寫軟件燒寫_rom鏡像的過程如下:(1)把生成VxWorks_rom鏡像轉(zhuǎn)換成存儲(chǔ)器鏡像 VxWorks_rom.bin;(2)運(yùn)行的專用燒寫軟件,使用Flash映像生成功能,在VxWorks_rom的工程目錄下,自動(dòng)生成flash_content.bin、program_flash_in_ram.exe和program_flash_in_ram.bin。其中,flash_content.bin為待引導(dǎo)VxWorks_rom.bin的flash映像,program_flash_in_ram.exe為燒寫flash_content.bin的燒寫程序,program_flash_in_ram.bin為此燒寫程序的RAM映像;(3)將 program_flash_in_ram.bin燒寫到Flash中后,即完成了VxWorks_rom鏡像下載到目標(biāo)板的任務(wù)。

  BSP程序的開發(fā)與單純的應(yīng)用軟件不同,BSP程序在開發(fā)過程中會(huì)遇到很多硬件的問題,如時(shí)序匹配和信號(hào)完整性問題等。因此,在開發(fā)BSP之前,需盡量熟悉嵌入式系統(tǒng)的硬件以及硬件的初始化、寄存器訪問方式以及硬件的時(shí)序等,并完成相關(guān)的調(diào)試工作,為開發(fā)BSP打好基礎(chǔ)[5]。

  本文實(shí)現(xiàn)了VxWorks下基于的KSZ8851以太網(wǎng)BSP,滿足了空間應(yīng)用項(xiàng)目的嵌入式控制系統(tǒng)的高可靠、實(shí)時(shí)數(shù)據(jù)處理的需求,為空間高可靠控制系統(tǒng)提供了一種解決方案。


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

關(guān)鍵詞: BM3803MG VxWorks

評(píng)論


相關(guān)推薦

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

關(guān)閉