免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2570 | 回复: 0
打印 上一主题 下一主题

MIPS CPU上电跳转分析 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-02-23 17:50 |只看该作者 |倒序浏览
MIPS上电跳转分析
本文原创 欢迎转载
Cy158358.cublog.cn

之前一直想看看mips的上电跳转具体是如何实现的,无赖网上基本上就没有能让人一看就明白的相关资料,所以抽时间将这个知识点整理了一下,请大家批评指正.
下面将以一个具体的例子来进行分析.

相关硬件信息:
Cpu:OPL-06752-AG
Flash:s29gl064n90tfi04
Cpu的CS0做为Flash的片选

相关的寄存器信息:
Cpu有以下几个关键寄存器:
CS0 Configure Register:
缺省配置为:CS is valid, Select Parallel Flash, 8-bit mode for data bus
(CS0有效,使用并行flash,8bit的总线模式)

CS0 Base Address Register:
缺省配置为: the value of ADDR[31:12] of the base physical address is 0x1FC00

CS0 Address Mask Register:
缺省配置为: The address mask of ADDR[27:12] is 0xFC00
(以上两项决定了在 [0x1FC00000 ,0x1FFFFFFF)这4M空间进行寻址时CS0片选有效)

根据以上内容我们可以确定cpu与flash的硬件连接方式为:flash地址和数据总线并到cpu的地址和数据总先上,flash的片选和CS0连接,flash位宽模式设置为8bit模式.

好了,明确了以上硬件信息后我们可以来着手分析mips的上电过程了:
1.     上电后mips从0xbfc00000地址处取第一条指令,这个地址位于kseg1区域(只有这个区域是unmaped且uncached的,相关的知识请自行查找),注意这是一个虚拟地址,必须由cpu转换成物理地址后才能使用,这个区域的转换原则是将bit29~bit31剥离(由于只是进行了如此简单的转换,所以通常会把这个区域的虚拟地址叫做”未转换的地址”),从而在地址总线上出现的逻辑为0x1fc00000.
2.     注意前面说明的CS0 Address Mask Register和CS0 Base Address Register寄存器缺省值, 0x1fc00000恰好落在CS0的片选地址空间,所以CS0产生了,flash被使能.
3.     到这里看懂的人就要发问了,flash只有8M字节,而寻址的地址为508M空间的位置,这是怎么回事呢.打开flash的数据手册,看一下片子的地址线,原来它只有A0~A21共22根线,然后由于工作在8bit模式,数据线d15被用做地址线的最低位A-1,所以最终应该有23根地址线连在cpu的地址总线上,又由于A22被mask掉了,所以flash看到的地址为0.
到这里是不是对”从0xbfc00000处取第一条指令”这句话有了更深的理解呢?


地址逻辑图:
0001 1111 1100 0000 0000 0000 0000 0000  base:1fc00000
0000 1111 1100 0000 0000 0000 0000 0000  mask:0fc00000
0001 1111 1100 0000 0000 0000 0000 0000  addr:1fc00000
0000 xxxx xx01 1111 1111 1111 1111 1111  2M 地址线21根 addr & ~mask = 10000000=0
0000 xxxx xx11 1111 1111 1111 1111 1111  4M 地址线22根 addr & ~mask = 10000000=0
0000 xxxx xx11 1111 1111 1111 1111 1111  8M 地址线23根 addr & ~mask = 10000000=0
0000 xxxx xx11 1111 1111 1111 1111 1111  16M 地址线24根 addr & ~mask = 10000000=0
0000 xxxx xx11 1111 1111 1111 1111 1111  32M 地址线25根 addr & ~mask = 10000000=0
0000 xxxx xx11 1111 1111 1111 1111 1111  64M 地址线26根 addr & ~mask = 10000000=0
0000 xxxx xx11 1111 1111 1111 1111 1111  128M 地址线27根 addr & ~mask = 10000000=0
0000 xxxx xx11 1111 1111 1111 1111 1111  256M 地址线28根 addr & ~mask = 10000000=0



本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/69239/showart_2185354.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP