PCI9054芯片接口設計中若干問題的深入研究
3 存儲器和I/O操作
通常PCI擴展板應該有配置空間、存儲器空間和I/O空間三類資源。空間配置是必須的,根據設計需要,后兩種資源可以只包含其中之一。PCI9054有S0和S1兩個配置空間,兩個配置空間都可以配置成存儲器空間和I/O空間,存儲器空間和I/O空間的配置既有相同之處,也有很大的區別。其相同點為兩者都以字節為單位進行空間配置。不同之處有以下幾點:
(1)存儲器空間支持0~4GB的空間配置和映射,而I/O空間只支持0~256字節的空間配置和映射;
(2)存儲器空間支持8位、16位和32位總線位寬配置和操作,而I/O空間只支持32位總線位寬配置和操作;
(3)存儲器空間支持單一周期和突發模式讀寫操作,而I/O空間只支持單一周期讀寫操作;
(4)在編寫設備驅動程序時,存儲器空間用程序指針進行訪問,I/O空間則用專用的函數進行訪問。
如果不清楚存儲器空間和I/O空間的異同步,有可能配錯相應的寄存器。當計算機重新啟動時,很有可能會啟動不起來。除此之外,值得注意的是:在配置存儲器空間和I/O空間時,不要將兩種硬件資源配置到相同的空間,導致空間重疊,使驅動程序產生誤操作。

4 DMA和突發數據傳輸
在《PCI9054-DataBook》中,每種工作模式都將DMA和突發數據傳輸的時序圖放在一起,這并不意味著DMA和突發數據傳輸是等同的,這是兩個不同的概念。事實上,既可利用一周期的總線操作也可以利用DMA方式進行數據傳輸。
DMA和突發數據傳輸的作用是不同的。PCI9054中有兩個DMA通道,可以獨立工作,互不干擾。采用DMA方式傳輸數據,可以節省CPU資源;采用突發方式傳輸數據可以提高數據的傳輸率,充分發揮PCI總線數據傳輸率高的優點。因此,在高速大容量數據傳輸和處理系統中,將DMA和突發數據傳輸方式結合在一起是比較理想的,一方面可以充分發揮PCI總線的性能,另一方面可以將節省出的CPU資源對數據處理算法進行優化。圖3是PCI9054在C模式正氣突發數據傳輸方式的時序圖。
從圖1和圖3可以看出,用狀態機實現該控制邏輯是比較理想的。圖4是PCI9054在C模式下采用單一周期和突發相結合的總線訪問狀態轉換圖。用該狀態轉換圖設計出的邏輯電路既可滿足單一周期總線訪問的需要,又可以滿足突發方式傳輸數據的需要,具有很大的實用價值。
使用DMA和突發方式相結合進行數據傳輸時,驅動程序要作為如下設置:
(1)調用驅動程序中相應的API函數,找到PC機的物理地址;
(2)在設備驅動程序中使能突發寄存器;
(3)在設備驅動程序中使能總線位寬寄存器;
(4)在設備驅動程序中使能相應的寄存器,指明DMA傳輸的方向是PCI→LOCAL還是LOCAL→PCI;
(5)在設備驅動程序中指明本次DMA傳輸需要傳輸的字節數。
完成上述設置后,即可在突發方式下進行DMA傳輸,否則DMA傳輸會失敗。

5 PCI中斷
PCI總線采用的是中斷共享機制,所有的PCI擴展板在PCM插槽上共用一根信號線INTA#,通過電平觸發方式響應PCI中斷。每塊PCI擴展板上的PCI9054提供的中斷使能寄存器和中斷狀態寄存器能識別相應板卡上十幾種類開的PCI中斷。
當PCI插槽上只有一塊PCI擴展板,而系統需要使用某種PCI中斷時,則在主程序中將相應的中斷使能寄存器置位,當相應的中斷源中斷信號到來時,與主板相連的信號線INTA#置一段時間低電平后,中斷狀態寄存器中的相應位被置位。當這兩個寄存器的相應位都有效時,計算機響應相應的PCI中斷,執行中斷服務子程序。在《PCI9054-DataBool》中,INTA#信號為11個本地總線時鐘周期,該時序圖給不少設計人員帶來了很多困惑。根據筆者的應用經驗,INTA#信號在7μs左右是比較理想的,這與在Windows下PCI總線每秒鐘可以響應十幾萬次中斷的相關資料是相符的。
當PCI插槽上有多塊PCI擴展板需要用到中斷功能時,其工作過程與一塊PCI擴展板差不多。唯一不同的是,首先驅動程序要利用一系列設備寄存器對擴展板進行設備識別,然后利用中斷使能寄存器和中斷狀態寄存器對中斷類型進行識別,最后響應相應的中斷服務子程序。
在網上經常看到一些應用PCI9054的設計人員被以上討論的問題所困擾,筆者在近兩年從事PCI9054芯片應用設計中,也曾被這些問題困擾過。本文從這些方面對PCI9054芯片的應用進行了深入的探討和總結,提出的所有技術解決方案都經過實驗驗證是可行的,這些內容在以往公開發表的論文中一般比較可見。本文探討的內容對從事PCI9054芯片應用設計的人員應該會有一定的參考價值。
模數轉換器相關文章:模數轉換器工作原理
評論