机载嵌入式PCI总线硬件设计和软件测试
时间:09-17
来源:互联网
点击:
3.2 配置PCI总线从设备
当中央资源作为主设备访问其它PCI设备时,必须对从设备进行适当的初始化。一般选用PCI配置周期设置PCI桥的关键配置寄存器,然后用普通PCI存储器周期设置其它寄存器。
Void ConfigPCISlave(UINT And,UINT Range,UINT PCIBAddr,UINT LRegPBA,UINT LocBAddr)
//功能:通过主桥产生PCI配置周期,去配置PCI总线上作为从方的PCI9056
//入口参数:
//ADn:设备号,亦即和被配置设备的IDSEL#相连的PCI地址
//Range:范围长度
//PCIBAddr:PCI基址
//LRegPBA:内部寄存器的PCI存储器基址(范围512B),
//亦即PCIBAR0值
//LocBAddr:局部基址
{UINT Abit32W,LROffset;
//------用配置周期-----------------------
//设置命令寄存器PCICR
//D0=IO Space="1:要响应I/O周期"
//D1=Memory Space="1:要响应Memory周期"
//D2=Master Enable="1:允许做Master"
ABit32W=GetConfigReg(ADn,PCI9056_PCICR)|0x07;
//读原值并置位
SetConfigReg(and,PCI9056_PCICR,ABit32W);
//PCIBAR0:其它寄存器的PCI基址.
SetConfigReg(ADn,PCI9056_PCIBAR0,LRegPBA);
//设置PCI基址,以便能访问其它寄存器
SetConfigReg(ADn,PCI9056_PCIBAR2,PCIBAddr);
//-----以下用PCI存储器周期-----------
//1.Space0的局部地址范围LAS0RR
LROffset=LRegPBA&0x001FFFFF;//取局部寄存器PCI基址的位移
ABit32W=~Range+1; //计算范围值的补码
SetPCIReg(LROffset,PCI_LAS0RR,Abit32W);
//2.Space0的局部基址LAS0BA
SetPCIReg(LROffset,PCI_LAS0BA,LocBAddr|1);
SetPCIReg(LROffset,PCI_EROMBA,0x38);
//4.Space 0/ROM的局部总线描述符LBRD0(P11-27)
//D1D0=11:Space 0-32Bit数据宽度.(复位缺省)
//D5..2=内部等待状态计数器.
//D6=1:需要READY#信号.(复位缺省)
//D7=1:允许连续Burst
//D7=0:Burst-4 Mode (复位缺省)
//D8=0:Space 0允许预取
//D9=0:扩展ROM允许预取
//用缺省值40430043H
SetPCIReg(LROffset,PCI_LBRD0,0x40430043);
ABit32W=GetPCIReg(LROffset,PCI_LBRD0);
if(ABit32W!=0x40430043)
printf("局部总线描述符LBRD0缺省值出错=%8x",ABit32W);
return;
}
PCI总线上的其它设备身份是动态变化的,所以对有能力做PCI主设备的,应该配置其局部空间到PCI空间映射的参数。
结语
PCI局部总线规范也在更新,向更快更强更省电的方向迈进。时钟速率由最初的33MHz提高到66MHz,数据宽度也由32位扩展到可支持64位,工作电压从5V转变为3.3V,使功耗更小。可以预计,嵌入式PCI总线将极大提高机载嵌入式计算机系统的总体性能。
当中央资源作为主设备访问其它PCI设备时,必须对从设备进行适当的初始化。一般选用PCI配置周期设置PCI桥的关键配置寄存器,然后用普通PCI存储器周期设置其它寄存器。
Void ConfigPCISlave(UINT And,UINT Range,UINT PCIBAddr,UINT LRegPBA,UINT LocBAddr)
//功能:通过主桥产生PCI配置周期,去配置PCI总线上作为从方的PCI9056
//入口参数:
//ADn:设备号,亦即和被配置设备的IDSEL#相连的PCI地址
//Range:范围长度
//PCIBAddr:PCI基址
//LRegPBA:内部寄存器的PCI存储器基址(范围512B),
//亦即PCIBAR0值
//LocBAddr:局部基址
{UINT Abit32W,LROffset;
//------用配置周期-----------------------
//设置命令寄存器PCICR
//D0=IO Space="1:要响应I/O周期"
//D1=Memory Space="1:要响应Memory周期"
//D2=Master Enable="1:允许做Master"
ABit32W=GetConfigReg(ADn,PCI9056_PCICR)|0x07;
//读原值并置位
SetConfigReg(and,PCI9056_PCICR,ABit32W);
//PCIBAR0:其它寄存器的PCI基址.
SetConfigReg(ADn,PCI9056_PCIBAR0,LRegPBA);
//设置PCI基址,以便能访问其它寄存器
SetConfigReg(ADn,PCI9056_PCIBAR2,PCIBAddr);
//-----以下用PCI存储器周期-----------
//1.Space0的局部地址范围LAS0RR
LROffset=LRegPBA&0x001FFFFF;//取局部寄存器PCI基址的位移
ABit32W=~Range+1; //计算范围值的补码
SetPCIReg(LROffset,PCI_LAS0RR,Abit32W);
//2.Space0的局部基址LAS0BA
SetPCIReg(LROffset,PCI_LAS0BA,LocBAddr|1);
SetPCIReg(LROffset,PCI_EROMBA,0x38);
//4.Space 0/ROM的局部总线描述符LBRD0(P11-27)
//D1D0=11:Space 0-32Bit数据宽度.(复位缺省)
//D5..2=内部等待状态计数器.
//D6=1:需要READY#信号.(复位缺省)
//D7=1:允许连续Burst
//D7=0:Burst-4 Mode (复位缺省)
//D8=0:Space 0允许预取
//D9=0:扩展ROM允许预取
//用缺省值40430043H
SetPCIReg(LROffset,PCI_LBRD0,0x40430043);
ABit32W=GetPCIReg(LROffset,PCI_LBRD0);
if(ABit32W!=0x40430043)
printf("局部总线描述符LBRD0缺省值出错=%8x",ABit32W);
return;
}
PCI总线上的其它设备身份是动态变化的,所以对有能力做PCI主设备的,应该配置其局部空间到PCI空间映射的参数。
结语
PCI局部总线规范也在更新,向更快更强更省电的方向迈进。时钟速率由最初的33MHz提高到66MHz,数据宽度也由32位扩展到可支持64位,工作电压从5V转变为3.3V,使功耗更小。可以预计,嵌入式PCI总线将极大提高机载嵌入式计算机系统的总体性能。
总线 电流 嵌入式 PIC IDT 电阻 DAC 电压 相关文章:
- 一种新型防伪读码器的设计(01-01)
- 基于ARM与DSP的嵌入式运动控制器设计(04-25)
- 基于ARM核的AT75C220及其在指纹识别系统中的应用(05-24)
- 基于nRF2401智能小区无线抄表系统集中器设计(04-30)
- 基于FPGA安全封装的身份认证模型研究(05-27)
- 高精度压力测控系统的试验研究(04-08)
