基于MPC8280的PCI驱动设计方案
D[31:0]的数据和PCI_C/_BE完整的向下传递;若发现目标设备为本层设备,将操作变为Type0操作,选中目标设备。
2.3 内存空间读写设计
MPC8280的PCI内存读写分为MPC8280主动发起的PCI内存空间读写和MPC8280被动引起的PCI内存空间读写。在进行PCI内存空间读写时,需地址译码。
MPC8280主动发起的PCI内存空间读写,MPC8280侧地址译码流程如图5所示。先对操作地址进行判断,若落在MPC8280的内部存储器映射寄存器(IMMR)范围内,接着就需判断是否落在PCI寄存器,根据判断结果决定是否对PCI寄存器进行操作或不做处理。若不是落在MPC8280的IMMR范围,需判读是否落在PCI OutBound空间,若落于PCI OutBound空间,则需根据寄存器的配置,对地址进行译码,并将译码后的结果在地址时隙被发送到PCI总线的地址管脚,若未落在PCI OutBound空间,却落于PCIBR0或PCIBR1寄存器定义的范围内,则将地址直接通过地址时隙发送至PCI总线的地址管脚。
MPC8280被动引起的PCI内存空间读写,即由外部PCI主机(PCI Master)通过PCI对MPC8280发起PCI内存空间读写,MPC8280侧地址译码流程如图6所示。MPC8280在收到外部发起的PCI数据传输时,会判断PCI总线上的地址是否落在寄存器定义的PCIInbound空间或是落于PIMMR空间。若是,就根据寄存器配置,对外部PCI总线上的地址进行译码,然后判断译码后的地址是否落在PCI内存空间,若落于PCI内存空间,则进行数据操作,并设置Devsel信号,否则将进行60x总线操作。
2.4 I/O空间读写设计
PCI的I/O空间读写流程可参见内存空间读写流程,其与内存空间读写的不同在于:在配置时,对应的InBound空间和OutBound空间配置为I/O空间,AD[31:0]中所有bit为其提供一个完整的地址,AD[1:0]用来产生Devsel信号和本次传输中最低有效的字节数;而内存空间地址译码只使用AD[31:2],这说明内存空间操作时,每次操作传送4 Byte数据,操作后地址将递增4,以备进行后续传送。
3 结束语
PCI初始化配置完毕后,CPU通过线程调用PCI配置空间读写函数对外部的交换芯片进行轮询探测,正确获取了BCM56514的设备ID为B514,成功发现BCM56514芯片,进而对BCM56514进行了配置和管理,并通过调用PCI内存空间读写函数和I/O空间读写函数对BCM56514的内存空间和I/O空间进行了读写测试,实现了与BCM56514的数据信息交互,为实现MPC8280在大容量路由交换领域得到成熟应用提供了接口驱动支持。
- 基于MPC8280的PCI驱动设计(09-12)
- 一种基FPGA和DSP的高性能PCI数据采集处理卡设计(08-26)
- 用双端口RAM实现与PCI总线接口的数据通讯(05-06)
- 基于PCI总线和DSP芯片的图像处理平台的硬件设计(07-06)
- 基于DSP和PCI总线的通用数字信号处理系统(11-13)
- 一种基于PCI总线和DSP技术的虚拟仪器设计(03-16)