<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
關(guān) 閉

新聞中心

EEPW首頁(yè) > 工控自動(dòng)化 > 設計應用 > 基于BM3803MG與VxWorks的BSP的設計實(shí)現

基于BM3803MG與VxWorks的BSP的設計實(shí)現

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


(3)數據包發(fā)送

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


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

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

2.4.1 END驅動(dòng)程序中的基本數據結構

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

2.4.2 END驅動(dòng)程序的函數

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

(1)加載網(wǎng)絡(luò )設備函數KS8851EndLoad():是KSZ8851-
16mll驅動(dòng)程序的初始化入口點(diǎn)。KS8851EndLoad()中執行幾個(gè)必要操作:初始化END_OBJ結構、初始化網(wǎng)絡(luò )緩沖內存、初始化MIB、設置網(wǎng)絡(luò )準備好標志。

(2)啟動(dòng)設備函數KS8851Start():其作用是使設備處于活動(dòng)狀態(tài)和注冊中斷服務(wù)程序。函數實(shí)現如下:
STATUS KS8851Start(DRV_CTRL * pDrvCtrl)
{
/*驅動(dòng)程序的中斷服務(wù)程序和設備中斷連接*/
intConnect((VOIDFUNCPTR *)IVEC_EXTINT0,
(VOIDFUNCPTR)ks8851EndInt, (int)pDrvCtrl);
/*打開(kāi)中斷設備*/
(* ks8851IntEnable) (INUM_TO_LVL(pDrvCtrl->ilevel));
}

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

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

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

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

已經(jīng)編寫(xiě)好的網(wǎng)卡驅動(dòng)程序加入中需要以下幾步:
(1)修改sysLib.c:
使能外部中斷0,并設置中斷觸發(fā)方式為邊沿觸發(fā)。
(2)在config.h中添加如下語(yǔ)句:
#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
.....
};
通過(guò)以上步驟,驅動(dòng)程序已經(jīng)添加到中,編譯后生成所需要的帶有KSZ8851-16mll驅動(dòng)的_rom鏡像文件,下載到開(kāi)發(fā)板里,實(shí)現開(kāi)發(fā)板與主機間的網(wǎng)絡(luò )通信。

4 ROM的鏡像下載流程

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

本文使用專(zhuān)用燒寫(xiě)軟件燒寫(xiě)_rom鏡像的過(guò)程如下:(1)把生成VxWorks_rom鏡像轉換成存儲器鏡像VxWorks_rom.bin;(2)運行的專(zhuān)用燒寫(xiě)軟件,使用Flash映像生成功能,在VxWorks_rom的工程目錄下,自動(dòng)生成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為燒寫(xiě)flash_content.bin的燒寫(xiě)程序,program_flash_in_ram.bin為此燒寫(xiě)程序的RAM映像;(3)將program_flash_in_ram.bin燒寫(xiě)到Flash中后,即完成了VxWorks_rom鏡像下載到目標板的任務(wù)。
BSP程序的開(kāi)發(fā)與單純的應用軟件不同,BSP程序在開(kāi)發(fā)過(guò)程中會(huì )遇到很多硬件的問(wèn)題,如時(shí)序匹配和信號完整性問(wèn)題等。因此,在開(kāi)發(fā)BSP之前,需盡量熟悉嵌入式系統的硬件以及硬件的初始化、寄存器訪(fǎng)問(wèn)方式以及硬件的時(shí)序等,并完成相關(guān)的調試工作,為開(kāi)發(fā)BSP打好基礎[5]。
本文實(shí)現了VxWorks下的KSZ8851以太網(wǎng)BSP,滿(mǎn)足了空間應用項目的嵌入式控制系統的高可靠、實(shí)時(shí)數據處理的需求,為空間高可靠控制系統提供了一種解決方案。

本文引用地址:http://dyxdggzs.com/article/159902.htm

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



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

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>