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配置空间寄存器偏移量。
要访问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之间传输实现两种总线协议的转换。
《ARM922T核ZCP320A处理器PCI总线操作(第4页)》