當前位置:首頁 > 嵌入式 > 嵌入式教程
[導讀]ARM922T核ZCP320A處理器PCI總線操作

    摘要:本文簡要說明了ZCP320A處理器內(nèi)部集成的PCI總線接口、編程模式及工作模式,并介紹了作為主設備時如何訪問外部擴展的RTL8139 PCI網(wǎng)卡設備。為以后的設計者提供借鑒及應用基礎。

    關(guān)鍵詞:ARM922T ZCP320A PCI總線 RTL8139

ZCP320A采用了ARM公司的ARM922T核,ARM922T是ARM9TDMI通用處理器家族中的一員采用哈佛結(jié)構(gòu)內(nèi)部使用5級流水線支持32位的ARM指令系統(tǒng)和16位的Thumb指令系統(tǒng)包括兩個相互獨立的8KB 的數(shù)據(jù)和指令高速緩存,高速緩存行的長度是8個字。ARM922T 實現(xiàn)增強型ARM結(jié)構(gòu)v4MMU以提供對指令和數(shù)據(jù)地址的轉(zhuǎn)換和訪問許可檢測。ARM922T 支持ARM調(diào)試結(jié)構(gòu)協(xié)處理器以及Tracking ICE。

ZCP320A內(nèi)部使用三條AHB總線連接實現(xiàn)功能所需的主從設備。每條AHB總線連接一個主設備和多個從設備。根據(jù)總線連接的主設備的不同,三條總線分別被命名為COREBUS(ARM9 核作為該總線的主設備)、PBUS(PCI橋作為該總線的主設備)和DBUS(DMA控制器作為該總線的主設備)。這三條總線由總線管理模塊統(tǒng)一進行管理。

ZCP320A集成的PCI總線接口是一個符合PCI協(xié)議2.2的總線接口。由于ZCP320A的內(nèi)部總線是符合AMBA AHB協(xié)議的總線,所以在ZCP320A中設計了一個AHB-PCI的橋來實現(xiàn)AMBA AHB協(xié)議到PCI協(xié)議的轉(zhuǎn)換。PCI總線通過AHB-PCI橋連接到內(nèi)部AHB總線。

1 PCI總線接口概述

在ZCP320A中設計了一個AHB-PCI的橋來實現(xiàn)AMBA AHB協(xié)議到PCI協(xié)議的轉(zhuǎn)換。PCI總線通過AHB-PCI橋連接到內(nèi)部AHB總線。如圖1所示。

    AHB-PCI 橋是實現(xiàn)AHB總線和PCI總線的協(xié)議轉(zhuǎn)換,實現(xiàn)AHB總線和PCI 總線之間數(shù)據(jù)交換的一個設備,AHB-PCI橋是32位的,即AHB總線和PCI總線都是32位的地址/數(shù)據(jù)總線。在CPU內(nèi)部橋和兩條內(nèi)部總線相連接,COREBUS 和PBUS。這兩條內(nèi)部總線都符合AMBA AHB總線協(xié)議。在COREBUS上,ARM CORE 作為該總線的唯一主設備,橋則作為該總線的一個從設備。在PBUS上,橋作為該總線的唯一主設備,PCI緩沖及存儲器則作為其從設備。在CPU外部,橋則和PCI總線相連接。通過COREBUS, ARM CORE訪問橋及穿過橋訪問外部的PCI設備。外部的PCI設備則通過PCI總線訪問該橋并穿過橋到PBUS上訪問CPU的內(nèi)部存儲器等資源。橋為PCI總線和內(nèi)部ARM CORE及內(nèi)部存儲器的通信提供了數(shù)據(jù)緩沖。ARM CORE寫數(shù)據(jù)緩沖由兩個FIFO組成,每個FIFO可容納32字節(jié)的數(shù)據(jù)和4 字節(jié)的地址。ARM CORE讀數(shù)據(jù)緩沖由一個FIFO組成,該FIFO可容納32字節(jié)的數(shù)據(jù)和4字節(jié)的地址。在另一側(cè)PCI寫數(shù)據(jù)緩沖由兩個FIFO組成,每個FIFO可容納32字節(jié)的數(shù)據(jù)和4字節(jié)的地址。PCI讀數(shù)據(jù)緩沖由一個FIFO組成,此FIFO也可容納32字節(jié)的數(shù)據(jù)和4字節(jié)的地址。當有大量數(shù)據(jù)需要進行傳輸?shù)臅r候,橋上提供了DMA控制器供使用,可以大大提高數(shù)據(jù)通信效率。該DMA 控制器具有一個32字節(jié)的接收FIFO和一個32字節(jié)的發(fā)送FIFO。因此DMA在傳輸數(shù)據(jù)的時候可以實現(xiàn)乒乓效應,也就是說在接收的同時發(fā)送數(shù)據(jù)。

