- 1、本文档共35页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
启动代码的说明
启动代码的说明 1.什么是启动代码 启动代码是芯片复位进入C语言的main()函数前执行的一段初始化程序,主要是为芯片运行提供基本的运行环境,如初始化存储系统、寄存器、PLL(锁相环)和内存重映射,处理异常等。 ARM公司只设计芯片核心,不直接生产芯片。不同的公司生产的芯片有各自不同的特色,使得每一种芯片的启动代码差别很大,不易编写出统一的启动代码。 相应芯片的启动代码需要按照数据手册上的寄存器和工作模式来写 。 下面以AT91SAM7为列,说明如何按照收据手册编写启动代码 。 一:AT91 ARM 概述 使用户在高性能和高代码密度之间进行平衡。ARM7TDMI处理器为冯-诺依曼结构,具有三级 流水线,即指令获取、解码和执行三个阶段。 ARM7TDMI处理器的主要特点是: ? ARM7TDMI基于ARMv4T结构 ? 两个指令集 – ARM? 高性能32 位指令集 – Thumb? 高代码密度16位指令集 ? 三级流水线结构 ARM的工作模式和寄存器划分 ARM7TDMI 工作模式 ARM7TDMI 基于ARM 结构v4T,支持如下7 种处理器模式: 1:User:一般的ARM程序执行状态 2:FIQ:设计为高速数据传输或通道处理 3:IRQ:用于通常的中断处理 4:Supervisor:用于操作系统的保护模式 5:Abort mode:实现虚拟内存和/ 或内存保护 6:System:操作系统的特权用户模式 7:Undefined:支持硬件协处理器的软件仿真 ARM7TDMI 工作模式(续) 模式之间的转换可以通过软件进行控制,也可能由中断或例外处理引起。大多数应用程序运行于User 模式。而非用户模式,或特权用户模式,则针对中断或例外,或者是访问受保护的资源。 模式和各模式的寄存器分配 专用寄存器的功能 除 FIQ模式外,R0~R12是 通用寄存器 R13堆栈指针 ,在初始化存储空间时用 R14 程序返回地址 ,在相应的模式结束后需要将其值传给PC 以便正确返回 。 R15 (PC) ,程序指针计数器 CPSR:Current Program Status Register SPSR:Saved Program Status Register 状态寄存器( CPSR ,SPSR ) 所有其他的处理器状态保存于状态寄存器。当前处理器状态保存于当前程序状态寄存器 CPSR 其内容为: 4 个ALU 标志( 负,零,进位,溢出) 两个中断禁止位(每种中断一个) 一个比特用来指示ARM状态还是Thumb 状态 5 个比特用来解码当前的处理器模式 所有5个例外模式还拥有一个保存的程序状态寄存器(Saved Program Status Register,SPSR), 这个寄存器保存了在例外发生之前的那个任务的CPSR。 例外类型 ARM7TDMI 支持5种类型的例外,每一种都有对应的特权处理模式。这些例外类型是: 快速中断(FIQ) 普通中断(IRQ) 内存异常中断(用来实现内存保护或虚拟内存) 尝试执行未定义的指令 软件中断(SWI) 例外的产生及处理 例外由片内外的中断源产生。 在同一时间可以有多个例外发生。 例外发生时,此例外对应的、分区的R14 和SPSR 将当前状态保存下来 从例外返回时需要将SPSR 拷贝回CPSR,同时将R14的值赋给PC。实现的方法有如下两个: 使用数据处理指令, S 置位, PC为目的寄存器 使用LDM 指令 ARM汇编指令 ARM 指令集分为: ? 分支跳转指令 ? 数据处理指令 ? 状态寄存器传输指令 ? 加载和保存指令 ? 协处理器指令 ? 例外产生指令 ARM 指令可以有条件地执行。每个指令都包括4 比特的条件代码域(bit[31:28])。 Arm指令一览表 各个模式的异常处理 由中断或例外引起的模式改变在启动代码中都需要得到处理。 1. 高级中断控制器已编程 。 2: AIC_SVR 寄存器载入相应的中断服务程序地址(FIQ?0x1c,IRQ?0x18)且中断使能 3:用户不需要嵌套快速中断 注:为了能处理异常,在进入RST后就应该设置这些基本工作条件 。 一:中断的处理流程 当nIRQ出现,若CPSR中位 “I”为0,处理如下: 1: CPSR 存于SPSR_irq,程序计数器当前值载入中断链接寄存器(R14_irq) 且程序计数器(R15) 中载入0x18。 在由地址0x1C 取指周期中,ARM内核调整R14_irq,以4递减。 2: ARM 内核进入中断模式 。 3: 当加载地址为0x18(IRQ)的指令执行时,程序计数器载入由AIC_IVR读出的值。 续上 4:先前的步骤已使跳转到相
文档评论(0)