在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
芯片精品文章合集(500篇!)    创芯人才网--重磅上线啦!
查看: 8879|回复: 8

[原创] MPC8272的上电起动过程解析(二)

[复制链接]
发表于 2010-4-2 21:25:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
一、处理器读取的第一条指令在/uboot/cpu/mpc8260/start.S中的_start:标号处执行。在完成了CPU本身基本初始化以后,主要是初始化CPU内部寄存器的一些状态,
.globl
_start

_start:

li
r21, BOOTFLAG_COLD
/* Normal Power-On: Boot from FLASH*/


nop


b
boot_cold

boot_cold:
#if defined(CONFIG_MPC8260ADS) && defined(CFG_DEFAULT_IMMR)


lis
r3, CFG_DEFAULT_IMMR@h
保留IMMR默认地址
README文档中找到:如果CONFIG_MPC8260ADS被定义,则CONFIG_ADSTYPE的值可能是:CFG_8272ADS
IMMR:内部内存映射寄存器(internal memory map register),定义指定设备以及指定基地址的内存映射
nop



lwz
r4, 0(r3)


nop


rlwinm
r4, r4, 0, 8, 5


nop


oris
r4, r4, 0x0200


nop


stw
r4, 0(r3)


nop

#endif /* CONFIG_MPC8260ADS && CFG_DEFAULT_IMMR */

以上部分是设置了默认IMMR地址CFG_DEFAULT_IMMR[58]位清零其他数值不变并且与0x200进行或操作最后放回到r3寄存器中。由于编译时设置了TEXT_BASE的值为0xFFF00000,所以没有定义LOWBOOT,因此不使用IMMR的默认地址。此段代码可以被注释掉
boot_warm:

mfmsr
r5
/* save msr contents
*/

MSR:设备状态寄存器(machine state register),设置内核当前使用状态,基本上是初始化内核第一个被配置的寄存器,属于SLR寄存器组,但是不能用mfsprmtspr寄存器访问,使用专门的mtmsrmfmsr才能访问。
#if defined(CFG_DEFAULT_IMMR)

lis
r3, CFG_IMMR@h


ori
r3, r3, CFG_IMMR@l


lis
r4, CFG_DEFAULT_IMMR@h


stw
r3,
0x1A8(r4)
为什么是这个值?答:IMMR寄存器地址为0x101A8,这里是向寄存器IMMR中写值0xF000 0000
#endif /* CFG_DEFAULT_IMMR */
我个人认为以上都是配置内存处理器内部映射的基地址
接下来
bl
init_8260_core

init_8260_core

/* Initialize machine status; enable machine check interrupt
*/



li
r3, MSR_KERNEL
/* Set ME and RI flags */

ME位:(machine check enable
RI位:Recoverable interrupt

rlwimi
r3, r5, 0, 25, 25
/* preserve IP bit set by HRCW */

#ifdef DEBUG

rlwimi
r3, r5, 0, 21, 22
/* debugger might set SE & BE bits */

#endif

SYNC
/* Some chip revs need this... */

Sync指令:为了防止数据缓存与指令缓存产生冲突,有些处理器需要执行,尤其在mtspr指令前,以及tibie, tibla指令执行后需要执行。大多数msr寄存器,spr寄存器操作后都需要执行sync

mtmsr
r3
保存MSR

SYNC


mtspr
SRR1, r3
/* Make SRR1 match MSR */

设置保存MSR
接下来指向寄存器基地址
       lis
r3, (CFG_IMMR+IM_REGBASE)@h
CFG_IMMR=0xF000 0000

IM_REGBASE没有找到
为什么是这个地址?
答:IM_开头的在ppc_asm.tmpl文件中,
IM_REGBASE= 0x10000
#if !defined(CONFIG_COGENT)
       lis
r4, CFG_SYPCR@h
CFG_SYPCR=0xFFF FFFC3


ori
r4, r4, CFG_SYPCR@l


stw
r4, IM_SYPCR@l(r3)

#endif /* !CONFIG_COGENT */

把系统保护控制寄存器SYPCR中的值拷贝到处理器中,对系统监视器,看门狗和总线监视器时钟进行配置。我连看门狗都没有,所以也没有管它,应该不会有什么影响。
#if defined(CONFIG_WATCHDOG)

li
r4, 21868
/* = 0x556c */


sth
r4, IM_SWSR@l(r3)


li
r4, -21959
/* = 0xaa39 */


sth
r4, IM_SWSR@l(r3)

#endif /* CONFIG_WATCHDOG *
如果需要初始化看门狗,对其进行初始化。“CFG_”作为prefix的,都是头文件中已经配置好用来进行设定的值。这个取决于个人硬件的配置。看门狗有机会在研究。
发表于 2010-4-3 22:52:57 | 显示全部楼层
thank for sharing
发表于 2010-4-26 12:57:30 | 显示全部楼层
正看这方面的东西呢,学习。
发表于 2010-5-1 15:58:53 | 显示全部楼层
have a look
发表于 2010-8-31 00:23:58 | 显示全部楼层
可以继续往后写啊
发表于 2013-6-6 15:07:28 | 显示全部楼层
好东西。
发表于 2013-7-3 21:30:59 | 显示全部楼层
很深入啊
发表于 2013-7-23 08:47:17 | 显示全部楼层
不错啊,写得很好。学习了。。。。。。。。
发表于 2016-1-14 13:44:53 | 显示全部楼层
看不懂
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-5-2 11:48 , Processed in 0.029935 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表