本文导读:讲述了MPC8309体系结构的重启过程,为BootLoader移植提供了基础
Keywords:mpc8309,重启,Flash
1.重启导致的硬件信号
首先,从硬件设备的角度来看,上电重启会有三种输入输出信号
1.1 PORESET
PORESET信号表示上电重启主要初始化各种设备的各种属性的重启流。
1.2 HRESET
HRESET表示硬件重启信号,硬重启后,各种寄存器被设置成默认值
1.3 CFG_RESET_SOURCE[0:3]。
此信号标志重启配置字的选择源。当设备没有重启时,这些信号还有其他的功能,当PORESET信号为正时候,这些信号决定哪个设备加载重启配置字,如下图:
2. 哪些会导致重启
2.1上电重启
2.2外部硬重启
2.3软件看门狗重启
2.4系统总线监视重启
2.5checkstop重启
2.6software hard重启
3 重启配置字
•3.1 Reset configuration word lowregister (RCWLR)
此寄存器主要设置时钟
•3.2 Reset configuration word highregister (RCWHR)
该寄存器两个重要位:BMS[5], BOOTSEQ[6-7].BMS初始化MSR[IP]的值,改值指定了中断向量的位置。默认情况下,定义了启动ROM位置位8Mb的空间。0x0000_0000-0x007F_FFFF或者0xFF80_0000-0xFFFF_FFFF,当重启的时候,从这两个地址获取启动码,这个异常被向量到0x000n_nnnn或者0xFFFn_nnnn物理地址中。此位指定了中断向量偏移量0xFFF或者0x000,n_nnnn是异常向量的偏移值
BMS:0MSR[IP]初始值为0b0.获取启动码开始地址0x0000_0100.异常向量偏移物理地址位0x000n_nnnn
BMS:0MSR[IP]初始值为0b1.获取启动码开始地址0xFFF0_0100.异常被向量到偏移物理地址位0xFFFn_nnnn
BOOTSEQ[6-7]主要设置以IIC方式启动,这里不予说明
ROMLOC[9-11,RLEXT[12-13]
•3.3Reset status register (RSR)
•3.4System PLL mode register (SPMR)
4 内存基本情况
上面的描述都是mpc8309的芯片资料的描述,在这里只是简单的整理,有了上面的基础知识后,便于做后面的工作
一般地,硬件启动会将bootrom存在FLASH中,系统上电后会从FLASH启动。可是FLASH的地址一般又不会在0x0000_0000开始,以 32M FLASH启动为例可以将启动空间设置为0xFE00_0000-0xFFFF_FFFF。所以必须加入适当的程序来改变这一过程。
首先来看下内存映射的大致情况,在32位地址总线空间被划分为几个区域,也称为窗口,每个窗口被映射到特定区域,而这几个区域则指向特定的硬件接口。
Window Number
Target Interface
BASE ADD
size
0
IMMR
0xFF40_0000
2 Mbyte
1
Local bus(boot)
0xFF80_0000
8 Mbytes
2
Local bus
0x8000_0000
1 Mbyte
3
Local bus
0xC000_0000
256 Mbytes
4
Local bus
Unused
Unused
5
DDR2 SDRAM
0x0000_0000
2 Gbytes
6
DDR2 SDRAM
Unused
Unused
7
PCI
0xA000_0000
1 Mbyte
5从FLASH加载重启配置字
由于内存空间被分为几个区域,那么,必须有相应的硬件来支持分区域。这个就是寄存器。IMMR寄存器在所有区域之前,是因为在这个区域中有寄存器来识别其他的区域分区情况。而每个区域(窗口)则被定义两部分:
Base address:High-order address bits defininglocation of the window in the initial address space
Window size/attributes: Window enable, window size1
由于本硬件设计中Flash直接通过ebus与CPU相连.直接使用LBLAWBAR0, LBLAWAR0个寄存器来描述区域1(window1)的情况,当然这两个寄存器在区域0中。
LBLAWBAR0:窗口基址寄存器
LBLAWBAR0[BASE_ADDR]根据重启配置字RCWHR[BMS]来决定
RCWHR[BMS]
LBLAWBAR0[BASE_ADDR]
0
0x00000
1
0xFF800
LBLAWAR0:窗口属性寄存器
LBLAWAR0[EN]:设置区域是否有效
LBLAWAR0[SIZE]:用来设置区域的大小
这两个寄存器联合来设置区域的地址,大小,有效性。
上面说到的地址都是虚拟地址,也就是CPU使用的地址。余下的问题就是怎么访问Flash,以及从FLASH哪里开始读取启动码
从内存的基本情况一节看,基于IMMR的映射,这里有2Mb的地址空间,指出了系统中的各种总线,GPIO等系统资源的基地址和范围。
接下来就是通过ebus总线访问Flash了。由于本硬件设计中的CS0接到Flash的片选信号。故用BR0和OR0来设置FLASH的配置。
MSR[IP]为1决定中断向量的前缀为0xFFF,启动存储空间的位置为0xFF80_0000~0xFFFF_FFFF;SWEN位为0,禁止软件看门狗;ROMLOC位为0b110,RLEXT位为0b00确定了选择local bus GPCM-16bit ROM为启动ROM。复位向量和本地地址映射的默认启动ROM访问将直接指向ROMLOC指定的接口。选中的启动ROM的本地访问窗口(LBLAW0)将被使能,并初始化基地址LBLAWBAR0为0xFF80_0000,窗口大小为8M。这时,Local Bus上的片选CS0的寄存器值为BR0:0000_0001,OR0:0000_0FF7。整个4G空间全是ROM,每32M重复一次
中断向量的前缀为0xFFF,复位向量为100,决定了系统复位后的第一条指令从0xFFF0_0100处获得。RCWHR中的BMS位决定了从哪个位置读取.
本文总结:本文说明了重启源(Flash)的选择, 重点讨论了在Flash中的某个位置选择启动。 2012.1.20