ARM接口技术基础

2023-05-16

ARM介绍

嵌入式系统:
嵌入式系统 = 嵌入式硬件 + 嵌入式软件。
硬件是软件的载体,软件是硬件的灵魂。

嵌入式软件:
1、裸机:APP
2、系统:OS+APP

嵌入式硬件:
嵌入式硬件 = 输入+输出+存储器+控制器+运算器+总线;

  1. 输入和输出:GPIO

  2. 存储器:(从内到外 四级存储体系) 寄存器(Reg) --> Cache(高速缓存器) --> 内存(Main Memory) --> 外存
    在这里插入图片描述

    1. 寄存:分为通用寄存器和专用寄存器两类,距离CPU最近的存储单元,CPU可以直接访问,超高速。
    2. Cache:用来存放正在执行的程序中的活跃部分,CPU可以直接访问,高速。
    3. 内存(主存):用来存放正在执行的程序,CPU可以直接访问,快速。
    4. 外存:用来存放需要永久保存的数据的空间,CPU不能直接访问。
  3. 控制器:指挥中心,由一系列的时序逻辑电路组成

  4. 运算器:信息进行处理和运算的部件,也称为ALU

  5. 总线(BUS):①用来连接嵌入式硬件的各个模块;②用来传输数据;
    . 在这里插入图片描述
    . 在这里插入图片描述

  6. CPU = 控制器 + 运算器 + 寄存器组(通用寄存器)

  7. SOC = CPU + 外围组件 (System On Chip)

在这里插入图片描述

ARM的5大系列:

1、classic系列
ARM7系列:基于ARMv3或ARMv4架构
ARM9系列:基于ARMv5架构
ARM11系列:基于ARMv6架构

2、cortex-M系列
cortex-M0:智能测量
cortex-M0+:人机接口设备
cortex-M1:汽车和工业控制系统
cortex-M3:家用电器
cortex-M4:消费性产品和医疗器械等
(此系列针对成本和功耗比较敏感的应用)

3、cortex-R系列
cortex-R4:汽车制动系统
cortex-R5:动力传动解决方案
cortex-R7:大容量存储控制器等深层嵌入式实时应用
(此系列实时性较好)

4、cortex-A系列
cortex-A5
cortex-A7:智能手机
cortex-A8:平板电脑
cortex-A9:汽车娱乐系统
cortex-A12:数字电视等
cortex-A15
(用于具有高计算要求、运行丰富操作系统及提供交互媒体和图形体验的应用领域)

5、cortex-A5D系列
(基于ARMv8架构,允许在32位和64位之间进行完全的交互操作)
·

器件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

ARM体系结构介绍

ARM代表一款处理的架构,ARM不是芯片,ARM公司向芯片厂商提供ARM内核,芯片厂商用ARM内核和外围组件设计出处理器芯片。

处理器架构 = 处理器内核 = 处理器的控制时序电路+ARM指令集/thumb指令集;

芯片 = 处理器架构(比如ARM架构) + 外围组件;

指令集:
1、RISC:精简指令集。
2、CISC:复杂指令集,每条指令都是由多条精简指令集成。

编程模型

如下约定:

在这里插入图片描述

注意:

1、ARM32位架构:表示CPU一次处理指令的能力。32bit
2、CPU的工作 就是周期性的去处理指令(取指令,译码,执行)
3、周期性:看CPU主频,在这里插入图片描述
比如2.7GHZ表示该CPU在1s中内取2.7条指令来处理,周期 = 1/2.7G

4、取指:CPU去存储器中取指令。一般来说在 寄存、cache、主存 中取。每次取32bit刚好是一条ARM指令。

工作模式

当ARM内核处于ARM态,该内核有 7 - 8 种工作模式。

  1. User:非特权模式,大部分任务执行都是这种模式。
  2. FIQ:当一个高优先级(fast) 中断产生时将会进入这种模式。
  3. IRQ:当一个低优先级(normal)中断产生时将会进入这种模式。
  4. Supervisor:当复位或软中断指令执行时将会进入这种模式。
  5. Abort:当存取异常时将会进入这种模式。
  6. Undfine:当执行未定义指令时会进入这种模式。
  7. Cortex-A特有模式(monitor):ARM Cortex-A系列特有的模式,普通ARM没有。是为了安全而扩展出的用于执行安全监控代码的模式,也是一种特权模式。
  8. System:系统模式。

