<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > PCI2040將TMS320VC5420橋接到PCI總線

          PCI2040將TMS320VC5420橋接到PCI總線

          作者: 時間:2007-03-09 來源:網(wǎng)絡(luò) 收藏

            PCI2040是TI公司生產(chǎn)的專門用于與PCI總線之間的橋接芯片,內(nèi)部原理圖如圖1所示。關(guān)于PCI2040具體介紹可以參照TI公司的相關(guān)資料(見參考文獻1)。PCI局部總線標(biāo)準(zhǔn)由Intel公司提出并由外圍部件聯(lián)合專門權(quán)益組織(PCISIG)制定。目前PCI總線已不再是一種局部總線,而成為一種受歡迎的高端總線和現(xiàn)代總線,被廣泛運用于圖形、圖像、動畫及其它各種外設(shè)對高速數(shù)據(jù)進行傳輸。

            PCI總線的主要優(yōu)點是高性能,(數(shù)據(jù)傳輸率可達到132/264Mbps)總線通用性強、低成本、使用方便靈活。 PCI2040可以接口8位TMS320c54xHPI總線或者16位TMS320c6x HPI總線。本文介紹如何通過PCI2040的16位C6X模式接口將TMS320VC5420的16位HPI接口連到PCI總線上。

            1 TMS320VC5420映射到主存的兩種方式

            TMS320VC5420是具有A、B兩個核的,根據(jù)TMS320VC5420的數(shù)量,有兩種將TMS320VC5420映射到主存或PC存儲空間的方式。若TMS320VC5420的數(shù)量少于三個,可用映射方式1(如圖2)。如果TMS320VC5420的數(shù)量多于兩個,可用映射方式2(如圖3),這種方式將每個映射到一個特定的存儲器空間,每個DSP核或DSP子系統(tǒng)占用同樣的存儲空間。 值得注意的是:控制空間的偏移量是相對于PCI2040上的256字節(jié)PCI配置寄存器中的14H處控制空間基址寄存器所代表的值。

            2 硬件方面的考慮

            TMS320VC5420是一個雙CPU設(shè)備,有兩個獨立的C54X子系統(tǒng),能夠?qū)崿F(xiàn)核對核通信。盡管PCI2040不是專門設(shè)計用來與雙CPU設(shè)備接口,但經(jīng)過特殊的處理還是可以實現(xiàn)接口的。需要考慮的主要有三方面:①C6201HPI協(xié)議到TMS320VC5420 HPI-16協(xié)議的轉(zhuǎn)換;②兩個DSP核間的切換;③多個復(fù)位和多個斷的處理。

            2.1 C6x HPI協(xié)議到TMS320VC5420 HPI-16的轉(zhuǎn)換

            TMS320VC5420對HPI總線提供了兩種操作模式。 非多路復(fù)用模式(HMODE=1),TMS320VC5420 HPI接口提供一個18位地址總線,用來訪問所有的內(nèi)部存儲器。 多路復(fù)用模式(HMODE=0),地址和數(shù)據(jù)復(fù)用同樣的管腳。

            PCI2040只是完成多路復(fù)用模式,所以TMS320VC5420的HMODE腳必須被拖到地址。另外由于C6X HPI的HPDY信號低電平有效,而TMS320VC5420的HRDY信號高電平有效,所以針對TMS320BVC5420必須使用轉(zhuǎn)換器(例如SN74ALCV04),這樣才能將VCC_H端直接連接到VCC端。

            2.2 兩個DSP核間的切換

            通過TMS320VC5420的SELA/B腳選擇被訪問的DSP子系統(tǒng)。例如可以將PCI2040的腳GPIO2連到SELA/B,這樣就可以通過GPIO2的高低電平來選擇核A或核B。

            2.3 多個HRST TMS320BVC5420的兩種方式控制每個子系統(tǒng)的復(fù)位功能。

            第一種,在HPIRS腳從低電平過渡到高電平時,同時保持A_RS和B_RS腳處于低電平,可以在兩個核處于復(fù)位狀態(tài)的同時將應(yīng)用程序代碼下載到DSP中。下載完之后,可以將A_RS和B_RS重新設(shè)置成高電平而將兩個子系統(tǒng)拖出復(fù)位狀態(tài)。 在HPIRS腳從低電平過渡到高電平時,同時保持A_RS和B_RS腳處于高電平也可以在兩個核處于復(fù)位狀態(tài)的同時將應(yīng)用程序代碼下載到DSP中。下載完之后,可以通過對地址2FH的寫操作將子系統(tǒng)拖出復(fù)位狀態(tài)。另外,可以根據(jù)SELA/B的值選擇指定的子系統(tǒng)。

            第二種,使用Power-on復(fù)位邏輯復(fù)位每個子系統(tǒng)(A_RS和B_RS),這時需要將HPIRS腳連接到PIC2040的HRST腳。注意,當(dāng)應(yīng)用程序下載完成之后,必須有一個向地址2FH的寫操作,以將子系統(tǒng)拖出復(fù)位狀態(tài)。

            2.4 對同一個DSP產(chǎn)生的兩個HINT中斷的處理

            根據(jù)連接到PCI2040的TMS320VC5420數(shù)量可決定多個中斷的處理方式。 如果有兩個或更少的TMS320VC5420,可以將第一個TMS320VC5420的A_HINT連到HINT0,將B)HINT連到HINT1。將PCI2040的HINT2和HINT3連接到第二個TMS320VC5420的A_HINT和B_HINT(如圖4),這種情況下存儲器的設(shè)置利用映射方式1。 如果板子上含有多個兩個的TMS320VC5420,此時需要將每個DSP上的兩個中斷相與(如圖5)。每個DSP上的中斷共享PCI2040的同一根中斷線,這樣就無法知道某個DSP上到底到個子系統(tǒng)申請的中斷。此時必須向每個子系統(tǒng)中HPLC寄存器的HINT位寫1,

            這種情況下存儲器的設(shè)置利用映射方式2。

            3 軟件方面的考慮

            C6X有一個16位的HPI接口,使用32位的字長,所以所有的HPI操作需要兩個HPI周期。既然PCI2040的16位接口用來與C6X接口,所以PCI2040也需要兩個HPI周期。與C6X不同,TMS320VC5420使用16位的字長,這樣只需要一個HPI周期就可以完成一次操作。所以程序員通過PCI2040訪問TMS320VC5420時,必須知道對DSP的讀和寫需要遵循特殊的原則。

            3.1 向HPIA、HPIC和HPIC寄存器寫數(shù)據(jù)

            當(dāng)向HPIA(HPI地址寄存器)、HPIC(HPI控制寄存器)和HPID(HPI數(shù)據(jù)寄存器)寫數(shù)據(jù)時,由于PCI2040對HPI口兩個周期的操作是針對同一個寄存器,所以第一個周期寫的數(shù)據(jù)會在第二個周期被覆蓋。故應(yīng)將數(shù)據(jù)多次寫到寄存器中,對保證寫入數(shù)據(jù)的正確(如圖6)。

            3.2 從HPIA、HPIC、HPID寄存器讀數(shù)據(jù)

            當(dāng)從HPIA、HPIC、HPID寄存器讀數(shù)據(jù)時,PCI讀這些寄存器兩遍,返回PCI雙字節(jié)的上下兩部分(如圖7)。

            3.3 利用自動增特性 為了最大提高HPI的性能,在讀和寫HPID寄存器時,利用DSP寄存器在第一個和第二個HPI周期中HPIA的自動增特性。自動增特性使得經(jīng)PCI總線可以對兩個字連續(xù)的進行讀和寫,最終使得一次性可以讀寫32位的字長,這樣就有效地加速了數(shù)據(jù)傳輸速率。



          評論


          相關(guān)推薦

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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();