【ARM】微处理器工作模式

发布者:EtherealJourney最新更新时间:2020-04-04 来源: eefocus关键字:ARM  微处理器  工作模式 手机看文章 扫描二维码
随时随地手机看文章

收获

SPACE 和 DCD 的区别在于:


SPACE 申请一片内存空间(以字节为单位申请),但不赋初值


DCD 申请一个字(32bit)的内存空间,并赋初值


对于 32 位的 ARM,一个字为 32 bit = 4 Byte


代码中的


UsrStackSpace   SPACE   USR_STACK_LEGTH*4


这里的 ∗4*4∗4 就是由于 SPACE 是以字节为单位分配空间,而我们需要的是以字为单位的堆栈空间


对于代码中的


StackUsr    DCD    UsrStackSpace+(USR_STACK_LEGTH-1)*4


可以这样理解: UsrStackSpace 是标号,相当于地址,实际上就是在 UsrStackSpace SPACE USR_STACK_LEGTH*4 这个语句给分配的空间的首地址,UsrStackSpace+(USR_STACK_LEGTH-1)*4是这个地址空间的结束地址,将 StackUsr 指向这个地址,作为栈顶


每种模式堆栈位置

在这里插入图片描述

代码

;ARM 微控制器工作模式实验的参考程序如下:

;定义堆栈的大小

USR_STACK_LEGTH    EQU  64 ; 定义用户模式堆栈长度为 64 字

SVC_STACK_LEGTH    EQU   0

FIQ_STACK_LEGTH    EQU  16

IRQ_STACK_LEGTH    EQU  64

ABT_STACK_LEGTH    EQU   0

UND_STACK_LEGTH    EQU   0


        AREA Example3,CODE,READONLY ;声明代码段Example3

        ENTRY ;标识程序入口

        CODE32 ;声明32 位ARM 指令

START   MOV R0,#0

        MOV R1,#1

        MOV R2,#2

        MOV R3,#3

        MOV R4,#4

        MOV R5,#5

        MOV R6,#6

        MOV R7,#7

        MOV R8,#8

        MOV R9,#9

        MOV R10,#10

        MOV R11,#11

        MOV R12,#12


        BL InitStack                ;初始化各模式下的堆栈指针

        ;打开IRQ 中断(将CPSR 寄存器的1 位清零)

        MRS  R0,CPSR            ;R0 <-CPSR

        BIC   R0,R0,#0X80 ; 1000 0000  I 置 0,打开 IRQ 中断

        MSR  CPSR_cxsf,R0       ;CPSR <-R0


        ;切换到用户模式

        MSR CPSR_c,#0xd0

        MRS R0,CPSR


        ;切换到管理模式

        MSR CPSR_c,#0xd3 ; 不能成功切换到管理模式,因为不能从用户模式直接切换到其他模式,可以使用 SWI 指令切换到管理模式

        MRS R0,CPSR


HALT    B    HALT


;名称:InitStack

;功能:堆栈初始化,即初始化各模式下下的堆栈指针。

;入口参数:无

;出口参数:无

;说明:在特权模式下调用此子程序,比如复位后的管理模式

InitStack

        MOV R0,LR                ;R0 <-LR ,因为各种模式下R0 是相同的

        ;设置管理模式堆栈

        MSR CPSR_c,#0xd3

        LDR SP,StackSvc

        ;设置中断模式堆栈

        MSR CPSR_c,#0xd2

        LDR SP,StackIrq


        ;设置快速中断模式堆栈

        MSR CPSR_c,#0xd1

        LDR SP,StackFiq


        ;设置中止模式堆栈

        MSR CPSR_c,#0xd7

        LDR SP,StackAbt


        ;设置为定义模式堆栈

        MSR CPSR_c,#0xdb

        LDR SP,StackUnd


        ;设置系统模式堆栈

        MSR CPSR_c,#0xdf

        LDR SP,StackUsr

        MOV PC,R0


StackUsr    DCD    UsrStackSpace+(USR_STACK_LEGTH-1)*4 ; 定义一个字的空间,这个字的内容是一个递减堆栈的首地址

StackSvc    DCD    SvcStackSpace+(SVC_STACK_LEGTH-1)*4

StackIrq    DCD    IrqStackSpace+(IRQ_STACK_LEGTH-1)*4

StackFiq    DCD    FiqStackSpace+(FIQ_STACK_LEGTH-1)*4

StackAbt    DCD    AbtStackSpace+(ABT_STACK_LEGTH-1)*4

StackUnd    DCD    UndStackSpace+(UND_STACK_LEGTH-1)*4


;分配堆栈空间

AREA   MyStacks,  DATA, NOINIT, ALIGN=2

UsrStackSpace   SPACE   USR_STACK_LEGTH*4 ; 为用户模式分配一个64字的堆栈空间

SvcStackSpace   SPACE   SVC_STACK_LEGTH*4

IrqStackSpace   SPACE   IRQ_STACK_LEGTH*4

FiqStackSpace   SPACE   FIQ_STACK_LEGTH*4

AbtStackSpace   SPACE   ABT_STACK_LEGTH*4

UndStackSpace   SPACE   UND_STACK_LEGTH*4

关键字:ARM  微处理器  工作模式 引用地址:【ARM】微处理器工作模式

上一篇:arm 处理器进入和退出异常中断的过程
下一篇:ARM 7种处理器模式及功能

推荐阅读最新更新时间:2024-11-12 19:05

