<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 機載嵌入式PCI總線(xiàn)硬件設計和軟件測試

機載嵌入式PCI總線(xiàn)硬件設計和軟件測試

作者: 時(shí)間:2005-04-08 來(lái)源:網(wǎng)絡(luò ) 收藏

摘要:介紹、方法。在分布式系統結構具有典型性和實(shí)用性。內容充實(shí),信息量大,工程實(shí)踐性強。

關(guān)鍵詞: 地址映射 主設備

起源于微型計算機,已經(jīng)成為微型計算機事實(shí)上的總線(xiàn)標準。因其眾多的功能、強大的兼容性而獨領(lǐng)風(fēng)騷。為PCI局部總線(xiàn)的器件是針對PCI而不是針對特定的CPU處理器,獨立于處理器的升級。其目標是實(shí)現電流盡可能小的系統,功耗低。軟件透明,在和PCI設備之間通信時(shí),軟件驅動(dòng)之間使用相同的命令集和狀態(tài)定義。隨著(zhù)計算機的發(fā)展,PCI總線(xiàn)也越來(lái)越多地被引入到系統中。本文介紹在“十五”預研項目中實(shí)現嵌入式PCI總線(xiàn)的一些經(jīng)驗體會(huì ),與大家切磋。

1 PCI總線(xiàn)概述

PCI(Peripheral Component Interconnect)總線(xiàn),即外設部件互聯(lián)總線(xiàn)。在PCI應用系統中,如果某設備取得了總線(xiàn)控制權,就稱(chēng)其為“主設備”(master),而被主設備選中以進(jìn)行通信的設備稱(chēng)為“從設備”(slave)。圖1是PCI總線(xiàn)信號匯總。

系統信號包括復位信號RST和時(shí)鐘信號CLK。仲裁信號有總線(xiàn)申請REQ和總線(xiàn)授權信號GNT。接口控制信號包括主設備啟動(dòng)PCI交易的FRAME信號、主設備的交易數據有效信號IRDY和目標完成本次數據交易的信號TRDY等。PCI沒(méi)有一般數據周期的讀寫(xiě)信號,而是采用命令編碼形式定義本次PCI周期的讀寫(xiě)屬性。每個(gè)PCI周期由主設備啟動(dòng),在第一個(gè)時(shí)鐘周期,AD[31..0]信號承載地址信息,C/BE[3..0]的組合代表命令,定義PCI周期。第二個(gè)時(shí)鐘手,AD[31..0]由提供數據一方驅動(dòng),C/BE[3..0]的組合代表有效的字節。詳細情況可參閱參考文獻,亦即PCI規范。

2 PCI總線(xiàn)設計

目前有眾多的能支持PCI總線(xiàn)的廠(chǎng)家和芯片。其中以美國PLX公司的PCI9056功能最完備,使用簡(jiǎn)易。下面的設計以PCI9056為主要模型。

2.1 PCI系統時(shí)鐘

PIC總線(xiàn)的信號驅動(dòng)采用反射波方式而不是傳統的入射波。這樣,對各設備采樣時(shí)刻的偏差要求很高,亦即時(shí)鐘的偏斜(skew)應盡可能小,最大的時(shí)鐘偏斜≤2ns。最好整個(gè)PCI系統各設備采用同一時(shí)刻;但同一時(shí)鐘的驅動(dòng)能力有限,不可能同步驅動(dòng)所有PCI設備。IDT74CT3807時(shí)鐘驅動(dòng)器可以解決這個(gè)問(wèn)題。它將一個(gè)時(shí)鐘源泉轉換為10個(gè)等同的時(shí)鐘,各時(shí)鐘之間的偏斜≤350ps。圖2是PCI時(shí)鐘解決方案。

顯然,除去中央資源,這個(gè)PCI系統最多可以帶9個(gè)設備,對于嵌入式系統來(lái)說(shuō)已經(jīng)足夠了。在PCI底板上,為保證時(shí)鐘的偏斜率,各PCI時(shí)鐘必須走等長(cháng)線(xiàn)。

2.2 中央資源和PCI適配器

在PCI系統總線(xiàn)中,必須存在一個(gè)PCI主橋(Host)管理整個(gè)總線(xiàn)。主橋提供系統信號和進(jìn)行PCI部遲疑不決仲裁。PCI9056可以工作在Host方式下,也可以作為普通PCI適配器。圖3是兩種工作模式原理。

當HOSTEN引腳連接地時(shí),PCI9056工作在Host模式,亦即成為系統的中央資源,圖3(a)就是這種情況。圖3(b)工作在適配器模式。在Host模式時(shí),PCI9056的局部復位LRESET是輸入,接收來(lái)自局部CPU等的復位,然后在RST產(chǎn)生PCI總線(xiàn)復位,去復位整個(gè)PCI總線(xiàn)上的其它設備。而工作在適配器模式下的PCI9056剛好相反,RST接收來(lái)自PCI總線(xiàn)的復位,然后通過(guò)LRESET去復位PCI設備內的其它器件。一般地,把主橋的PCI8056設置為總線(xiàn)仲裁器。注意二者仲裁信號REQ和GNT互換連接。

