新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于BM3803MG與VxWorks的BSP的設計實現

        基于BM3803MG與VxWorks的BSP的設計實現

        作者: 時間:2016-02-22 來源:網絡 收藏

          (2)數據包接收

        本文引用地址:http://www.104case.com/article/201602/287214.htm

          KSZ8851-16mll 軟件驅動以中斷方式接收數據包,當操作系統接收到中斷時,會調用中斷向量表的中斷服務程序處理網卡中斷(包括對錯誤的檢查和狀態的改變),中斷服務程序把從網卡的接收緩存傳輸到系統緩存的所有費時工作都放在任務層里完成。KSZ8851-16mll接收包的具體流程如圖3所示。

            

         

          (3)數據包發送

          上層應用程序調用KSZ8851-16mll的發送程序實現通過以太網控制器傳送連續的數據塊,如圖4所示。數據包的發送主要是依靠KSZ8851-16mll中的發送數據緩存區,軟件驅動將發送數據寫入發送數據緩沖區。當網卡芯片檢測到處理器發來的數據發送信號后,將寫入發送緩沖區的數據包處理成Ethernet數據包的形式進行發送。如果以太網控制器傳輸數據時出現錯誤,用戶可以決定重新發送該幀數據還是丟棄該幀數據。

            

         

          2.4 END網絡驅動程序

          網絡設備發送和接收數據包一般有中斷和輪詢兩種方式,本文采用中斷方式。

          2.4.1 END驅動程序中的基本數據結構

          END_0BJ:END_0BJ中定義所有網絡相關的部分,提供一個獨立于設備的數據結構,在這個數據結構中包含了設備名稱、設備編號、設備描述以及設備指針等與設備相關的基本信息。這些信息只是提供設備的一個描述,不包含控制信息[5]。

          2.4.2 END驅動程序的函數實現

          在END驅動程序中,需要實現設備的加載、卸載、控制、發送和接收、設備啟動和停止、輪詢發送和接收等功能函數。下面給出幾個重要功能函數的實現:

          (1)加載網絡設備函數KS8851EndLoad():是KSZ8851-

          16mll驅動程序的初始化入口點。KS8851EndLoad()中執行幾個必要操作:初始化END_OBJ結構、初始化網絡緩沖內存、初始化MIB、設置網絡準備好標志。

          (2)啟動設備函數KS8851Start():其作用是使設備處于活動狀態和注冊中斷服務程序。函數實現如下:

          STATUS KS8851Start(DRV_CTRL * pDrvCtrl)

          {

          /*驅動程序的中斷服務程序和設備中斷連接*/

          intConnect((VOIDFUNCPTR *)IVEC_EXTINT0,

          (VOIDFUNCPTR)ks8851EndInt, (int)pDrvCtrl);

          /*打開中斷設備*/

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

          }

          其中,intConnect()函數實現注冊驅動程序的中斷服務程序,KS8851IntEnable是對CPU與網卡相連的中斷進行使能。

          (3) 發送數據包函數KS8851EndSend():獲得發送器的使用權、查詢發送緩沖區、啟動設備發送數據、統計MIB的錯誤數和釋放已經發送的數據包 [6]。當要發送數據包時,上層應用程序將要發送的數據包寫入協議層的緩沖區中交由協議層進行處理,經協議層處理的包含了協議層附加信息的數據包將被發送給MUX層的接口函數muxSend( ),再由KS8851EndSend()函數寫入緩沖由網卡發送出去。

          (4)接收數據包函數 KS8851reveive( ):當接收一個數據包時會觸發一個中斷,網卡的中斷服務程序(KS8851EndInt( ))將通過調用netJobAdd( )向任務隊列注冊一個網絡任務,此網絡任務為數據包接收函數(KS8851reveive( )),負責接收數據包。KS8851reveive( )由tNettask來調用。接收到的數據包由MUX的接口函數muxReveive調用協議層的接口函數stackRcvRtn傳遞到協議層,最終數據到達應用層的緩沖區中。應用層程序通過read( )函數對其讀取。數據包經過物理層到達數據鏈路層,然后通過MUX 層到達網絡層,再通過TCP/IP 協議層到達應用層,即完成了數據包接收的全過程[7]。

          3 向BSP中添加驅動程序

          已經編寫好的網卡驅動程序加入BSP中需要以下幾步:

          (1)修改sysLib.c:

          使能外部中斷0,并設置中斷觸發方式為邊沿觸發。

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

          #define INCLUDE_END

          #define INCLUDE_KS8851_END

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

          END_TBL_ENTRY endDevTbl [] =

          {

          .....

          #ifdef INCLUDE_KS_8851_END

          {0,KS8851_LOAD_FUNC, KS8851_LOAD_STRING,

          KS8851_BUFF_LOAN,NULL, FALSE},

          #endif

          .....

          };

          通過以上步驟,驅動程序已經添加到BSP中,編譯后生成所需要的帶有KSZ8851-16mll驅動的_rom鏡像文件,下載到開發板里,實現開發板與主機間的網絡通信。

          4 基于ROM的鏡像下載流程

          網卡的驅動程序完成之后,需對驅動程序進行測試,查出驅動程序潛在的缺陷以及驗證驅動功能是否完善。測試環境如圖5所示。

            

         

          本文使用專用燒寫軟件燒寫_rom鏡像的過程如下:(1)把生成VxWorks_rom鏡像轉換成存儲器鏡像 VxWorks_rom.bin;(2)運行的專用燒寫軟件,使用Flash映像生成功能,在VxWorks_rom的工程目錄下,自動生成flash_content.bin、program_flash_in_ram.exe和program_flash_in_ram.bin。其中,flash_content.bin為待引導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鏡像下載到目標板的任務。

          BSP程序的開發與單純的應用軟件不同,BSP程序在開發過程中會遇到很多硬件的問題,如時序匹配和信號完整性問題等。因此,在開發BSP之前,需盡量熟悉嵌入式系統的硬件以及硬件的初始化、寄存器訪問方式以及硬件的時序等,并完成相關的調試工作,為開發BSP打好基礎[5]。

          本文實現了VxWorks下基于的KSZ8851以太網BSP,滿足了空間應用項目的嵌入式控制系統的高可靠、實時數據處理的需求,為空間高可靠控制系統提供了一種解決方案。


        上一頁 1 2 下一頁

        關鍵詞: BM3803MG VxWorks

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 龙山县| 日土县| 揭阳市| 北碚区| 商河县| 和林格尔县| 舞阳县| 牙克石市| 博客| 弋阳县| 临夏市| 原平市| 弥勒县| 南和县| 如东县| 万全县| 商城县| 石门县| 富源县| 镇康县| 驻马店市| 丹棱县| 扶绥县| 清丰县| 金溪县| 尤溪县| 延寿县| 凤翔县| 韶山市| 永济市| 长宁县| 吴桥县| 利津县| 巴彦淖尔市| 湖州市| 竹山县| 长垣县| 宜章县| 南澳县| 饶平县| 平江县|