ARM芯片层相关术语和缩写汇总(一)

以下相关名词及说明均为网络信息收集

1、ISA

Instruction set architecture.指令集或指令集体系, 是计算机体系结构中与程序设计有关的部分,包含了基本数据类型,指令集,寄存器,寻址模式,存储体系,中断,异常处理以及外部I/O。指令集架构包含一系列的opcode即操作码(机器语言),以及由特定处理器执行的基本命令。

常见种类如下: 复杂指令集运算(Complex Instruction Set Computing,CISC);精简指令集运算(Reduced Instruction Set Computing,RISC)

 2、RISC

Reduced instruction set computer,精简指令集计算机,是一种执行较少类型计算机指令的微处理器.这样一来,它能够以更快的速度执行操作。因为计算机执行每个指令类型都需要额外的晶体管电路元件,计算机指令集越大就会使微处理器更复杂,执行操作也会更慢。

3、CISC

Complex instruction set computer, 复杂指令系统计算机,从计算机诞生以来,人们一直沿用CISC指令集方式。早期的桌面软件是按CISC设计的,并一直沿续到现在。目前,桌面计算机流行的x86体系结构即使用CISC。

4、AMBA

Advanced Microcontroller Bus Architecture,高级微控制器总线架构,是用于ARM架构系统芯片(SoC)设计中的一种总线架构,由安谋国际科技于1995年开发, 已经经历了很多版本。

1995:AMBA1.0 定义了APB外设总线以及ASB系统总线

1999: AMBA2.0 定义了AHB - Advanced High-performance Bus, APB总线升级为同步总线

2003: AMBA3.0 发布了高性能互联协议AXI,  以及APB总线扩展, AHB-Lite协议等

目前最常用的AMBA总线有如下三种:

AHB:Advanced High-performance Bus高级高性能总线

APB:Advanced Peripheral Bus,高级外设总线

AXI:Advanced eXtensible Interface, 高级可扩展接口。AXI 为AMBA3.0引入的总线协议,  相比AHB有更多的优势,  故现在SOC设计中有取代AHB的趋势。

众所周知,AHB的速度比较快,但SOC中大多数外设是挂在APB上,以AHB to APB bridge作为master,而bridge又作为slave接到AHB上,那么为什么不把所有外设都挂在AHB上,以获得最快的访问速度?

主要有以下四个原因:

1、片上存储器直接与CPU进行数据交互,需要保证对它们有足够快的访问速度,所以必然挂在AHB上,DMA负责不同存储器或外设之间的数据传输,所以也挂在AHB上,而SOC上的其他大多数外设,它们挂在总线上的目的是CPU可以通过总线读写它们的寄存器,并不会过于频繁,不需要太快的速度。

2、如果所有外设都挂在AHB下,会导致bus matrix的负载(扇出)过多,可能使相关路径的时序显著恶化,导致时钟频率降低,反而降低了CPU的性能。

3、APB总线及其上的设备因为对速度要求低,可以用频率较低的PCLK,甚至将其电源关掉,以节省功耗

4、APB协议是非流水线的,能减少SLAVE的设计复杂度,并且使SLAVE易于复用

5、MPU

Memory Protection Unit,内存保护单元。 它是 Cortex-M 处理器内部的一个模块(注意:并不是所有 Cortex-M 版本都支持 MPU,并且在一些支持 MPU 的 Cortex-M 版本上,MPU 也是可选组件(要看具体MCU厂商是否实现))

MPU存储器保护单元,它可以实施对存储器(主要是内存和外设寄存器)的保护,以使软件更加健壮和可靠。在使用前,必须根据需要对其编程。如果没有启用MPU,则等同于系统中没有配MPU。

MPU有如下的能力可以提高系统的可靠性:

1、阻止用户应用程序破坏操作系统使用的数据。

2、阻止一个任务访问其它任务的数据区,从而把任务隔开。

3、可以把关键数据区设置为只读,从根本上消除了被破坏的可能。

4、检测意外的存储访问,如,堆栈溢出,数组越界。

此外,还可以通过MPU设置存储器regions的其它访问属性,比如,是否缓区,是否缓冲等

6、NVIC

Nested Vectored Interrupt Controller,嵌套向量中断控制器

