ARM922T核ZCP320A处理器PCI总线操作
配置地址寄存器的位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配置空间寄存器偏移量。 外部PCI主设备可以通过AHB-PCI桥来访问PBUS上的SDRAM、FLASH以及PCI数据缓冲区A、B等。
要访问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的驱动程序了,在此就论述了。
3.3 访问外部PCI设备需要注意的事项
ZCP320A要通过PCI桥对外部的PCI设备进行配置访问需要执行的步骤如下:
(1) 在硬件上要保证连接正确,主要有所要配置的从设备的IDSEL连接到哪一根地址线上,也就是它的设备号是多少。
(2)对PCI配置地址寄存器(0xcf8)进行正确配置,使它和硬件连接一致,主要指总线号和设备号。
(3)对PCI配置数据寄存器(0xcfc)进行读/写访问,从而实现对外部PCI设备的配置访问。
另外要注意的是由于作配置访问的时候要对配置地址和数据寄存器进行访问,而这两个寄存器属于桥上的寄存器区,所以要先对寄存器区进行锁定,然后才能进行配置写操作。
4 PCI从设备工作模式
在AHB-PCI 桥的输入通道,桥作为PCI总线的从设备同时作为AHB PBUS 的主设备,外部扩展的PCI设备则为主设备。桥从PCI总线上接收传输命令并在PBUS上发起相应的操作访问CPU的资源并反馈回去,通过FIFO将数据在PCI总线和PBUS之间传输实现两种总线协议的转换。
PBUS和PCI总线是PCI桥作为PCI从设备同时作为PBUS上的AHB主设备时的两条连接总线,这两条总线相互独立又通过PCI桥联系起来。
如图4所示。
至于PCI作为从设备,一般比较少用。所以在此不再介绍。
5 结束语
ZCP320A内部集成的PCI总线接口,大大简化了系统设计。可以无缝扩展PCI设备,例如网卡、显卡等。访问外部扩展的PCI设备只需按照上述说明即可。
PCI总线 相关文章:
- 基于PCI总线的双DSP系统及WDM驱动程序设计(01-26)
- 1553B总线在嵌入式系统中的应用(01-29)
- 基于DSP的PCI总线数据采集系统的研究(03-02)
- 采用PCI9052设计PCI总线运动控制卡(05-04)
- 采用8位单片机驱动PCI总线网卡的设计方案(03-02)
- 基于cPCI总线的嵌入式遥测前端处理器系统设计(04-27)