ARM中断函数定义
RM的中断函数是在startup code中定义的,在CODE区分配中断向量表时,及将中断函数定义出了 ; Vector Table Mapped to Address 0 at Reset AREA RESET, DATA, READONLY EXPORT __Vectors __Vectors DCD __initial_sp ; Top of Stack DCD Reset_Handler ; Reset Handler DCD NMI_Handler ; NMI H
[单片机]
嵌入式根文件系统(基于arm
1 根文件系统 嵌入式可以包含多个文件系统,根文件系统是第一个,当linux启动的时候,第一个必须挂载的是根文件系统,若系统不能从指定设备上挂载根文件系统,则系统出错就退出。本文主要分以下两个部分说明根文件系统,第一个是如何制作根文件系统,第二个则是挂载根文件系统到内核。 2 如何建立根文件系统 根文件系统的制作是学习驱动的重要一步,这里我直接把制作根文件系统的框架思维导图贴出来了。我们制作的根文件系统就是按照这个框架来设计。 2.1 创建目录 本文所创建的根文件名称是rootfs,路径是/home/S5-driver/lesson8/rootfs,这个路径在随后的内核配置中用到多次。接下来在rootfs中创建一系列目录,
[单片机]
嵌入式根文件系统(基于<font color='red'>arm</font>)
快速学Arm(32)--系统控制模块(1)
系统控制模块是一些针对系统特性和系统控制而存在的寄存器,他们与片内外设无关.系统控制模块包含了下面的功能: .复位 .掉电检测 .系统控制和状态 .代码安全&调试 .AHB总线配置 复位是指计算机系统中的硬件逻辑归位到一个初始的状态.比如处理器从第一条指令开始执行程序等等. 造成系统复位的复位源有这样几种情况: .-RESET引脚复位 .看门狗复位 .上电复位(POR) .掉电检测复位(BOD) -RESET引脚复位又称为外部复位.外部复位是通过把芯片的-RESET引脚电平拉低并保持一段时间来实现的. 1.在芯片未上电时,芯片的外部晶振没有工作. 2.芯片上电后,外部晶振开始震荡
[单片机]
快速学<font color='red'>Arm</font>(32)--系统控制模块(1)
ARM体系结构与编程-3
ARM存储系统: ARM中用于存储管理的系统控制协处理器CP15: 包含16个32位寄存器,其编号为0到15。实际上对于某些编号的寄存器可能对应有多个物理寄存器。 访问CP15寄存器的指令:MRC、MCR。 CP15中的寄存器C0和C1:C0中存放ARM相关的一些标示符;C1是一个控制寄存器,用于禁止/使能MMU、配置存储系统等。 例如下面的代码序列使能MMU: MRC P15,0,R0,C1,0,0 ORR R0,#01 MCR P15,0,R0,C1,0,0 ARM中的存储管理单元MMU: 完成虚拟存储空间到物理存储空间的地址映射,和存储器访问权限的控制,设置虚拟存储空间的缓冲特性。 ARM中的CACHE及
[单片机]
基于微处理器和射频收发芯片近程无线数传系统设计
本文介绍了一种选用高性能、低功耗的32位微处理器STM32F103和射频收发芯片nRF24L01来设计短距离无线数据传输系统的具体方法。 1 系统设计 短距离无线数传系统主要由电源管理器AMC7635、微控制器STM32F103、射频收发器nrf24l01三部分组成。下面分别介绍其关键电路。 1.1 电源电路 本设计的电源采用3.7V锂电池供电,然后经低压降电源管理芯片AMC7635,以产生3.0V的电压来为STM32F103和nRF24L01供电,图1所示是本系统的供电电路。 图1 系统供电电路 1.2 微控制器电路 微控制器选用带ARM Cortex -M3内核的STM32F103。STM32F103控制器具有
[单片机]
基于<font color='red'>微处理器</font>和射频收发芯片近程无线数传系统设计
对比stm32,arm9研究方向的猜想
大二上的寒假,受老师的邀请,去到东莞实习了10天。虽然不是第一次去,但是这次的体会和上次有了很大的不同。这篇文章本来想从东莞回来就写了,但是一直拖到现在才写。在东莞,我工作位置的旁边是一个约27岁的大学生,他的职位大概是嵌入式工程师,他每天都在使用上了ucos2的STM32芯片进行编程。刚好我在学ARM9+LINUX,于是有时候我们也私下讨论了一下STM32和ARM9的那些事儿。 STM32是这几年很火的,有哈佛架构,性价比高,开发使用的函数库齐全等优点,这个芯片我本来也想在大一下的时候买块开发板来学,不过后来项目需要,所以学了ARM9。 在讲之前,问一个问题。假设有这样的一个项目,让你做一个数字示波器的控制和显示部分的
[单片机]
ARM NAND FLASH读写错误解决办法
在写文件系统的时候出现如下错误: NAND erase: device 0 whole chip Skipping bad block at 0x00254000 Skipping bad block at 0x00258000 Skipping bad block at 0x0025c000 Skipping bad block at 0x00260000 Skipping bad block at 0x00264000 Skipping bad block at 0x00268000 Skipping bad block at 0x0026c000 Skipping bad block at 0x00270000 Skippin
[单片机]
ARM40-A5应用——fbset与液晶屏参数的适配
在ARM板卡上使用某个型号的LCD,往往要修改LCD驱动程序或者设备树,很不方便。 在ARM40-A5中,我们把常用的LCD型号的配置指令存放在 /etc/init.d/S01user1lcd 文件中,通过修改该文件,即可非常方便的适配不同的LCD。 对于 /etc/init.d/S01user1lcd 文件中未包含的LCD型号,也可通过本文介绍的方法,方便的自行在该文件中添加新的LCD型号。 一、Linux fbset 指令介绍 fbset指令可用于设置framebuffer缓冲区的大小,还能调整画面分辨率,位置,高低宽窄,色彩深度,并可决定是否启动显卡之各项硬件特性。 语法 fbset
[单片机]
<font color='red'>ARM</font>40-A5应用——fbset与液晶屏参数的适配
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved