關 閉

        新聞中心

        EEPW首頁 > 工控自動化 > 設計應用 > PCI接口擴展卡的快速開發方案

        PCI接口擴展卡的快速開發方案

        作者: 時間:2009-04-09 來源:網絡 收藏

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

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

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

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

        為方便在用戶態驅動代碼中操作SJA1000 和PLX9052的寄存器,可以使用Windriver為已映射的存儲器地址命名,如圖5所示,圖中CAN_IR表示中斷寄存器,CAN_CR表示控制寄存器,等等。

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

        存儲器相關文章:存儲器原理


        晶振相關文章:晶振原理
        上拉電阻相關文章:上拉電阻原理

        上一頁 1 2 下一頁

        關鍵詞: PCI 接口 方案 擴展卡

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 商都县| 措美县| 田林县| 洪洞县| 宁晋县| 贺州市| 同江市| 堆龙德庆县| 四川省| 藁城市| 蒙城县| 乳山市| 石首市| 大新县| 古丈县| 江达县| 施甸县| 杂多县| 麟游县| 潮安县| 益阳市| 九江县| 石楼县| 云南省| 会东县| 光山县| 西青区| 竹山县| 太原市| 南溪县| 襄垣县| 曲靖市| 宝山区| 定边县| 崇礼县| 威远县| 宜兰市| 满洲里市| 蓬溪县| 同心县| 曲阳县|