通過AHB-PCI橋,內(nèi)部的ARM核可以對外部PCI設備進行訪問;同時,外部的PCI設備也可以對內(nèi)部的CPU資源進行訪問。當AHB-PCI橋作為COREBUS上的從設備的時候,它從COREBUS上接收ARM發(fā)出讀/寫命令,然后在PCI總線上發(fā)起相應的傳輸,也就是說此時橋作為PCI的主設備。當外部PCI設備對AHB-PCI橋進行訪問的時候,橋作為PCI從設備接收PCI 總線上的命令,同時作為AHB主設備在PBUS上發(fā)起相應的操作以達到訪問CPU資源的目的。這就是CPU訪問外部設備和外部設備訪問CPU資源的兩條路徑。

ZCP320A的PCI橋在PCI總線仲裁方面,可以用外部的仲裁器,也可以用橋本身提供的仲裁器。設計人員可以根據(jù)需要選擇用外部的仲裁器,還是用ZCP320A的PCI橋上的仲裁器。這個選擇通過配置PCI混合控制寄存器PCI_MISC_CTL(偏移地址是0x100)的位12。如果使用外部仲裁器則將該位配置為1,而如果使用橋內(nèi)部的仲裁器則將該位配置為0。橋上的PCI 仲裁器最多支持6個PCI主設備(包括ZCP320A本身)。其仲裁算法為分組輪循的優(yōu)先算法。

ZCP320A提供了地址轉(zhuǎn)換功能和地址空間范圍定義功能。地址轉(zhuǎn)換包括兩個方向,一是從ARM CORE到外部PCI空間的地址轉(zhuǎn)換;二是從PCI空間到PBUS空間的轉(zhuǎn)換。地址轉(zhuǎn)換和地址空間范圍都是通過一個稱為地址窗口的機制來實現(xiàn)的。在從ARM CORE到外部PCI空間的方向定義了4個窗口,即窗口0/1/2/3,每個窗口由兩個寄存器來定義,窗口基地址寄存器(CBUS_BST0/1/2/3)和窗口控制寄存器(CBUS_TI0/1/2/3_CTL)。在窗口基地址寄存器中定義了該窗口在COREBUS上的基地址及該窗口的屬性(存儲器或I/O空間是否可預取,是否可對32位的任一字節(jié)進行訪問),而在窗口控制寄存器中則定義了該窗口轉(zhuǎn)換到PCI空間后的基地址,該窗口的大小及窗口使能控制和地址轉(zhuǎn)換使能控制。在從PCI 空間到PBUS空間的方向也定義了4個窗口,PCI寄存器窗口和PCI從設備窗口0/1/2。其中PCI寄存器窗口由一個寄存器(PCI_BSREG)來控制該窗口在PCI總線空間的基地址及窗口屬性,而PCI 從設備窗口0/1/2則由兩個寄存器來定義,即窗口基地址寄存器(PCI_BST0/1/2)和窗口控制寄存器(PCI_TI0/1/2)。在窗口基地址寄存器中定義了該窗口在PCI總線上的基地址及窗口屬性(存儲器或I/O空間是否可預取,是否可對32位的任一字節(jié)進行訪問),而在窗口控制寄存器中則定義了該窗口轉(zhuǎn)換到PBUS空間后的基地址及該窗口的大小窗口使能控制和地址轉(zhuǎn)換使能控制。

2 PCI總線編程模式

PCI橋上的寄存器占了4K的空間,從偏移地址0x000到0xfff。其中0x000到0x0ff是PCI協(xié)議中的標準PCI配置寄存器。這部分的寄存器可以從COREBUS和PCI 總線上進行訪問,在COREBUS上訪問的時候是當作存儲器訪問,而在PCI總線上則只能通過配置訪問來進行。

偏移地址從0x100到0x1ff是擴展的PCI寄存器,用來定義橋作為PCI從設備時的窗口以及一些其它的控制。其中0x120是鎖寄存器,用來控制寄存器區(qū)的寫訪問。

偏移地址從0x200到0x2ff是COREBUS控制寄存器,用來控制COREBUS上的窗口和地址屬性。即橋作為PCI主設備時使用該組寄存器。

偏移地址從0x300到0x3ff是錯誤檢測和處理寄存器。這部分的寄存器是對橋的錯誤進行控制,對錯誤的狀態(tài)進行檢測并報告。

偏移地址從0x400到0x4ff是DMA控制器部分寄存器。這部分的寄存器是DMA的專用命令寄存器,用來控制和管理橋上的DMA的工作。

