状态与模式:
传统的ARM7核有ARM状态和Thumb状态,有7种模式,比较复杂
Cortex-m0只有调试状态和Thumb状态,有两种模式,两种模式相当于内核态和用户态
内核寄存器:
寄存器组:R0~R15,其中R13也是堆栈指针SP。SP在不同的物理位置有两个堆栈指针,一个是MSP(主栈指针),用于处理异常;一个是PSP(进程栈指针),一般没有必要使用,由CONTROL寄存器配置。
特殊寄存器:xPSR--->状态寄存器:APSR,IPSR,EPSR--->以前2个:CPSR,SPSR
APSR--->应用程序状态寄存器:NZCV
IPSR--->中断程序状态寄存器:用了6位,当前执行的中断号
EPSR--->执行程序状态寄存器:只用1位,Thumb位
PRIMMASK--->中断屏蔽寄存器:中断总开关
CONTROL--->控制寄存器:选堆栈指针
存储系统:
外部设备、私有外设和存储器统一编址
私有外设:内置的中断向量控制器和调试设备
中断与异常
中断处理是嵌入式系统中非常常见的功能,它是一种常见的处理人机交互及机机交互的手段,为了管理不同的设备中断,通常在CPU和设备之间增加一个向量中断控制器(VIC),屏蔽掉不同设备之间的差别(分层设计),由于嵌入式系统中设备众多,Cortex-M0之间将VIC集成到内核中:
而且在传统的 处理器中,异常处理的起始地址是固定的,内核只有一个IRQ输入,多个中断需要共享一个IRQ处理入口,中断处理也要访问中断控制器才能确定当前发生的中断。而对于Cortex-M0处理器,内置的中断控制器支持向量中断,这意味着不同的异常向量是独立的,而且中断服务程序的入口自动分配,无须软件干预。
中断使能:SETEA,CLRENA
中断挂起:SETPEND,CLRPEND
中断优先级:SCB(系统控制块)的特定区域IRP0~IRP31
CMSIS--Cortex-M软件接口规范:
CMSIS是ARM公司与多家不同的芯片和软件供应商一起紧密合作定义的,提供了内核与外设、实时操作系统和中间设备之间的通用接口。
CMSIS软件层次
CMSIS可以分为多个软件层次,分别由ARM公司、芯片供应商提供。
其中ARM提供了下列部分,可用于多种编译器:
● 内核设备访问层:包含了用来访问内核的寄存器设备的名称定义,地址定义和助手函数。同时也为RTOS(实时操作系统)定义了独立于微控制器的接口,该接口包括调试通道定义。
● 中间设备访问层:为软件提供了访问外设的通用方法。芯片供应商应当修改中间设备访问层,以适应中间设备组件用到的微控制器上的外设。目前中间设备访问层仍处于开发过程中,芯片供应商扩展下列软件层:
● 微控制器外设访问层:提供片上所有外设的定义。
● 外设的访问函数(可选):为外设提供额外的助手函数。CMSIS为Cortex-Mx微控制器系统定义了:
● 访问外设寄存器的通用方法和定义异常向量的通用方法。
● 内核设备的寄存器名称和内核异常向量的名称。
● 独立于微控制器的RTOS接口,带调试通道。
● 中间设备组件接口(TCP/IP协议栈,闪存文件系统)。
CMSIS包含的组件
1、外围寄存器和中断定义: 适用于设备寄存器和中断的一致接口
2、内核外设函数:特定处理器功能和内核外设的访问函数
3、DSP 库:优化的信号处理算法,并为 SIMD 指令提供Cortex-M4 支持
4、系统视图说明(SVD):描述设备外设和中断的XML 文件。
/****************************************/
很遗憾,有很多的东西我没有办法一一给大家回复,所以我建立了一个群,供大家一起交流!