- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
AT91系列微处理器启动过程的分析与实现.doc
AT91系列微处理器启动过程的分析与实现|第1
内容显示中 [ 相关贴图 ]
500)this.style.ouseg(this)
图1Remap过程
500)this.style.ouseg(this) [ 相关贴图 ]
500)this.style.ouseg(this)
图2系统初始化过程
系统存储介质和地址映射
开发板的Flash存储器采用ATMEL公司的AT49BV1614A,板上采用的SRAM是ISSI公司的IS61LV51216,AT91M55800A片内还集成了8K字节的片内SRAM。Flash存储器连接在AT91M55800A的片选0引脚上,SRAM连接在片选1引脚上。上电时,Flash映射地址为0片内RAM映射地址为0片外SRAM不可见。
系统上电时,从地址0开始读取上电复位中断处理程序,进行系统初始化。此时,地址0向的是连接在片选0的存储器器件,所以要在片选0上连接Flash。由于Flash的运行速度相对RAM要慢,且中断处理程序在Flash中无法改动,所以,人们希望程序在RAM中运行。为此,ARM的CPU提供了Remap命令来解决这个问题,当置位M55800A的重映射控制寄存器的重映射命令位(EBI_RCR的RCB位)后,内部RAM就映射到地址0,配置EBI寄存器后,Flash的地址是0SRAM的地址是0这就是系统的重映射过程。
启动过程的分析与实现
一般而言,一个ARM的启动代码必须要完成以下部分的初始化:定义入口点、设置中断/异常向量、初始化存储系统(如果需要,进行代码的搬移)、初始化堆栈、初始化I/O设备、初始化中断中用到的变量、开中断、必要时改变处理器的模式和处理器的状态、初始化C程序中用到的存储区、引导处理器进入C程序。其中的难点在于内存系统的重映射和对C程序用到的存储区进行初始化。
(1)设置入口指针:启动程序首先必须定义入口指针,而且整个应用程序只有一个入口指针。
(2)设置中断向量:ARM7要求中断向量表必须设置在从0地址开始,连续8×4字节的空间,分别是复位、未定义指令错误、软件中断、预取指令错误、数据存取错误、IRQ、FIQ和一个保留的中断向量。由于Flash在系统Remap之前指向地址0,所以要在Flash中安排中断向量。此时,真正有用的只有位于地址0的复位向量,在此安排一条BInitreset指令,转向引导程序,其余中断未用。接下来在Flash中构建一个新的中断向量表,用于在Remap之后复制到片内RAM中,采取相对寻址的方式。
系统复位时,外部总线并没有被配置,此时片选0的总线等待周期是8,为了加速启动过程,可以在这时把片选0的总线等待周期设为与FlashROM相应的数值。并且配置AT91M55800的PLL,使系统从慢晶振(32768Hz)转到32MHz。
由于AT91M55800A的IRQ和FIQ中断是由先进中断控制器(AIC)管理的,所以,要对AIC进行配置。
将刚才构建的中断向量表复制到位于0x300000的片内RAM中,这样在Remap后,重新映射到地址0的片内RAM中就有了中断向量表。
(3)进行Remap。
(4)初始化堆栈和寄存器:堆栈设置在AT91M55800A的片内RAM中,可以提高运行速度。系统堆栈初始化取决于用户使用了哪些中断,以及系统需要处理哪些错误类型。一般来说管理者堆栈必须设置,如果使用了IRQ中断,则IRQ堆栈也必须设置。进入相应的处理器模式,直接设置堆栈指针即可。
(5)改变处理器模式、状态:对于不带操作系统的用户程序,系统可以处在user模式下;对于mC/OS-II,系统应当工作在svc模式下,否则无法完成任务的切换。
(6)初始化C语言所需的存储器空间:拷贝程序到片外RAM中,完成加载时域到运行时域的转换,初始化R有16位THUMB和32位ARM两种指令集。使用16位的存储器可以降低成本,在这种情况下,THUMB指令集的整体执行速度比ARM32位指令集快,而且代码密度高,所以一般用THUMB编译器将C语言程序编译成16位的代码。处理器一开始总在ARM状态,可使用BX指令转换到THUMB状态呼叫C程序。
难点分析
Remap
在Remap的过程中,存储器的地址改变时,PC指针并不会自动改变,因此,要保证Remap以后程序能够继续运行下去,必须采取非正常跳转的手段,使PC指针指向Remap后的程序地址,以下是实现Remap过程的具体指令序列:
ldrr12,PtInitRemap
;得到Remap以后的跳转地址,存入r12
ldmiar10!,{r0-r9,r11}
;将EBI各个寄存器的设置值存入r0到r9和r11,其中r11指向EBI寄存
原创力文档


文档评论(0)