另外還有兩個配置寄存器0xcf8配置地址寄存器和0xcfc配置數(shù)據(jù)寄存器。ARM CORE在COREBUS上通過對這兩個寄存器的操作實現(xiàn)對外部的PCI設備的配置操作。

PCI寄存器區(qū)在COREBUS總線上的基地址是0xe0000000 ,而在PCI總線上的基地址是可配置的,在PCI_BSREG寄存器中配置。

橋上的寄存器既可以由ARM核在COREBUS上訪問,也可以由外部的PCI主設備通過PCI總線訪問。寄存器區(qū)有一個鎖的機制,用來保護寄存器。鎖可以保證在同一時間只有一個設備可以對寄存器區(qū)的值進行修改。當ARM CORE通過COREBUS來訪問橋上的寄存器或外部PCI設備通過PCI總線訪問橋上的寄存器的時候,必須先對寄存器進行鎖定成功以后才能對寄存器進行寫操作,而讀操作則沒有這個限制。鎖機制的實現(xiàn)是通過鎖寄存器REG_LOCK 來實現(xiàn)的。鎖定的具體方法是:對鎖寄存器偏移地址0x120寫入0x1,然后通過讀該寄存器來查看加鎖是否已經(jīng)成功。如果讀得的該寄存器的值是0x1,則說明已經(jīng)鎖定了橋上的寄存器區(qū),對寄存器的配置就可以進行了。而如果讀得的結(jié)果是0x0的話,說明鎖定失敗。對于寄存器讀操作來說,沒有加鎖的限制。因為讀操作不改變寄存器的值。當對寄存器配置結(jié)束后必須消除對寄存器區(qū)的鎖定,這樣其它的設備才可以對寄存器進行配置。具體方法是對鎖寄存器0x120寫0x0。

3 PCI主設備工作模式

由于ZCP320A處理器帶有PCI總線接口,所以我們設計一般是處理器上集成的PCI橋作為主設備,而外部擴展的PCI設備則作為從設備。下面以外擴的以太網(wǎng)卡RTL8139為例說明如何操作RTL8139中的寄存器。

在輸出通道中,AHB-PCI橋作為COREBUS的從設備,同時作為PCI總線的主設備。它從COREBUS上接收命令,然后在PCI總線上發(fā)起相應的傳輸。圖2描述了就是橋作為PCI 主設備時的內(nèi)部結(jié)構(gòu)。

3.1 初始化PCI橋

下面例程都是基于C語言,其中

#define REG_READ(addr,offset,data) par*data = (*(volatile UINT32*)((addr)+(offset)))

#define REG_WRITE(addr,offset,data) par (*(volatile UINT32*)((addr)+(offset))) = data

(1)鎖寄存器并判斷是否鎖成功

REG_WRITE(0xe0000000,0x120,1);

REG_ READ (0xe0000000,0x120,&data);

if(!(data & 0x1)) return;

(2)配置COREBUS窗口基地址寄存器和控制寄存器

在COREBUS 上的地址空間分配與在PCI總線上的地址空間分配是獨立的。PCI的數(shù)據(jù)空間在COREBUS上所占的范圍是1G+512M到2G-1之間,地址范圍是0x60000000到0x7fffffff 這里的基地址是固定的,為0x60000000。而地址范圍可以根據(jù)實際情況來確定,通過相關(guān)的控制寄存器實現(xiàn)。同時,ZCP320A要訪問的PCI設備的地址空間是不確定的,可能是所有的32位的地址空間的任意一段或幾段,所以需要一個地址轉(zhuǎn)換機制來實現(xiàn)地址空間從COREBUS到PCI總線之間的轉(zhuǎn)換。

對于RTL8139,窗口基地址寄存器和控制寄存器配置如下:

REG_WRITE(0xe0000000,0x204,0x60000008);

/*windows 0,BaseAddr 0x60000000,CoreBus,Prefech */

REG_WRITE(0xe0000000,0x214,0x10000043);

/* PCI Bus RTL8139 BaseAddr: 0x100000000~0x1000ffff,大小為64K */

REG_WRITE(0xe0000000,0x208,0x00000000);./* Disable windows 1 */

REG_WRITE(0xe0000000,0x20C,0x00000000); /* Disable windows 2 */

REG_WRITE(0xe0000000,0x210,0x00000000); /* Disable windows 3 */

(3)使能PCI橋作為主設備

REG_WRITE(0xe0000000,0x04,0x06); /* Enable PCI Master */

3.2 配置RTL8139網(wǎng)卡的PCI配置空間寄存器

