關(guān) 閉

新聞中心

EEPW首頁 > 工控自動(dòng)化 > 設(shè)計(jì)應(yīng)用 > PCI接口擴(kuò)展卡的快速開發(fā)方案

PCI接口擴(kuò)展卡的快速開發(fā)方案

作者: 時(shí)間:2009-04-09 來源:網(wǎng)絡(luò) 收藏

  Local Address Space 0 Local Base Address(remap):設(shè)為0000 0001,表示將總線上的地址轉(zhuǎn)換為局部總線地址0x0000~0x001F。
  Chip Select 0 Base Address:設(shè)為0000 0011,表示在局部總線地址為0x0000~0x001F時(shí),局部總線的片選信號(hào)有效,用于SJA1000的片選。
  Interrupt Control/Status: 設(shè)為0000 0041, 表示中斷使能,響應(yīng)LINTi1上的中斷申請(qǐng)。
  CNTRL: 設(shè)為0060 0C80,表示USER0、USER1引腳用于輸入,USER2 、USER3引腳用于輸出,初始值分別為0、1,數(shù)據(jù)傳輸?shù)却瑫r(shí)長度為12個(gè)時(shí)鐘周期。
  根據(jù)標(biāo)準(zhǔn)和PLX9052的說明文檔,PCI連接器上所有的VCC、Vi/o 5V電源連接到一起,所有的GND端連接到一起,在盡可能靠近PLX9052電源引腳的地方放置高頻去耦電容。PCI總線的時(shí)鐘頻率為33MHz,不恰當(dāng)?shù)牟季€會(huì)導(dǎo)致信號(hào)線之間的延時(shí)關(guān)系混亂,因此PCI協(xié)議對(duì)布線做了嚴(yán)格的規(guī)定,要求主時(shí)鐘PCI_CLK線的長度為2.5英寸,誤差應(yīng)小于0.1英寸,其它引線短于1.5英寸,推薦使用四層板。設(shè)計(jì)中可以參考市面上的聲卡和網(wǎng)卡布線實(shí)例,如考慮成本等因素,也可只使用兩層板,雙面覆銅接地。經(jīng)實(shí)踐驗(yàn)證該卡能夠穩(wěn)定工作。
3 PCI卡驅(qū)動(dòng)程序及軟件設(shè)計(jì)
  在DOS環(huán)境下,操作系統(tǒng)對(duì)應(yīng)用程序開放所有權(quán)限,開發(fā)人員可以使用匯編指令、BIOS函數(shù)等任何方法操作硬件資源,此處不再贅述。
  在Windows系統(tǒng)中,為避免因不當(dāng)?shù)挠布僮鞫鴮?dǎo)致系統(tǒng)崩潰,應(yīng)用程序不再具有直接的硬件訪問權(quán),如果要操作硬件,必須借助設(shè)備驅(qū)動(dòng)程序。現(xiàn)有的Windows系列操作系統(tǒng)產(chǎn)品眾多,所使用的設(shè)備驅(qū)動(dòng)程序結(jié)構(gòu)也有所不同。其中,VxD型驅(qū)動(dòng)程序最古老,適用于Win3.x、Win95、Win98等操作系統(tǒng);WinNT型驅(qū)動(dòng)程序只適用于WinNT4.x以下版本的操作系統(tǒng);WDM型驅(qū)動(dòng)程序是WinNT型驅(qū)動(dòng)程序的升級(jí)版,適用于Win98、Win2000、WinXP等操作系統(tǒng),是今后幾年的應(yīng)用主流。
  Microsoft為設(shè)備驅(qū)動(dòng)程序的編寫提供了一些工具,如Windows Device Drivers Kit(簡稱DDK),它包含了驅(qū)動(dòng)開發(fā)所需的各種類型的定義和內(nèi)核函數(shù)庫。如果直接使用DDK,開發(fā)者需要了解整個(gè)系統(tǒng)體系結(jié)構(gòu)和WDM規(guī)范,熟諳上千個(gè)DDK函數(shù)的功能和使用場(chǎng)合。用這種方法編制的驅(qū)動(dòng)程序有很高的運(yùn)行效率,但是開發(fā)難度大,測(cè)試流程繁瑣,一般用于有一定研發(fā)和生產(chǎn)需求的單位。
  為減輕開發(fā)者的負(fù)擔(dān),很多第三方廠商提供了輔助軟件。如Numega公司的DriverStudio軟件,它將DDK函數(shù)按照邏輯功能組織,把很多常用功能封裝成類,建立了一個(gè)基于C++語言的面向?qū)ο蟮木幊汰h(huán)境。開發(fā)者面對(duì)的不再是上千個(gè)復(fù)雜凌亂的DDK函數(shù),而是邏輯清晰的類庫,大大降低了開發(fā)難度和開發(fā)周期,獲得了廣泛的應(yīng)用。
  對(duì)于速度要求不高、實(shí)時(shí)性要求不嚴(yán)的場(chǎng)合, Jungo公司的Windriver[3]軟件提供了一種更加快速簡潔的解決。它內(nèi)置一個(gè)名為Wdpnp.sys的通用核心態(tài)WDM驅(qū)動(dòng)程序,將一些基本的操作如存儲(chǔ)器讀寫、I/O端口讀寫、中斷服務(wù)、DMA操作等進(jìn)行了封裝,開發(fā)者只需編寫一個(gè)外殼程序來調(diào)用這個(gè)驅(qū)動(dòng)程序,就可以對(duì)硬件設(shè)備操作,如圖3所示,圖中灰色的部分表示W(wǎng)indriver已經(jīng)提供。

