首页 > 其他分享 >ARM体系架构

ARM体系架构

时间:2024-08-19 22:51:11浏览次数:6  
标签:体系 架构 引脚 -- GPIOx GPIOC 寄存器 CRH ARM

ARM体系架构

1. 指令系统

RISC: 精简指令集指令系统  -- ARM

   寻址方式: 寻址方式比较少(10种以内)

   指令集中指令的条数: 100条左右

   大的、统一的寄存器文件;

   装载/保存结构(Load/Store),数据处理操作只针对寄存器的内容,而不直接对存储器进行操作;

   统一和固定长度的指令域,简化了指令的译码,便于指令流水线设计。 -- 大多数指令的执行时间是相等的

CISC: 复杂指令集指令系统  -- X86, 51

   寻址方式: 寻址方式比较多(10种以上)

   指令集中指令的条数

2. ARM中数据类型

字节数据: 1byte

半字数据: 2byte

字数据: 4byte

3. 字节对齐和符号位扩展

struct T1

{

   char c;

   int n;

};  //字节对齐

struct T2

{

   char c1:2;

   char c2:3;

   char c3:2;

   int n:6;

};

struct T2 t;

t.c1 = 3;

printf("%d\n", t.c1);  //-1


 

4. 寄存器

ARM处理器有37个寄存器,在不同处理器运行模式下使用的寄存器是不完全一致的

所有的37个寄存器,分成两大类:31个通用32位寄存器;6个状态寄存器。

其中R0~R7为未分组的寄存器,也就是说对于任何处理器模式,这些寄存器都对应于相同的32位物理寄存器。

寄存器R8~R14为分组寄存器。它们所对应的物理寄存器取决于当前的处理器模式,几乎所有允许使用通用寄存器的指令都允许使用分组寄存器

寄存器R8~R12有两个分组的物理寄存器。一个用于除FIQ模式之外的所有寄存器模式,另一个用于FIQ模式。这样在发生FIQ中断后,可以加速FIQ的处理速度。

R13: 堆栈指针SP -- 指向堆栈栈顶位置的指针(指向栈顶元素或者栈顶插入位置)

R14: 链接寄存器LR -- 作为子程序(函数)返回用

  R14为链接寄存器(LR),在结构上有两个特殊功能:

  在每种模式下,模式自身的R14版本用于保存子程序返回地址;(跳转到函数之前的位置)

  当发生异常时,将R14对应的异常模式版本设置为异常返回地址(有些异常有一个小的固定偏移量)。

R15: 程序计数器PC

  它指向正在取指的地址。 -- 下一条要执行的指令的位置

程序状态寄存器: CPSR

  运算的结果: NZCV

     N: 符号位

     Z: 零位

     C: 进位/借位位

     V: 溢出

5. 异常

异常(Exception)是指任何打断处理器正常执行,并且迫使处理器进入一个由有特权的特殊指令执行的事件。

异常可分为4类:中断(interrupt)、陷井(trap)、故障(fault)和终止(abort)

上下文切换:

a. 将CPSR保存到对应的SPSR  -- 状态寄存器的保护

b. 将当前程序中使用的数据进行压栈 -- 数据保护

c. 将返回地址(当前的PC值)保存到LR中 -- 返回位置

d. 将切换的入口地址(中断向量)赋值给PC -- 实现跳转

异常返回(中断、函数调用结束、内循环挑战到外循环):

a. 将SPSR恢复到CPSR中 -- 状态恢复

b. 数据栈中的数据弹栈 -- 数据恢复

c. 将LR赋值给PC  -- 返回


 

6. ATPCS

过程调用标准ATPCS(ARM-Thumb Produce Call Standard)规定了子程序间相互调用的基本规则, ATPCS规定子程序调用过程中寄存器的使用规则、数据栈的使用规则及参数的传递规则。

寄存器使用规则:

R0-R3: 函数调用时的参数寄存器,用来存放前4个函数参数并存放返回值。在函数内如果将这些寄存器用作其他用途,将破坏其值。R0还作为函数的返回值

R4-R11: 通用变量寄存器(一般使用得比较多的是R4-R8)

R12: IP, 临时过渡寄存器,函数调用时会破坏其值


 

STM32的使用

常用资源:

ADC: 模拟/数字转换控制 -- 模拟传感器的使用

DAC: 数字/模拟转换控制

USART: 串行口 -- 调试、串口设备(蓝牙)

串行总线接口: SPI, IIC, CAN

定时器TIM

EXTI: 外部中断

GPIO: 通用IO口 -- 开关信号的输入输出

RTC: 实时时钟 -- 日历,时钟

STM32的引脚绝大多数都是复用功能引脚(一个引脚可以配置为不同的作用)

