Mpc8309上电复位过程

2019-04-14 21:42发布

本文导读:讲述了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