PCI9056作適配器時(shí),仲裁信號使用REQ和GNT。當它作為總線(xiàn)仲裁器時(shí),還有其它的請求應答信號對可以使用。圖3中沒(méi)有表示出來(lái)。

2.3 加電初始化

眾所周知,PCI總線(xiàn)的地址是可以根據系統動(dòng)態(tài)調整的。各個(gè)模塊在PCI空間所占的地址和長(cháng)度取決于內部配置寄存器。系統程序一般在加電時(shí)就檢測整個(gè)系統所需的空間,分配各PCI設備的基址和所需存儲器空間、I/O空間。這個(gè)初始化過(guò)程可以用三個(gè)辦法完成。圖4是支持系統軟件初初化的對應電路,本質(zhì)量PCI9056內部寄存器的設置。

如果PCI9056設計為系統的主橋(北橋),亦即中央資源(Host),則在它的局部總線(xiàn)一側都存在CPU。寄存器的初始化可以由CPU進(jìn)行,也可以由存入EEPROM的內部參數自動(dòng)裝入。如果PCI9056作為一般PCI設備的適配器,一般沒(méi)有CPU,可以由初始化過(guò)的主橋通過(guò)PCI配置周期來(lái)設置內部寄存器,也可以由EEPROM在加電時(shí)自動(dòng)載入。圖4中的EEPROM采用仙童公司的FM93C56或FM93CS56皆可。由局部CPU可設置內部所有寄存器,控制邏輯應產(chǎn)生CCS片選。若不采用EEPROM加電自動(dòng)載入初始化參數時(shí),應該在圖4中的DI/DO引腳下拉1kΩ的電阻。除由局部CPU初始化和EEPROM加電自動(dòng)初始化外,更多的PCI設備由主橋通過(guò)PCI總線(xiàn)來(lái)動(dòng)態(tài)初始化。系統軟件要保證各個(gè)設備的PCI空間不重疊。

3 軟件設計

PCI總線(xiàn)不易調試,不但在于設計復雜,還在于驅動(dòng)軟件有相當的難度。但只要把幾個(gè)基本概念和功能巧妙地體現在軟件中,整個(gè)驅動(dòng)軟件就很清晰了。以下代碼是在TMS320C6701環(huán)境下的一些成熟的驅動(dòng)函數。

3.1 配置主橋作為PCI總線(xiàn)的主設備

在初始化PCI總線(xiàn)其它設備時(shí),中央資源作為PCI總線(xiàn)的主設備。此時(shí)由局部CPU設置所有寄存器,并不產(chǎn)生任務(wù)PCI周期,亦即局部邏輯必須譯碼產(chǎn)生CCS信號。

//功能:配置中央資源的PCI9056作為主設備時(shí)的參數

//入口參數

//Range: 映像范圍長(cháng)度

//PCIBAddr: PCI基址

//LocBAM:局部存儲器基址

//LocBAMI: 局部I/O配置基址

void ConfigHostMaster(UINT Range,UINT PCIBAddr,UINT LocBAM,UINT LocBAMI)

{UINT Aword;

//PCI命令碼寄存器CNTRL

//D3..0=PCI Read Command Code for DMA

// 缺省1110b:Memory Line Read,存儲器行讀

//D7..4=PCI Write Command Code for DMA

// 缺省0111b:MemoryWrite, 存儲器寫(xiě)

//D11..8=PCI MemoryRead Command Code for Direct Master,

// 缺省0110b:MemoryRead 存儲器讀

//D15..12=PCI MemoryWrite Command Code for Direct Master.

// 缺省1110b:MemoryWrite, 存儲器寫(xiě)

//D30=1:復位PCI方

//就用這個(gè)缺省值,即000F.767EH

*(int *)LOC_CNTRL=*(int *)LOC_CNTRL|0x400000000;

Aword=0x000FFFFF;

While(Aword--); //復位持續

*(int *)LOC_CNTRL=*(int*)LOC_CNTRL 0xBFFFFFFF;

//清掉軟件復位

//PCI仲裁控制器PCIARB

*(int *)LOC_PCIARB=0x00000001;//中央資源要當PCI總線(xiàn)仲裁器

//---Direct Master-to-PCI地址映射--

//局部基址+Range-->PCI地址映射.--

//局部基址+Range-->PCI基址+Range

//1.范圍寄存器DMRR

//長(cháng)度范圍值DMRR

//長(cháng)度范圍值應該是64KB的倍數,亦即D15..0=0000H

//而填入值應該是長(cháng)度值的被碼,即變反+1,如

//64KB=0001.0000H-->FFFE.FFFFH+1=FFFF.0000H

//1MB=0010.0000H-->FFEF.FFFFH+1=FFF0.0000H

*(int *)LOC_DMRR=(~Range)+1;//映像范圍

//2.局部存儲器基址DMLBAM(P11-29)

//D15..0:Reserved.

//D31..16:基址高16位,必須是范圍值的倍數

*(int *)LOC_DMLBAM=LocBAM;

//3.局部I/O Configuration基址DMLBAI

//當配置訪(fǎng)問(wèn)使能時(shí),對這個(gè)寄存器所指的基址進(jìn)行訪(fǎng)問(wèn),將在產(chǎn)生PCI配置周期

*(int *)LOC_DMLBAI=LocBAMI;

//4.PCI基址寄存器DMPBAM(P11-30)*(int *)LOC_DMPBAM=PCIBAddr|0xE3;

*(int *)LOC_DMCFGA=0x00000000;//暫時(shí)不產(chǎn)生配置周期

*(int *)LOC_DMDAC=0x0; //高32位地址始終為0,需要雙地址

//5.命令寄存器PCICR(P11-8)

//D0=IO Space=1:要響應I/O周期.

//D2=Master Enable=1:允許做Master.

*(int *)PCI9056_PCICR|=0x00000007;

return;

}