AMBA片上总线:已成为一种流行的工业片上总线标准。它包括AHB(Advanced High performance Bus)和APB(Advanced Peripheral Bus ),前者作为系统总线,后者作为外设总线。

外设总线:包括APB1(Advanced Peripheral Bus 1) -- 低速

        和APB2(Advanced Peripheral Bus 2)  -- 高速

   要使用任何外部设备首先必须该外部设备对应的时钟系统是启动的

最小系统: STM32F103C8T6小系统板,主要由单片机、晶振电路、复位电路几部分构成,板载的资源能满足进行单片机GPIO,ADC,RTC,USART,IIC,SPI,USB数据通信等实验。

GPIO口的使用:

a. 要控制一个设备,首先必须先使能该设备对应的端口的时钟系统

b. 配置端口: 设置工作模式(输入、输出...), 设置工作属性(输出的速度...)

   端口的配置是通过端口寄存器来进行的

   端口: PA, PB, PC, ...

   引脚: 每一个端口理论上有16个引脚,Pin_0 ~ Pin_15

   每一个端口通过7个端口寄存器来进行设置(对于简单的设置一般只使用2~3个端口寄存器就可以了)

   ①两个32位的配置寄存器(GPIOx_CRL,GPIOx_CRH) -- 一个配置寄存器管理8个引脚(一个引脚通过配置寄存器的四位来进行设置)

   (GPIOx_CRL) (x=A..G): GPIOx configuration register low, GPIOx端口低配置寄存器,用于配置GPIOx端口的第0位~第7位。

   (GPIOx_CRH) (x=A..G): GPIOx configuration register high, GPIOx端口低配置寄存器,用于配置GPIOx端口的第8位~第15位。

   ②两个32位的数据寄存器(GPIOx_IDR,GPIOx_ODR) -- 每一个引脚对应数据寄存器中的一位

   (GPIOx_IDR) (x=A..G): GPIOx  input data register -- 输入数据寄存器

   (GPIOx_ODR) (x=A..G): GPIOx  output data register -- 输出数据寄存器

   ③一个32位的置位/复位寄存器 (GPIOx_BSRR)

   (GPIOx_BSRR) (x=A..G): GPIOx bit set/reset register

   ④一个16位的复位寄存器(GPIOx_BRR)

   ⑤一个32位的锁定寄存器(GPIOx_LCKR)

   (GPIOx_LCKR) (x=A..G): GPIOx configuration lock register

一般情况下,对于输入引脚的操作通过CPIOx_CRL或者GPIOx_CRH、GPIOx_IDR就可以了;

对于输出引脚的操作通过CPIOx_CRL或者GPIOx_CRH、GPIOx_ODR就可以了

输入引脚的工作模式: 浮空输入、上拉输入、下拉输入和模拟输入

输出引脚的工作模式: 推挽输出、开漏输出、复用推挽输出、复用开漏输出(最大输出速度有10MHz,2MHz和50MHz三种)

端口配置寄存器:

端口配置低寄存器(GPIOx_CRL)(x=A..G)

端口配置高寄存器(GPIOx_CRH) (x=A..G)

每一个引脚的配置使用寄存器的4位,包含两位Mod位和两位CNF位

MODE位:

00:输入模式(复位后的状态)

01:输出模式,最大速度10MHz

10:输出模式,最大速度2MHz

11:输出模式,最大速度50MHz

CNF位:

在输入模式(MODE[1:0]=00):

00:模拟输入模式

01:浮空输入模式(复位后的状态)

10:上拉/下拉输入模式

11:保留

在输出模式(MODE[1:0]>00):

00:通用推挽输出模式

01:通用开漏输出模式

10:复用功能推挽输出模式

11:复用功能开漏输出模式

假如: LED连接在GPIOC_Pin_13, 设置对应的寄存器

使用的寄存器是: GPIOC_CRH

MOD位为: GPIOC_CRH[21:20]  == 11

CNF位为: GPIOC_CRH[23:22]  == 00

数据寄存器IDR或者ODR的每一位对应一个引脚的输入或者输出数据

比如: LED要亮

   要设置GPIOC_ODR[13] = 0

寄存器地址计算:

GPIOA: 0x4001 0800 - 0x4001 0BFF

   GPIOA_CRL: 0x4001 0800

   GPIOA_CRH: 0x4001 0804

   GPIOA_IDR: 0x4001 0808

   GPIOA_ODR: 0x4001 080C

GPIOB: 0X4001 0C00 - 0x4001 0FFF

   GPIOB_CRL: 0X4001 0C00

   GPIOB_CRH: 0X4001 0C04

   GPIOB_IDR: 0X4001 0C08

   GPIOB_ODR: 0X4001 0C0C

GPIOC: 0x4001 1000 - 0x4001 13FF

   GPIOC_CRL: 0x4001 1000

   GPIOC_CRH: 0x4001 1004

   GPIOC_IDR: 0x4001 1008

   GPIOC_ODR: 0x4001 100C

