AT91系列微处理器启动过程的分析与实现

[09-12 18:19:15]   来源:http://www.88dzw.com  单片机学习   阅读:8450

文章摘要:摘??? 要:本文讨论了ARM启动的基本过程,详细分析了其中的Remap过程和从加载时域到运行时域的转换这两个技术难点,给出了AT91系列微处理器启动过程的具体实现方法。关键词:AT91;Remap;加载时域;运行时域;启动引言在ARM程序设计中,启动代码的编写是一个及其重要的过程,由于ARM处理器的启动过程相对51单片机复杂,不仅要设置中断、初始化堆栈,还涉及到存储器的地址重映射以及重映射后中断地址的搬移、初始化主程序用到的存储区等问题,导致许多人对ARM处理器的初始化以及启动代码的编写感到较为困难。本文详细分析了At91系列微处理器的启动过程。系统存储介质和地址映射开发板的Flash存储器

AT91系列微处理器启动过程的分析与实现,标签:单片机开发,单片机原理,单片机教程,http://www.88dzw.com

  摘??? 要:本文讨论了ARM启动的基本过程,详细分析了其中的Remap过程和从加载时域到运行时域的转换这两个技术难点,给出了AT91系列微处理器启动过程的具体实现方法。
  关键词:AT91;Remap;加载时域;运行时域;启动

引言
  在ARM程序设计中,启动代码的编写是一个及其重要的过程,由于ARM处理器的启动过程相对51单片机复杂,不仅要设置中断、初始化堆栈,还涉及到存储器的地址重映射以及重映射后中断地址的搬移、初始化主程序用到的存储区等问题,导致许多人对ARM处理器的初始化以及启动代码的编写感到较为困难。本文详细分析了At91系列微处理器的启动过程。

系统存储介质和地址映射
  开发板的Flash存储器采用ATMEL公司的AT49BV1614A,板上采用的SRAM是ISSI公司的IS61LV51216,AT91M55800A片内还集成了8K字节的片内SRAM。FLASH存储器连接在AT91M55800A的片选0引脚上,SRAM连接在片选1引脚上。上电时,Flash映射地址为0x01000000,片内RAM映射地址为0x00300000,片外SRAM不可见。

  系统上电时,从地址0开始读取上电复位中断处理程序,进行系统初始化。此时,地址0x00000000指向的是连接在片选0的存储器器件,所以要在片选0上连接Flash。由于Flash的运行速度相对RAM要慢,且中断处理程序在Flash中无法改动,所以,人们希望程序在RAM中运行。为此,ARM的CPU提供了Remap命令来解决这个问题,当置位M55800A的重映射控制寄存器的重映射命令位(EBI_RCR的RCB位)后,内部RAM就映射到地址0,配置EBI寄存器后,Flash的地址是0x01000000,SRAM的地址是0x02000000。这就是系统的重映射过程。

启动过程的分析与实现
  一般而言,一个ARM的启动代码必须要完成以下部分的初始化:定义入口点、设置中断/异常向量、初始化存储系统(如果需要,进行代码的搬移)、初始化堆栈、初始化I/O设备、初始化中断中用到的变量、开中断、必要时改变处理器的模式和处理器的状态、初始化C程序中用到的存储区、引导处理器进入C程序。其中的难点在于内存系统的重映射和对C程序用到的存储区进行初始化。

  (1)设置入口指针:启动程序首先必须定义入口指针,而且整个应用程序只有一个入口指针。

  (2)设置中断向量:ARM7要求中断向量表必须设置在从0地址开始,连续8×4字节的空间,分别是复位、未定义指令错误、软件中断、预取指令错误、数据存取错误、IRQ、FIQ和一个保留的中断向量。由于Flash在系统Remap之前指向地址0,所以要在Flash中安排中断向量。此时,真正有用的只有位于地址0的复位向量,在此安排一条 B? Initreset指令,转向引导程序,其余中断未用。接下来在Flash中构建一个新的中断向量表,用于在Remap之后复制到片内RAM中,采取相对寻址的方式。

  系统复位时,外部总线并没有被配置,此时片选0的总线等待周期是8,为了加速启动过程,可以在这时把片选0的总线等待周期设为与FLASH ROM相应的数值。并且配置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中,完成加载时域到运行时域的转换,初始化RW和ZI段。

  (7)呼叫C程序:ARM有16位THUMB和32位ARM两种指令集。使用16位的存储器可以降低成本, 在这种情况下,THUMB指令集的整体执行速度比ARM 32位指令集快,而且代码密度高,所以一般用THUMB编译器将C语言程序编译成16位的代码。 处理器一开始总在ARM状态,可使用BX指令转换到THUMB状态呼叫C程序。

[1] [2]  下一页


Tag:单片机学习单片机开发,单片机原理,单片机教程单片机学习

《AT91系列微处理器启动过程的分析与实现》相关文章

分类导航
最新更新
热门排行