本文引用地址:http://m.butianyuan.cn/article/202702.htm

Windriver提供的驅(qū)動(dòng)程序經(jīng)過充分優(yōu)化,功能完備,在通用性和高效性之間做了很好的平衡。另外,Windriver專門為PLX公司的芯片開發(fā)了軟件包,因此非常適合在本中使用。
  Windriver啟動(dòng)后,會(huì)自行發(fā)現(xiàn)計(jì)算機(jī)上的所有即插即用設(shè)備,如圖4所示。其中“PCI:PLX PCI 9050 Target PCI Interface Chip”即指本卡。點(diǎn)擊“Generate.INF file'按鈕可以生成INF文件,系統(tǒng)

用它提供的信息安裝Wdpnp.sys。

為方便在用戶態(tài)驅(qū)動(dòng)代碼中操作SJA1000 和PLX9052的寄存器,可以使用Windriver為已映射的存儲(chǔ)器地址命名,如圖5所示,圖中CAN_IR表示中斷寄存器,CAN_CR表示控制寄存器,等等。

Windriver的核心態(tài)驅(qū)動(dòng)程序內(nèi)置了中斷服務(wù)函數(shù),它的作用有兩個(gè):一是發(fā)送硬件清中斷指令,用戶在初始化階段告知Windriver如何清中斷(一般是對(duì)板卡上的某個(gè)寄存器進(jìn)行讀寫),由核心驅(qū)動(dòng)程序自動(dòng)完成。二是通知應(yīng)用程序有中斷到來,回調(diào)用戶程序的中斷響應(yīng)函數(shù)。
  用Windriver可以生成一個(gè)基于C語言的應(yīng)用程序函數(shù)庫,用戶通過這些庫函數(shù)控制內(nèi)核驅(qū)動(dòng)程序?,F(xiàn)以筆者編制的程序?yàn)槔M(jìn)行介紹,工程文件名取為CAN01。
  在初始化階段,先使用 WD_Open()打開驅(qū)動(dòng)程序,再用CAN01_Open()設(shè)置驅(qū)動(dòng)程序工作參數(shù),生成一個(gè)CAN01實(shí)例,最后用CAN01_IntEnable()設(shè)置用戶態(tài)中斷響應(yīng)函數(shù)。
  在退出應(yīng)用程序前,先清除所有未處理的中斷,釋放分配的內(nèi)存,再用CAN01_Close()刪除CAN01,最后使用WD_Close()關(guān)閉驅(qū)動(dòng)程序。
  對(duì)SJA1000和PLX9052的寄存器的操作通過兩個(gè)函數(shù)完成,可以實(shí)現(xiàn)CAN總線通信和數(shù)字量I/O等功能:
  讀操作CAN01_ReadByte(),
  寫操作CAN01_WriteByte()。
  本文根據(jù)筆者的實(shí)際經(jīng)驗(yàn),介紹了開發(fā)PCI總線的軟硬件流程,給出了一套快速可行的解決。該方案電路簡單、調(diào)試方便、編程高效、可以使技術(shù)人員迅速掌握PCI總線的開發(fā)技術(shù),從而設(shè)計(jì)符合個(gè)性要求的多功能。

存儲(chǔ)器相關(guān)文章:存儲(chǔ)器原理


晶振相關(guān)文章:晶振原理
上拉電阻相關(guān)文章:上拉電阻原理

上一頁 1 2 下一頁

關(guān)鍵詞: PCI 接口 方案 擴(kuò)展卡

評(píng)論


相關(guān)推薦

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

關(guān)閉