是用来管理中断嵌套的,核心任务就是在于其优先级的管理。NVIC给每个中断赋予先占优先级和次占优先级。它们的关系描述如下:

1、拥有较高先占优先级的中断可以打断先占优先级较低的中断(类似前面所说的执行优先级)。

2、若两个先占优先级的中断同时挂起,则优先执行次占优先级较高的中断。

3、若两个挂起的中断两个优先级都一致,则优先执行位于中断向量表中位置较高的中断。

4、无论任何时刻,次占优先级都不会造成中断嵌套,即是说中断嵌套完全是由先占优先级决定的。

NVIC通过优先级分组来分配先占优先级和次占优先级的数量。

7、WIC

Wake-up interrupt controller,唤醒中断控制器。

cortex-m处理器处于sleep mode或deep sleep mode时,处理器需要外部中断信号来唤醒,才能继续执行指令。

在deep sleep mode下,处理器可能没有时钟,甚至已经被断电(具体行为取决于芯片设计者,arm并没有明确规定),并不能接收到外部中断信号,因此为了能够正确唤醒处理器,需要一个电路来接收外部中断信号,并通知片上PMU(Power Management Unit)给处理器提供时钟或电源,并在处理器可以接收中断后,将收到的中断信号送回给处理器,但这一功能是可选的。

WIC就是实现这一功能的电路。

8、NMI

Non maskable interrupt 不可屏蔽中断。

在ARM cortex M处理器中具有最高的优先级,通常被用于接收并处理一些威胁到芯片安全的事件。

NMI的三个常见用途:

1、watchdog的计数器因为系统出现故障没有及时清除计数器而导致溢出时,可以产生NMI请求(当然,更常见的做法是产生复位)

2、Brown-out detector(BOD),实时检查芯片的供电电压,如果低于警戒值,则产生NMI请求(也可以是产生复位,取决于芯片设计)

3、芯片上的其他安全事件,比如检测到某些信号线收到攻击而发生错误,或者发生了越界的存储空间访问(由MMU等模块监控)等,实际的情况由具体的芯片设计决定

9、SP、MSP、PSP

SP:Stack Pointer 栈指针, 指向最后一个被压入元素的地址

MSP:Main Stack Pointer,主栈指针

PSP:Process Stack Pointer,进程栈指针

Cortex-M架构的压栈和弹栈过程:

1、压栈:SP先自减4,然后将待压入的数据存放到SP所指的地址

2、弹栈:从SP指针所指的地址读出数据,然后SP指针自增4

Cortex-M内核何时使用MSP何时使用PSP?

Cortex-M双堆栈的意思是有两个堆栈,但是任何时刻只能使用其中之一。

那什么时候使用MSP,什么时候使用PSP呢?也就是说SP寄存器中的值在某一时刻到底是使用MSP的值还是PSP的值?

这是根据CONTROL寄存器的bit1来决定的。当CONTROL的bit1为0使用MSP(默认方式);当CONTROL的bit1为1使用PSP。

ARM芯片层相关术语和缩写汇总(一)_第1张图片

 根据以上分析:

1、CONTROL的bit1为0,SP = MSP

2、CONTROL的bit1为1,SP = PSP

3、Cortex-M芯片复位后处于线程模式特权级,默认使用MSP。

通过配置CONTROL寄存器的bit1位就可以决定SP使用MSP还是PSP。

在裸机开发中,CONTROL的bit1始终是0,也就是说裸机开发中全程使用程MSP,并没有使用PSP。在执行后台程序(大循环程序)SP使用的是MSP,在执行前台程序(中断服务程序)SP使用的是MSP。

在OS开发中,当运行中断服务程序的时候CONTROL的bit1是0,SP使用的是MSP;当运行线程程序的时候CONTROL的bit1是1,SP使用的是PSP

参考博客:

1、Cortex-M3双堆栈MSP和PSP_zhaodong_jack的博客-CSDN博客_msp和psp

2、NMI在芯片常见用途_硅农阿轩的博客-CSDN博客_cortex nmi

3、Cortex M3:MPU_WenLang_M的博客-CSDN博客

你可能感兴趣的:(Cortex-M,arm,嵌入式硬件)