标题:
ARM922T核ZCP320A处理器PCI总线操作(2)
[打印本页]
作者:
yuyang911220
时间:
2016-11-22 21:15
标题:
ARM922T核ZCP320A处理器PCI总线操作(2)
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,%26;amp;data); if(!(data %26;amp; 0x1)) return; (2)配置COREBUS窗口基地址寄存器和控制寄存器在COREBUS 上的地址空间分配与在PCI总线上的地址空间分配是独立的。PCI的数据空间在COREBUS上所占的范围是1G+512M到2G-1之间,地址范围是0x60000000到0x7fffffff 这里的基地址是固定的,为0x60000000。而地址范围可以根据实际情况来确定,通过相关的控制寄存器实现。同时,ZCP320A要访问的PCI设备的地址空间是不确定的,可能是所有的32位的地址空间的任意一段或几段,所以需要一个地址转换机制来实现地址空间从COREBUS到PCI总线之间的转换。对于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网卡的PCI配置空间寄存器对于ARM核来说,通过AHB-PCI桥对外部PCI设备进行配置访问实际上是通过对配置地址寄存器(0xcf8)和配置数据寄存器(0xcfc)的访问来实现的,要对外部PCI设备进行配置访问。软件设计人员要执行以下两步:第一步是将地址写入配置地址寄存器中,如图3所示;第二步是对配置数据寄存器进行读或写。
配置地址寄存器的位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 Comman
d a
nd 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, %26;amp;VIDDID); 由此,我们可以利用已知的VID和DID来查找PCI总线是否存在该设备。由于8139的INTA直接连接到ZCP320A处理器的外部中断1引脚,所以不需要对配置空间的0x3c进行写操作。从此以后我们可以利用0x10000000作为RTL8139的基地址来访问RTL8139的寄存器。如访问偏移地址0x0000~0x0005来读取8139的MAC地址,即 for(i=0;i<6;i++) mac
= *(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主设备可以通过AHB-PCI桥来访问PBUS上的SDRAM、FLASH以及PCI数据缓冲区A、B等。 至于PCI作为从设备,一般比较少用。所以在此不再介绍。 5 结束语 ZCP320A内部集成的PCI总线接口,大大简化了系统设计。可以无缝扩展PCI设备,例如网卡、显卡等。访问外部扩展的PCI设备只需按照上述说明即可。
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0