第一部分、MPC85xx/MPC86xx处理器中的寄存器
MPC85xx/MPC86xx处理器中有两类寄存器:
1. PowerPCE500(MPC85xx)内核的内部寄存器,如MSR,HID寄存器等,使用mtspr,mfspr指令可以对这些寄存器进行读写。
PowerPC E600(MPC86xx) 内核的内部寄存器,如IBAT,DBAT寄存器等,使用mtspr,mfspr指令可以对这些寄存器进行读写
2. MPC85XX/MPC86xx处理器的内部寄存器,这些寄存器采用存储器映射进行寻址,其地址空间大小为1MB,如LAWBAR0,LAWBAR1寄存器。用户可以使用stw和lwz等存储器读写指令对这些存储器映射的寄存器进行访问。
关于 MPC85XX/MPC86xx处理器的内部寄存器Local AccessRegister(局部访问寄存器)和Local Buscontroller Register(局部总线控制寄存器)
(1). LocalAccess Register用于定义MPC85xx的数据访问空间。
(2). LocalBus controller Register用于配置MPC85xx处理器的局部总线。处理器的局部总线可以与异步存储器如Nor flash进行连接,也可以连接SDRAM 。对于Enhance LocalBus Controller的设置主要由BR0-BR3,以及OR0-OR3决定
第二部分、Mmu初始化和io访问时处理器寄存器的应用
注意MMU模块中包含TLB即pte的cache。
MMU初始化
1. E500 core MMU初始化重要的有2个,TLB和LAW
刚开始reset时,MMU初始化好了,TLB entry0映射4k,LAW分别对应nor flash外设。随着系统运行到sysLib.c文件,加载sysPhysMemDesc和sysStaticTlbDesc表。其实就是写MSR和LAW寄存器。sysStaticTlbDesc数组用于配置TLB1的地址映射,sysPhysMemDesc用于配置TLB0的地址映射。参考E500 MMU架构研究及VxWorks下的优化方案
sysStaticTlbDesc要保证为vxworks启动和基本操作所需的各地址区域具有地址空间0的配置;sysPhysMemDesc描述了物理内存中的一个连续的块,可包含的映射空间有内存、Flash、ROM和IO设备。vxworks下默认配置中,地址空间1的全部系统内存在sysPhysMemDesc中。
2. E600 core MMU初始化主要有 BAT/PTE和LAW。
刚开始reset时,因为MMU有一些杂乱的初始值,所以必须关闭MMU,此时没有MMU的地址翻译,EA=RA。在以后系统打开MMU,但是系统MMU映射方式有两种PTE和BAT。在sysLib.c文件,分别有sysPhysMemDesc和sysBatDesc表,即写TLB和BAT寄存器。sysPhysMemDesc表写TLB寄存器,sysBatDesc写BAT寄存器为了能够使cpu可以访问外设地址空间。顺便提下在2440bsp中只有sysPhysMemDesc。
在初始化时,上面的Desc数组修改的寄存器应该包含BAT、TLB、LAWBAR等底层寄存器,应该没有修改BR寄存器。
nor flash一般位于CS0,通过GPCM,系统复位已经做好了。
pci设备不需要片选信号,通过访问mpc85xx pci相应寄存器也可以控制。
IO访问
1. E500 core 访问外设
首先系统先根据TLB把EA(Effectiveaddress)转换为RA(Real Address),再通过Local Access Register(局部访问寄存器),根据EA选择合适的controller,最终把RA(RealAddress)放到地址总线上去。而通过Local Bus controllerRegister(局部总线控制寄存器)提供给外设控制信号。
2. E600 core 访问外设
首先系统先根据BAT/PTE,把EA转换为RA,再通过Local AccessRegister根据EA选择合适的controller,最终把RA(Real Address)放到地址总线上去。而通过Local Buscontroller Register(局部总线控制寄存器)提供给外设控制信号。
参考文献:
PowerPC小记 :http://blog.163.com/symphony_sol/blog/static/30279623200992893636236/
PowerPC的MMU初始化 :http://blog.chinaunix.net/uid-24148050-id-2951898.html