寄存器

作用:用于在指令执行过程中存放运算数据和结果值的容器。

容量

1、普通ARM
有37个寄存器,每一个寄存器的容量是4字节,所以总容量 = 374 = 148(byte)
2、Contex-A的ARM
有40个寄存器,每一个寄存器的容量是4字节,所以总容量 = 40
4 = 160(byte)

寄存器标识
用R标识,r0,r1,r2……r15,cpsr,spsr

寄存器个数计算
Contex-A提供了40个寄存器,怎么计算的?
r0-r7:8个共用
除了FIQ剩下的7中模式共用r8-r12:5个
FIQ 特殊的专用寄存器r8-r12:5个
User和System模式共用普通寄存器r13-r14:2个
除了User和System模式,其他6种模式都有对应的专用寄存器r13-14:12个
7种模式共用r15:1个
Cpsr寄存器:所有模式共用 1个
Spsr寄存器:User和System模式没有该寄存器,其余6种模式都有自己专用的寄存器:6个

上述之和 = 40个寄存器

详细图解如下:
在这里插入图片描述

寄存器分工
40个寄存器中r0-r12用来存放CPU运算数据,其他几个特殊寄存器用来辅助运算。

特殊寄存器:

  1. r13(sp) :存放sp栈指针;
  2. r14(lr) :当终端或函数调用发生时用来存放中断的下一条指令地址或函数的返回地址;
  3. r15(pc):存放pc程序的取指地址,pc指向正在取指的指令而不是正在执行或译码的指令;
  4. Cpsr:当前程序状态寄存器。用来存放当前处理器的状态信息;
  5. Spsr:是Cpsr的备份寄存器。通常在中断时使用,当中断发生时Cpsr将中断地址拷贝到Spsr中以便于中断的恢复;

程序状态寄存器占32bit,每1bit位含义如下:在这里插入图片描述
注意:
在复位后,ARM处理器处于SVC(特权模式)、ARM状态。

指令流水线

指令可以分为几个阶段并且可以并行执行这几个阶段,就称其为几级指令流水线

