powerpc构架的处理器,对于内设和外设的访问比较奇怪(当然是和常见的ARM比起来),这些地址是可以重新配置的,包括配置这些配置的寄存器地址也是可配置的,以MPC8313的仿真器初始化文件为例
#setMMRBaseAddr 0xFF400000 ------------------------>复位后默认的地址是0xff400000
writereg MBAR 0xFF400000
# change internal MMR base from 0xff400000 (reset value) to 0xe0000000
writemem.l 0xff400000 0xe0000000 # IMMRBAR = 0xe0000000 ------------------------>把0xff400000改成了0xe0000000,从此以后对IMMRBAR的访问基址都是0xe0000000了
#setMMRBaseAddr 0xe0000000
writereg MBAR 0xe0000000
##############################################
# System Configuration - Local Access Windows
##############################################
# Local Bus Local Access Windows
#################################
# WINDOW 0 - NOR FLASH
writemem.l 0xe0000020 0xfe000000 # LBLAWBAR0 - begining at 0xfe000000 ------>以后凡是对0xfe000000的寻址都会出现在CS0和它的地址数据线上了
writemem.l 0xe0000024 0x80000018 # LBLAWAR0 - enable, size = 32MB
# WINDOW 1 - NAND Flash
writemem.l 0xe0000028 0xf8000000 # LBLAWBAR1 - begining at 0xf8000000
writemem.l 0xe000002c 0x80000018 # LBLAWAR1 - enable, size = 32MB
# WINDOW 2 - VSC7385
writemem.l 0xe0000030 0xf0000000 # LBLAWBAR2 - begining at 0xfc100000
writemem.l 0xe0000034 0x80000010 # LBLAWAR2 - enable, size = 128kB
# WINDOW 3 - Read Write Buffer
writemem.l 0xe0000038 0xfa000000 # LBLAWBAR3 - begining at 0xfa000000
writemem.l 0xe000003c 0x8000000e # LBLAWAR3 - enable, size = 32kB
# PCI Local Access Windows
#################################
# WINDOW 0
writemem.l 0xe0000060 0x80000000 # PCILAWBAR0 - begining at 0x80000000
writemem.l 0xe0000064 0x8000001c # PCILAWAR0 - enable, size = 512MB
# WINDOW 1
writemem.l 0xe0000068 0xa0000000 # PCILAWBAR1 - begining at 0xa0000000
writemem.l 0xe000006c 0x8000001c # PCILAWAR1 - enable, size = 512MB
# DDR Local Access Windows
#################################
# WINDOW 0 - 1st DDR SODIMM
writemem.l 0xe00000a0 0x00000000 # DDRLAWBAR0 - begining at 0x00000000
writemem.l 0xe00000a4 0x8000001a # DDRLAWAR0 - enable, size = 128MB
#*********************************
# DDR2 Controller Registers
#*********************************
#DDRCDR
writemem.l 0xE0000128 0x73000002
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
总结一下:我要说2个意思,第一个是,我们平时访问的外设的控制寄存器都在IMMRBAR中,偏移量是固定的,基址默认是0xff400000,但是这个基址可以改变。第二个意思是,localbus总线,ddr,pci等的地址和大小也是可以配置的。所有这些配置都在IMMRBAR中叫“System Configuration Registers”的地方配置。
再补充一下:powerpc的windows设置和片选地址的设置是两码事,windows的设置对于core而言,不同地址寻址去的地方不同(2个寄存器,一个是基址一个是属性,包括大小和去向),而片选地址设置是为了产生外部的读写控制信号,二者没有直接的关系,但是一般来说,windows中的LocalBus空间要大于所有的片选空间。