一種PCI板卡Xpc驅動程序的設計與實現_第1頁
一種PCI板卡Xpc驅動程序的設計與實現_第2頁
一種PCI板卡Xpc驅動程序的設計與實現_第3頁
已閱讀5頁,還剩3頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、一種 PCI 板卡 Xpc 驅動程序的設計與實現摘 要為滿足某浮空器半實物物理仿真實驗的需求,編寫 Xpc 系統(tǒng)環(huán)境下的 PCI 板卡驅動,以便仿真系統(tǒng)可以通過PCI 板卡順利的收發(fā)數據。關鍵詞 半實物物理仿真中圖分類號: TP393.08xPC PCI 驅動程序文獻標識碼: A 文章編號: 1009-914X(2016)01-0293-01引言xPC 是基于 RTW(Real-Time Workshop)的實時仿真和開發(fā)平臺,可以將x86 等計算機或 PC 兼容機轉換為實時操作系統(tǒng),其采用“雙機”模式實現產品原型開發(fā)和系統(tǒng)的測試。宿主機運行simulink 完成仿真系統(tǒng)模型開發(fā),通過網線將模

2、型加載到目標機上;目標機啟動時加載實時內核,該實時內核保證仿真系統(tǒng)高效的運行 1 ,如圖 1 所示。一 .xPC 驅動模型xPC 目標機支持 ISA 總線和 PCI 總線的 I/O 設備,飛艇仿真模塊采用 PCI 總線的 ARINC429 通訊卡。xPC驅動程序文件即為由 C 語言編寫函數組成的S-functions 文件,主要由初始化模塊、執(zhí)行模塊和結束模塊組成,如圖2 所示。初始化模塊包括由mdlInitializeSizes 函數,mdlInitializeSampleTimes 函數和 mdlStart 函數組成, mdlInitializeSizes 函數和 mdlInitializ

3、eSampleTimes 函數主要負責輸入輸出參數初始化、狀態(tài)量初始化和系統(tǒng)采樣時間的初始化, mdlStart 函數負責 I/O 設備初始化;執(zhí)行部分根據仿真模型,完成相應的任務,執(zhí)行部分功能集中在 mdlOutputs 函數,該函數在負責 PCI 設備的讀寫操作; 結束模塊功能函數為 mdlTerminate,在運行結束后,負責釋放相關資源,使 I/O 設備安全退出。二.xPC 驅動程序關鍵技術1.PCI 設備卡基地址xPC Target啟動時, PCI 總線驅動被加載, BIOS 掃描掛接在 PCI 總線上的 I/O 設備,并為 PCI 設備分配合理的 I/O 空間地址、物理地址和中斷號

4、等資源,無需用戶在驅動程序中為 PCI 設備申請相關的資源,驅動程序通過廠商標識( Vendor_ID)和設備標識( Device_ID)來獲取 PCI 設備的配置空間信息, 代碼如下:rl32eGetPCIInfo(Vendor_ID,Device_ID,&pciinfo );pciinfo 是一個結構體變量,結構如下:unsigned long BaseAddress6; unsigned short AddressSpaceIndicator6;unsigned short InterruptLine;BIOS 為每個 PCI 設備提供了 6 個基址,其中有部分基址是無效的,通過

5、 rl32eShowPCIInfo 函數確定有效基址。 PCI 設備映射分為 I/O 映射和內存映射,驅動程序可以通過 pciinfo 中的 AddressSpaceIndicator 屬性值來確定 PCI 映射類型。若 PCI 設備為內存映射,AddressSpaceIndicator屬性值 0;若 PCI 設備為 I/O 映射 AddressSpaceIndicator屬性值 1。ARINC 429 通訊卡為內存映射, pciinfo 結構中的基址 BaseAddress必需通過函數 rl32eGetDevicePtr 轉化成虛擬地址, 然后用 C 語言的指針訪問相應的虛擬地址,代碼如下:

6、 bar2Base = (char *)rl32eGetDevicePtr(char*)( pciinfo.BaseAddress2),4096,RT_PG_USERREADWRITE ); * (bar2Base)= 0x12;2.編譯器優(yōu)化處理編譯器往往會優(yōu)化內存,將內存變量緩存到寄存器。當驅動程序進行寫操作, volatile 關鍵詞提醒編譯器它后面所定義的變量隨時都有可能改變,因此編譯后的程序每次需要存儲或讀取這個變量的時候,都會直接從變量地址中讀取數據。如果沒有 volatile 關鍵字,則編譯器可能優(yōu)化讀取和存儲,可能暫時使用寄存器中的值,如果這個變量有別的程序更新了的話,將出現不

7、一致的現象,該驅動將寄存器地址值都用 volatile 關鍵詞進行修飾, 以此避免寄存器內值不能及時更新的問題。typedef structvolatile uint32_T * txFifo_0 ; /pci429 發(fā)送通道fifovolatile uint16_T * bps_sel; /dei1016 波特率控制 volatile uint8_T * recEn ; /8 路接收使能Regs_429;3.驅動程序的初始化設備驅動初始化主要包括發(fā)送端初始化和接收端初始化兩部分,發(fā)送端初始化主要由發(fā)送 FIFO 端口初始化和命令狀態(tài)寄存器初始化兩部分組成,接收端初始化主要由接收 FIFO 端口初始化、命令狀態(tài)寄存器初始化和中斷方式寄存器初始化三部分組成,如圖3 所示。總結驅動程序通過接觸編譯器優(yōu)化,保證驅動程序在讀寫數據的一致性,確保

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論