三级指令流水线:最佳
ARM内核CPU每次都从r15(PC)寄存器种取指令、译码、执行。
取指、译码、执行并行进行。
比如第3条指令取指的同时对第二条指令做译码,对第一条指令做执行。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ARM接口技术基础 的相关文章

  • 使用 QEMU 模拟 Big Endian ARM 系统

    是否可以编译一些 Linux 内核并通过 QEMU 运行它 模拟一些 Big Endian ARM 处理器 如果 QEMU 无法做到这一点 我很想知道其他可以做到这一点的系统模拟器 我的基本目标是在尽可能多的本机环境中运行和调试专用的 Bi
  • Pandaboard 交叉编译 Qt

    我花了几周的时间尝试为我的 Panda 板交叉编译 Qt 但没办法 我无法通过 configure 如果有人能给我帮助 我将不胜感激 我的主机系统是Ubuntu 13 04 86 64位 在Virtualbox中运行 我的目标系统是 Pan
  • 抢占和上下文切换的区别

    一点介绍 我目前正在编写一个小型 读微型 RTOS 内核 它应该与内核中的大多数内容是一体的 然而 我找不到关于下面列出的一些事情的太多信息 这会很有帮助 除此之外 它实际上不是某种大学项目 而是我按照自己的意愿做的事情 回答所有问题的一个
  • PWM DMA 到整个 GPIO

    我有一个 STM32F4 我想对一个已与掩码进行 或 运算的 GPIO 端口进行 PWM 处理 所以 也许我们想要 PWM0b00100010一段时间为 200khz 但随后 10khz 后 我们现在想要 PWM0b00010001 然后
  • Android 上原生的自修改代码

    我正在尝试在 Android 上制作一些自修改本机代码并在模拟器中运行它 我的示例基于 android ndk 中的 Hello JNI 示例 它看起来像这样 define NOPE LENGTH 4 typedef void FUNC v
  • 理解这部分手臂的汇编代码

    syntax unified thumb cpu cortex m4 arch armv7e m fpu fpv4 sp d16 Changes from unprivileged to privileged mode thumb func
  • 将 ZeroMQ 交叉编译为 ARM,以便在 MonoTouch iPhone 应用程序配置设置中使用

    我正在尝试在使用 MonoTouch 用 C 开发的 iPhone 应用程序中使用 ZeroMQ 库 我几乎解决了所有的问题 却在最后一道坎倒下了 我正在使用 ZeroMQ 2 1 10 和 C CLR 绑定 包装器 并在 Mac OS X
  • 使用 GCC 编译器为代码的特定部分保留寄存器

    是否可以为 C 代码的特定部分保留寄存器 ffixed reg 选项或声明全局寄存器变量不是我正在寻找的答案 我想保留特定范围 比如说特定函数 的寄存器值 使用局部寄存器变量是不可能的 因为它不能保证在整个范围内保留寄存器的值 我正在寻找类
  • GNU Arm Cortex m4 上的 C++ 异常处理程序与 freertos

    2016 年 12 月更新现在还有一个关于此行为的最小示例 https community nxp com message 862676 https community nxp com message 862676 我正在使用带有 free
  • 警告:可加载部分“my_section”位于 ELF 段之外

    我使用 Cortex R4 的 Arm Compiler v6 9 构建了一个 axf elf 文件 但是 当我使用 Arm MCU Eclipse J link GDB 插件将其加载到目标时 它无法加载我的段的初始化数据 如果我使用 Se
  • ARM Neon:如何从 uint8x16_t 转换为 uint8x8x2_t?

    我最近发现了关于vreinterpret q dsttype src类型转换运算符 https stackoverflow com a 43519190 2436175 但是 这似乎不支持所描述的数据类型的转换这个链接 http infoc
  • 使用 ARM NEON 内在函数添加 alpha 和排列

    我正在开发一个 iOS 应用程序 需要相当快地将图像从 RGB gt BGRA 转换 如果可能的话 我想使用 NEON 内在函数 有没有比简单分配组件更快的方法 void neonPermuteRGBtoBGRA unsigned char
  • 用于 RHEL 的 gdb-multiarch

    我正在尝试寻找方法来运行gdb 多架构RHEL 中的命令 我已经安装了用于 ARM 处理的 QEMU 模拟器 我想安装GDB进行调试 我能够安装GDB 多体系结构在 Ubuntu 中运行命令成功 sudo apt get GDB multi
  • 哪些变量类型/大小在 STM32 微控制器上是原子的?

    以下是 STM32 微控制器上的数据类型 http www keil com support man docs armcc armcc chr1359125009502 htm http www keil com support man d
  • 将 GCC 内联汇编与采用立即值的指令结合使用

    问题 我正在为 ARM Cortex M3 处理器开发定制操作系统 为了与我的内核交互 用户线程必须生成 SuperVisor Call SVC 指令 以前称为 SWI 用于软件中断 该指令在ARM ARM中的定义是 这意味着该指令需要即时
  • ARM 中只有两个操作数的 ADD 或 SUB

    我正在学习ARM汇编语言 我读过 ADD 应该有 3 个操作数 然而 我见过很多案例 现实中只有两种 例如 STR R1 SP 0x20 var 1C LDR R1 a lua 0x1DE4E6 MOVS R0 R4 haystack AD
  • ARM + gcc:不要使用一大块 .rodata 部分

    我想使用 gcc 编译一个程序 并针对 ARM 处理器进行链接时间优化 当我在没有 LTO 的情况下编译时 系统会被编译 当我启用 LTO 时 使用 flto 我收到以下汇编错误 错误 无效的文字常量 池需要更近 环顾网络 我发现这与我系统
  • 分析 Cortex-M7 (stm32f7) 上的 memcpy 性能

    简洁版本 从 GNU ARM 工具链中提取的 memcpy 的性能指标在 ARM Cortex M7 上对于不同的副本大小似乎差异很大 即使复制数据的代码始终保持不变 这可能是什么原因造成的 长版 我是使用 GNU Arm 工具链 11 2
  • 为什么 i2c_smbus 函数不可用? (I2C——嵌入式Linux)

    有很多参考使用i2c smbus 开发嵌入式 Linux 软件时在 I2C 总线上进行通信的函数 什么时候i2c smbus函数如i2c smbus read word data在软件项目中引用了 ARM8 处理器错误 例如 i2c smb
  • 产生并处理软件中断

    有人可以告诉我如何在Linux下生成软件中断然后用request irq处理它吗 或者也许这是不可能的 您可以使用软中断来代替 您可以通过编辑 include linux interrupt h 来定义您的 sofirq 然后使用函数 ra

随机推荐