對于ARM核來說,通過AHB-PCI橋?qū)ν獠縋CI設備進行配置訪問實際上是通過對配置地址寄存器(0xcf8)和配置數(shù)據(jù)寄存器(0xcfc)的訪問來實現(xiàn)的,要對外部PCI設備進行配置訪問。軟件設計人員要執(zhí)行以下兩步:

第一步是將地址寫入配置地址寄存器中,如圖3所示;

第二步是對配置數(shù)據(jù)寄存器進行讀或?qū)憽?/P>

配置地址寄存器的位31是配置使能位。在進行配置操作時必須將該位設置為1。30-24位是保留位;23-16位是總線號,直接連接在ZCP320A的PC 接口的總線為0號總線。15-11位是設備號,它主要取決于硬件信號IDSEL連接到哪個地址線(AD16-AD31)上,AD16-AD31分別表示設備號0-15。10-8位是功能號,對于單功能設備,其值為0。7-2是外部PCI設備的PCI配置空間寄存器偏移量。

要訪問RTL8139,需要對其PCI配置空間寄存器作如下配置:

REG_WRITE(0xe0000000,0xcf8,0x80001814); /* Access 8139 BAR0 */

REG_WRITE(0xe0000000,0xcfc, 0x10000000); /* Set BAR0=0x100000000 */

REG_WRITE(0xe0000000,0xcf8,0x80001804);

/* Access 8139 Command and Status Register */

REG_WRITE(0xe0000000,0xcfc, 0x02000147);

/* Enable Bus Master and Memory , IO Access */

/* 下面是讀取8139的VID和DID */

REG_WRITE(0xe0000000,0xcf8,0x80001800);

/* Access 8139 VID and DID Register */

REG_READ(0xe0000000,0xcfc, &VIDDID);

由此,我們可以利用已知的VID和DID來查找PCI總線是否存在該設備。由于8139的INTA直接連接到ZCP320A處理器的外部中斷1引腳,所以不需要對配置空間的0x3c進行寫操作。從此以后我們可以利用0x10000000作為RTL8139的基地址來訪問RTL8139的寄存器。如訪問偏移地址0x0000~0x0005來讀取8139的MAC地址,即

for(i=0;i<6;i++)

mac[i] = *(UCHAR *)(0x10000000 + i);

接下來我們就可以編寫RTL8139的驅(qū)動程序了,在此就論述了。

3.3 訪問外部PCI設備需要注意的事項

ZCP320A要通過PCI橋?qū)ν獠康腜CI設備進行配置訪問需要執(zhí)行的步驟如下:

(1) 在硬件上要保證連接正確,主要有所要配置的從設備的IDSEL連接到哪一根地址線上,也就是它的設備號是多少。

(2)對PCI配置地址寄存器(0xcf8)進行正確配置,使它和硬件連接一致,主要指總線號和設備號。

(3)對PCI配置數(shù)據(jù)寄存器(0xcfc)進行讀/寫訪問,從而實現(xiàn)對外部PCI設備的配置訪問。

另外要注意的是由于作配置訪問的時候要對配置地址和數(shù)據(jù)寄存器進行訪問,而這兩個寄存器屬于橋上的寄存器區(qū),所以要先對寄存器區(qū)進行鎖定,然后才能進行配置寫操作。

4 PCI從設備工作模式

在AHB-PCI 橋的輸入通道,橋作為PCI總線的從設備同時作為AHB PBUS 的主設備,外部擴展的PCI設備則為主設備。橋從PCI總線上接收傳輸命令并在PBUS上發(fā)起相應的操作訪問CPU的資源并反饋回去,通過FIFO將數(shù)據(jù)在PCI總線和PBUS之間傳輸實現(xiàn)兩種總線協(xié)議的轉(zhuǎn)換。

PBUS和PCI總線是PCI橋作為PCI從設備同時作為PBUS上的AHB主設備時的兩條連接總線,這兩條總線相互獨立又通過PCI橋聯(lián)系起來。

如圖4所示。

外部PCI主設備可以通過AHB-PCI橋來訪問PBUS上的SDRAM、FLASH以及PCI數(shù)據(jù)緩沖區(qū)A、B等。

至于PCI作為從設備,一般比較少用。所以在此不再介紹。

5 結(jié)束語

ZCP320A內(nèi)部集成的PCI總線接口,大大簡化了系統(tǒng)設計??梢詿o縫擴展PCI設備,例如網(wǎng)卡、顯卡等。訪問外部擴展的PCI設備只需按照上述說明即可。

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務中斷的風險,如企業(yè)系統(tǒng)復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務引領增長 以科技創(chuàng)新為引領,提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