當PCI總線(xiàn)上的其它設備需要訪(fǎng)問(wèn)中央資源時(shí),主橋就成為從設備,所以應該配置其PCI空間到局部空間映射的參數。這個(gè)過(guò)程是一個(gè)逆變換,代碼在此省略。

圖3

3.2 配置PCI總線(xiàn)從設備

當中央資源作為主設備訪(fǎng)問(wèn)其它PCI設備時(shí),必須對從設備進(jìn)行適當的初始化。一般選用PCI配置周期設置PCI橋的關(guān)鍵配置寄存器,然后用普通PCI存儲器周期設置其它寄存器。

Void ConfigPCISlave(UINT And,UINT Range,UINT PCIBAddr,UINT LRegPBA,UINT LocBAddr)

//功能:通過(guò)主橋產(chǎn)生PCI配置周期,去配置PCI總線(xiàn)上作為從方的PCI9056

//入口參數:

//ADn:設備號,亦即和被配置設備的IDSEL#相連的PCI地址

//Range:范圍長(cháng)度

//PCIBAddr:PCI基址

//LRegPBA:內部寄存器的PCI存儲器基址(范圍512B),

//亦即PCIBAR0值

//LocBAddr:局部基址

{UINT Abit32W,LROffset;

//------用配置周期-----------------------

//設置命令寄存器PCICR

//D0=IO Space=1:要響應I/O周期

//D1=Memory Space=1:要響應Memory周期

//D2=Master Enable=1:允許做Master

ABit32W=GetConfigReg(ADn,PCI9056_PCICR)|0x07;

//讀原值并置位

SetConfigReg(and,PCI9056_PCICR,ABit32W);

//PCIBAR0:其它寄存器的PCI基址.

SetConfigReg(ADn,PCI9056_PCIBAR0,LRegPBA);

//設置PCI基址,以便能訪(fǎng)問(wèn)其它寄存器

SetConfigReg(ADn,PCI9056_PCIBAR2,PCIBAddr);

//-----以下用PCI存儲器周期-----------

//1.Space0的局部地址范圍LAS0RR

LROffset=LRegPBA0x001FFFFF;//取局部寄存器PCI基址的位移

ABit32W=~Range+1; //計算范圍值的補碼

SetPCIReg(LROffset,PCI_LAS0RR,Abit32W);

//2.Space0的局部基址LAS0BA

SetPCIReg(LROffset,PCI_LAS0BA,LocBAddr|1);

SetPCIReg(LROffset,PCI_EROMBA,0x38);

//4.Space 0/ROM的局部總線(xiàn)描述符LBRD0(P11-27)

//D1D0=11:Space 0-32Bit數據寬度.(復位缺省)

//D5..2=內部等待狀態(tài)計數器.

//D6=1:需要READY#信號.(復位缺省)

//D7=1:允許連續Burst

//D7=0:Burst-4 Mode (復位缺省)

//D8=0:Space 0允許預取

//D9=0:擴展ROM允許預取

//用缺省值40430043H

SetPCIReg(LROffset,PCI_LBRD0,0x40430043);

ABit32W=GetPCIReg(LROffset,PCI_LBRD0);

if(ABit32W!=0x40430043)

printf("局部總線(xiàn)描述符LBRD0缺省值出錯=%8x",ABit32W);

return;

}

PCI總線(xiàn)上的其它設備身份是動(dòng)態(tài)變化的,所以對有能力做PCI主設備的,應該配置其局部空間到PCI空間映射的參數。

結語(yǔ)

PCI局部總線(xiàn)規范也在更新,向更快更強更省電的方向邁進(jìn)。時(shí)鐘速率由最初的33MHz提高到66MHz,數據寬度也由32位擴展到可支持64位,工作電壓從5V轉變?yōu)?.3V,使功耗更小??梢灶A計,嵌入式PCI總線(xiàn)將極大提高嵌入式計算機系統的總體性能。

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)


評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>