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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > ARM922T核ZCP320A處理器PCI總線操作

          ARM922T核ZCP320A處理器PCI總線操作

          作者: 時(shí)間:2005-03-23 來源:網(wǎng)絡(luò) 收藏

          摘要:本文簡(jiǎn)要說明了內(nèi)部集成的接口、編程模式及工作模式,并介紹了作為主設(shè)備時(shí)如何訪問外部擴(kuò)展的RTL8139 網(wǎng)卡設(shè)備。為以后的設(shè)計(jì)者提供借鑒及應(yīng)用基礎(chǔ)。

          關(guān)鍵詞: RTL8139

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

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

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

          1 PCI總線接口概述

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

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

          要訪問RTL8139,需要對(duì)其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總線是否存在該設(shè)備。由于8139的INTA直接連接到ZCP320A處理器的外部中斷1引腳,所以不需要對(duì)配置空間的0x3c進(jìn)行寫。從此以后我們可以利用0x10000000作為RTL8139的基地址來訪問RTL8139的寄存器。如訪問偏移地址0x0000~0x0005來讀取8139的MAC地址,即

          for(i=0;i6;i++)

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

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

          3.3 訪問外部PCI設(shè)備需要注意的事項(xiàng)

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

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

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

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

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

          4 PCI從設(shè)備工作模式

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

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

          如圖4所示。

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

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

          5 結(jié)束語

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



          關(guān)鍵詞: 總線 操作 PCI 處理器 ZCP320A ARM922T

          評(píng)論


          相關(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); })();