赞
踩
ARM 处理器采用的是精简指令集 (Reduced Instruction Set Computing,RISC)处理器架构。RISC 架构的特点包括:
目前,ARM 处理器主要分为 Cortex-A、Cortex-R、Cortex-M、SecurCore 和 Classic 几大类
该系列处理器也称为应用处理器,该系列属于高性能处理器,可使用各种开放的操作系统,比如 Linux。Cortex-A 系列处理器主要应用于智能电话、数字电视、智能书、家用网关等。
该系列处理器也称为实时处理器,基于该处理器在异常事件处理方面的性能,它主要用于实时方面的应用,包括:汽车刹车系统、动力装置等。.
该系列处理器主要应用于对价格比较敏感,也就是低成本的场合,比如:微控制器、混合信号设备、智能传感器、汽车电子和安全气囊。
该系列处理器主要应用于对安全性要求较高的场合。
该系列是以前传统的处理器架构,包括ARM7、ARM9 和ARM11等。
Cortex-M 系列处理器包括: Cortex-M0、Cortex-M0+、Cortex-M1、Cortex-M3、Cortex-M4、
Cortex-M7,该系列处理器的特点主要包括:
Cortex-M0的ARM架构为ARMv6-M,内核架构为冯诺依曼架构,包含大部分的Thumb和Thumb-2子集,硬件乘法为1或者32个周期,无硬件除法,无饱和数运算,无DSP扩展,无浮点
Cortex-M0处理器是Cortex-M 系列处理器中结构和功能最简单的一个处理器,其性能和特点主要包括:
Cortex-M0微处理器内部结构,ARM Cortex-M0微处理器包括:处理器核、嵌套向量中断控制器 (Nested VectorInterrupt Controller,NVIC)、调试子系统、唤醒中断控制器 (WakeupInterrupt Controller,WIC)、AHB LITE 总线接口以及连接这些单元的内部总线系统。下面对这些单元进行详细说明:
处理器核是 Cortex-M0最核心的功能部件,它负责对数据进行处理。
专用的 NVIC用于对中断进行管理,并且向处理器核发出中断请求信号。
总线系统用于将 Cortex-M0内部的各个功能部件连接在一起。总线系统包含:
Cortex-M0总线系统的所有总线均为 32位宽度。
AHB-Lite是ARM 公司指定的片上总线规范,广泛地应用在SOC 器件设计中。
作为 Cortex-M0处理器重要的一部分,调试子系统提供下面的功能:
WIC 用于低功耗应用。通过关闭大部分的元件,使微处理器进入休眠模式。当检测到发生中断事件时,WIC 通知电源管理单元给系统上电,使处理器从休眠状态进入到正常工作状态。
本节将详细介绍 Cortex-M0 处理器的寄存器组,对于处理器的内部寄存器来说,其特点主要包括:
对于 Cortex-M0寄存器来说,包含寄存器组和特殊寄存器。下面将对这些寄存器的功能进行详细介绍。
在寄存器组中,提供了16 个寄存器,其中 R0~R12 可作为通用寄存器,其中:
R0~R7 为低寄存器,这些寄存器可以被任何指令访问。
R8~R12为高寄存器,一些Thumb 指令不可以访问这些寄存器。
R13 寄存器可以用作堆栈指针 (Stack Pointer,SP)
SP 用于记录当前堆栈的地址。
当在不同的任务之间切换时,堆栈用于保存上下文(现场)。
在Cortex-M0中,将 SP 进一步细分为:
R14 寄存器可用作链接寄存器(Link Register,LR),其功能主要包括:
R15寄存器可用作程序计数器(Program Counter,PC),其功能主要包括:
组合程序状态寄存器 (x Program Status Register,xPSR),,用于提供执行程序的信息
以及 ALU 的标志位。它包含下面三个寄存器:
对于这三个寄存器来说,它们可以作为一个寄存器 xPSR 来访问。比如:当发生中断的时候,xPSR 会被自动压入堆栈,从中断返回时,会自动恢复数据。在入栈和出栈时,将 xPSR作为一个寄存器。
APSR 寄存器内保存着 ALU 操作后所产生的标志位,这些标志位包括:
符号标志 N
零标志Z
进位标志 C
溢出标志V
在 Cortex-M0 中,几乎所有的数据处理指令都会更改 APSR,有些指令不会修改 V 和C标志。例如MULS指令只会修改N和Z标志。
该寄存器保存当前正在执行中断服务程序 (Interrupt Service Routine,ISR)的编号。在Cortex-M0 中每个异常中断都回有一个特定的中断编号,用于表示中断类型。在调试时,它对于识别当前中断非常有用,并且在多个中断共享一个中断处理的情况下,可以识别出其中一个中断。
该寄存器中,只包含了T比特位,该位用于表示是否处于 Thumb 状态。由于 Cortex-M0只支持 Thumb 状态,因此T位总是为1。
中断屏蔽特殊寄存器(Interrupt Mask Special Register,IMSR)中包含一位 PRIMASK。当该位设置为 1时,除了不可屏蔽中断 NMI 和硬件故障异常外,将屏掉其它所有的中断。
特殊寄存器(CONTROL) 中包含了一位,该位用于定义堆栈。
Cortex-M0处理器提供了4GB 的存储器寻址空间。根据不同的使用目的将该寻址空间分成不同的区域。
尽管默认规定了这些区域的使用方法,但是程序设计人员可以灵活的根据具体要求定义存储器映射空间,比如: 访问内部私有外设总线。
保留,用于其他目的
内部私有外设总线(外设是相较于内核而言的,只能被CPU内核访问),比如:NVIC、SCS
外部设备,主要用于外部外设,比如:SD卡
RAM,主要用于外部存储器,比如:DDR、FLASH、LCD
外设,主要用于片上外设,比如:AHB、APB外设
SRAM,主要用于数据存储器,比如:片上SRAM、SDRAM
代码,主要用于程序代码,比如:片上FLASH
Cortex-M0程序代码保存在片上代码存储空间,程序代码以镜像文件的形式存在
中断向量是异常向量的一部分
当上电后,对 Cortex-M0进行复位,复位启动步骤如下:
端(Endian)是指保存在存储器中的字节顺序。根据字节在存储器中的保存顺序,将其划分为大端(Big Endian)和小端(Little Endian):
小端
对于一个 32 位字长的数据来说,最低字节保存该数据的第0位~第7位,也就是我们常说的“低址低字节,高址高字节”。
大端
对于一个 32 位字长的数据来说,最低字节保存该数据的第24位~第31位,也就是我们常的“低址高字节,高址低字节”
对于 Cortex-M0处理器来说,提供了对大端和小端的支持。然而,端概念只存在硬件这一层。
异常(Exception)是事件,它将使程序流退出当前的程序线程,然后执行和该事件相关的代码片段(子程序),通过软件代码,可以使能或者禁止处理器核对异常事件的响应。事件可以是内部的也可以是外部的,如果事件来自外部,则称为中断请求(Interrupt Request,IRQ)。
在 Cortex-M0中,通常将异常 (中断)分成多个优先级。当 Cortex-M0的处理器核正在处理低优先级的异常事件时,可以触发高优先级的事件。高优先级事件可以打断正在处理低优先级事件的能力,称为中断嵌套。
在Cortex-M0中的NVIC,支持最多32个中断请求IRQ以及一个NMI的输入。
NMI 和IRQ类型的主要区别,NMI 是不能被屏蔽的,它具有最高优先级,因此它可以用于对安全性要求比较苛刻的系统,比如:工业控制或者汽车。
活动就是表示当前处理器核正在处理的异常事件,挂起就是等待需要处理的异常事件。
__Vectors DCD __initial_sp ; Top of Stack,栈顶
DCD Reset_Handler ; Reset Handler,复位向量
DCD NMI_Handler ; NMI Handler,NMI句柄
DCD HardFault_Handler ; Hard Fault Handler,硬件故障句柄
DCD MemManage_Handler ; MPU Fault Handler,存储器管理句柄
DCD BusFault_Handler ; Bus Fault Handler,总线故障句柄
DCD UsageFault_Handler ; Usage Fault Handler,使用故障句柄
DCD 0 ; Reserved,保留×4
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD SVC_Handler ; SVCall Handler,SVCall句柄
DCD DebugMon_Handler ; Debug Monitor Handler,调试监控句柄
DCD 0 ; Reserved
DCD PendSV_Handler ; PendSV Handler,PendSV句柄
DCD SysTick_Handler ; SysTick Handler,SysTick句柄
; External Interrupts,外部向量起始
在 Cortex-M0中,提供了不同的异常类型,以满足不同应用的需求,包括:复位、不可屏蔽中断、硬件故障、请求管理调用、可挂起的系统调用、系统滴答和外部中断。
ARMv6-M 框架支持两级复位,包括:
对于不可屏蔽中断 NMI 来说,特点如下:
硬件故障常用于处理程序执行时产生的错误,这些错误可以是试图执行未知的操作码总线接口或存储器系统的错误,也可以是尝试切换到ARM 状态之类的非法操作。
在执行 SVC 指令时,就会产生 SVC 异常,通常用于运行操作系统的入式系统中,它为应用程序提供了访问系统服务的入口。
PendSV 是用于包含OS(操作系统)的应用程序的另一个异常,SVC 异常在 SVC 指令执行后会马上开始,PendSV在这点上有所不同,它可以延迟执行,在 OS 上使用 PendSV 可以确保高优先级任务完成后才执行系统调度。
NVIC 中的 SysTick 定时器为 OS 应用可以使用的另外一个特性。几乎所有操作系统的运行都需要上下文(现场)切换,而这一过程通常需要依靠定时器来完成。Cortex-M0内集成了一个简单的定时器,这样使得操作系统的移植更加容易。在实际应用中,SysTick 为选配。
Cortex-M0 微控制器可以支持 1~32 个外部中断,中断信号可以连接到片上外设,也可以通过1/0 端口连接到外部中断源上。根据微控制器设计的不同,有些情况下,外部中断的数目可能与 Cortex-M0处理器的中断个数不同。
只有用户使能外部中断后,才能使用它。如果禁止了外部中断,或者处理器正在运行另·个相同或者更高优先级的异常处理,则中断请求会被保存在挂起状态寄存器中。当处理完高优先级的中断或返回后,才能执行挂起的中断请求。对于 NVIC 来说,可接受的中断请求信号可以是高逻辑电平,也可以是中断脉冲(最少为一个时钟周期)。
在MCU 外部接口中,外部中断信号可以是高电平也可以是低电平,或者可以通过编程配置;
程序可以修改外部中断的优先级
参考资料
《ARM Cortex-M0 全可编程SoC原理及实现》
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。