当前位置:首页 > 嵌入式 > 嵌入式硬件

arm体系结构

目前,arm系列的通用32位risc微处理器有arm7、arm9、arm9e、arm10等多个产品,这些处理器可以工作于7种模式下。除user模式以外的其它模式都叫做特权模式,除user和system以外的其它5种模式叫做异常模式。大部分应用程序都在user模式下运行,当处理器处于user模式下时,执行的程序无法访问一些被保护的系统资源,以利于操作系统控制系统资源的使用,也不能改变模式,否则就会导致一次异常。对于system模式,任何异常都不会导致进入这一模式,而且它使用的寄存器和user模式下基本相同,主要是用于有访问系统资源请求而又避免使用额外的寄存器的操作系统任务。在特权模式下,它们可以完全访问系统资源,可以自由地改变模式。在处理特定的异常时,系统进入对应的异常模式下。这5种异常模式都有各自额外的寄存器,用于避免在发生异常的时候与用户模式下的程序发生冲突。

&n bsp; 在任意一种处理器模式中,都使用同一个寄存器来标识当前处理器的工作模式,这个寄存器叫做cpsr(当前程序状态寄存器),它的0~4位用来表示cpu模式,而且在每一种处理器异常模式下,都有一个对应的spsr(缓存程序状态寄存器),用来保存进入异常模式前的cpsr的值。spsr的作用就是当cpu从异常模式退出时,通过一条简单的汇编指令就能够恢复进入异常模式前的cpsr,该值保存在当前异常模式的spsr中。 启动代码的设计

启动代码类似于电脑中的bios,它从系统上电开始接管cpu,依次需要负责初始化 cpu在各种模式下的堆栈空间、设定cpu的内存映射、对系统的各种控制寄存器做初始化、对cpu的外部存储器进行初始化、设定各外围设备的基地址、创建正确的中断向量表、为c代码执行创建zi(零创建)区,然后进入到c代码。 在c代码中继续对时钟、rs232端口进行初始化,然后打开系统中断允许位。最后进入到应用代码中执行,执行期间响应各种不同的中断信号并调用预先设置好的中断服务程序处理这些中断。整个过程的流程图如图1所示。
图1 启动代码流程图

堆栈初始化

堆栈的初始化要处理的事情是为处理器的7个处理器模式分配堆栈空间。以下以fiq模式下的堆栈设置为例说明:

orrr1, r0, #lockout | fiq_mode;把模式放在r1中,lockout用来屏蔽中断位;

msrcpsr, r1 ;改变cpu的cpsr寄存器,进入到指定的fiq模式;

msrspsr, r2 ;保存前一模式;

ldrsp, =fiq_stack ;把fiq模式下的堆栈起始值赋给当前的sp,fiq_stack是分配给fiq模式堆栈空间(比如说1k字节)的起始地址。按这种方式设置其它模式下的堆栈。
dram的初始化根据系统配置信息来决定,因为系统不一定会用到dram,但是一定要做sdram的初始化。主要的处理内容是rom和ram基址的设定、数据总线的宽度、sdram的刷新时间等等,这些可以参照s3c4510b芯片的用户手册。特殊寄存器的设置主要是针对i/o口,比方说设定几个i/o位用做系统状态指示灯led。寄存器的设定主要根据硬件的配置情况而定,值得注意的是由于这段启动代码是烧录到rom中的,而中断向量必须位于零地址,所以在存储单元没有重新映射之前rom基址的设定应该为零地址。

拷贝(image)主要是为了提高运行速度,编译生成的映像文件代码从rom内拷贝到ram中去,而程序的执行也就在ram中。当然,启动代码对运行速度的要求不是很严格,所以这个拷贝动作可以不用做,让代码存放在rom中,代码的执行也在rom中,而运行中所需要的数据在ram中。

内存的初始化是为c代码的运行开辟内存区,代码编译后会分为三个区:只读区、可读可写区, 零初始化区。内存的初始化处理的内容是:当只读区截止地址等于可读可写区基址时,把零初始化区各字节清零;当只读区截止地址不等于可读可写区基址时,如果可读可写区基址小于零初始化基址,就从只读区截止地址处开始把数据拷贝到可读可写区基址处,直到到达零初始化基址,然后把零初始化区各字节清零,否则也只用把零初始化区各字节清零。

中断向量表是用于处理异常情况的,当发生异常时,首先要保存当前程序的返回地址和cpsr寄存器的值,然后进入到相应的异常向量地址,一般来说在异常向量地址是一个跳转指令,使程序进入相应的异常处理过程。由于中断向量表要位于系统的零地址,当把启动代码烧录到eeprom中运行时就需要把rom的地址定义到零地址,所以程序的入口处如下

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