假如: LED连接在GPIOC_Pin_13, 设置为通用推挽输出,最高速度50MHz,控制LED亮

使用的寄存器是: GPIOC_CRH

MOD位为: GPIOC_CRH[21:20]  == 11

CNF位为: GPIOC_CRH[23:22]  == 00

比如: LED要亮

   要设置GPIOC_ODR[13] = 0

实时时钟寄存器基础地址: 0x4002 1000

APB2 外设时钟使能寄存器(RCC_APB2ENR) 偏移地址:0x18 -- 0x4002 1018

   GPIOC的时钟使用RCC_APBENR的bit[4], 为1使能,为0失能





 

标签:体系,架构,引脚,--,GPIOx,GPIOC,寄存器,CRH,ARM
From: https://blog.csdn.net/m0_61832483/article/details/141336853

相关文章

  • SCS(- )架构介绍
    SCS(-)架构介绍SCS(-)架构定义与特性自主Web应用:SCS是一个自主的Web应用程序,包含WebUI、逻辑和持久化层。这种完整性确保了一个用户故事通常可以通过修改一个SCS来实现。API的可选性:SCS可以有一个服务API,但这并非必需。如果SCS内的逻辑仅由SCS内的UI使用,则无需API。无共享UI:S......
  • 【系统架构设计】开发方法(一)
    【系统架构设计】开发方法(一)软件生命周期软件开发模型瀑布模型核心思想瀑布V模型缺点演化模型螺旋模型增量模型构件组装模型统一过程敏捷方法软件重用基于架构的软件设计形式化方法软件生命周期指软件自开始构思与研发到不再使用而消亡的过程。在GB8566-88(《软件工......
  • 让沟通成为实用主义的测试架构师
    谈到沟通,你可能无法充分沟通,寻求清除,一贯,持续地沟通,这会让你和团队其他个人干的更顺畅高效。实用型测试架构师的第三个关键地方是为沟通带来清晰性,除非你注重清楚、一贯、持续的沟通,否则你所有的卓越架构努力都会被低效率或欠缺的沟通方式毁于一旦。任何沟通隔阂都会被其他东......
  • PyCharm社区版配置Django 项目Debug模式配置
    1、编辑Django项目运行配置 2、选择python,点击添加 3、设置相关参数 ......
  • 【安全架构】重大活动网络安全保障建设
    一、网络攻击手段重大活动期间发生网络安全攻击最直接的影响是造成活动中断、泄露个人隐私数据以及带来相应的经济损失等,此外,还会导致损害国家声誉、国家安全等间接影响。主要攻击方式包括网络钓鱼攻击、DDoS攻击、数据泄露、无线网络攻击、间谍软件/恶意软件攻击和漏洞利用攻击......
  • 【环境搭建系列】威胁建模和架构 · 全景图
    一、SDL各阶段二、简单威胁建模过程三、威胁建模流程Devsecops工具链四、Devsecops安全工具链五、软件供应链六、威胁情报平台七、开源IOC参考八、CyberKillChain参考九、SIEM系统十、UEBA系统十一、安全扫描十二、SOAR系统十三、SOC架构十四、SOC功......
  • Kubernetes 的架构和核心概念
    Kurbernetes是Google旗下的容器跨主机编排工具。Kurbernetes可以自动化应用容器的部署、扩展和操作,提供以容器为中心的基础架构。一、Kurbernetes集群架构与组件Kubernetes采用主从分布式架构,节点在角色上分为Maste和Node。KubernetesMaster是控制节点,负责k8s集群的调......
  • 《亿级流量系统架构设计与实战》第十一章 Timeline Feed服务
    TimelineFeed服务一、概述1、分类2、功能二、设计原理1、拉模式与用户发件箱2、推模式与用户收件箱3、推拉模式结合三、关键技术1、内容与用户收件箱的交互(推模式)2、推送拆分子任务3、收件箱模型设计内容总结自《亿级流量系统架构设计与实战》一、概述1、分......
  • 事件驱动架构的事件版本管理
    有一种办法:发送会议邀请给所有团队,经过101次会议后,发布维护横幅,所有人同时点击发布按钮。或...可用适配器,但微调。没错!就像软件开发中90%问题一样,有种模式帮助你找到聪明解决方案。1问题你已经有了一个模式,消费者已知咋处理它,所以他们依赖你保持兼容性,但实际上,你要打破这种兼......
  • 【系统分析师】-综合知识-系统架构
    1、设计模式1)观察者模式定义了对象间的一种一对多依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新【消息订阅】。在该模式中,发生改变的对象称为观察目标,被通知的对象称为观察者,一个观察目标可以对应多个观察者。观察者模式的优点在于实现了表......