關 閉

        新聞中心

        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 接口 方案 擴展卡

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 丹凤县| 抚顺市| 大名县| 武夷山市| 余姚市| 江油市| 循化| 静宁县| 保亭| 通海县| 城口县| 丹棱县| 南京市| 含山县| 台北市| 项城市| 黄浦区| 稻城县| 锡林浩特市| 普陀区| 保亭| 满洲里市| 永靖县| 庆安县| 肥西县| 德昌县| 黄陵县| 富锦市| 东阳市| 商河县| 竹山县| 南昌市| 巩义市| 武平县| 潍坊市| 西青区| 金昌市| 婺源县| 五河县| 子长县| 天长市|