首页 > 其他分享 >Cortex-M3初探

Cortex-M3初探

时间:2024-08-01 17:05:50浏览次数:12  
标签:优先级 中断 特权 初探 Cortex M3 寄存器 服务例程 异常

目录

寄存器组

Cortex-M3处理器拥有R0-R15的寄存器组,其中R0-R12为通用寄存器;R13作为堆栈指针SP(SP主堆栈指针MSP和进程堆栈指针PSP);R14为连接寄存器;R15为程序计数器。

R0-R12:通用寄存器

R0-R12都是32位的通用寄存器,主要用于暂存数据和中间计算结果,在函数调用过程中函数的参数以及在多任务系统中任务的上下文信息通常通过R0-R3进行保存。

R13:两个堆栈指针 SP

Cortex-M3有两个堆栈指针,在任一时刻只能使用其中一个。

主堆栈指针(MSP):复位后缺省使用的堆栈指针,用于操作系统内核及异常处理例程(中断服务例程使用的永远都是MSP)。

进程堆栈指针(PSP):由用户的应用程序代码使用。

R14:连接寄存器 LR

LR寄存器主要用于存储函数调用的返回地址,当执行函数调用指令,当前函数地址会被存储到LR寄存器中,这样在函数执行结束后,处理器就可以使用LR寄存器中的地址返回到调用该函数的地方。在发生异常处理时处理器也会将当前地址存储到LR寄存器中,以便在异常处理结束后返回到异常发生的地方继续执行。

R15:程序计数寄存器 PC

PC寄存器存储当前正在执行的指令的地址,它是处理器执行指令的关键,每执行一条指令,PC寄存器的值自动增加指向下一条要执行的指令。

注意区分一下LR寄存器和PC寄存器:LR寄存器是用于存储函数调用或异常处理的返回地址,它的更新与程序函数调用和异常处理直接相关;PC寄存器负责控制和管理程序的指令执行流程,它的更新是由处理器硬件自动管理的,它直接控制了程序的执行顺序和指令的流动。

特殊功能寄存器

Cortex-M3在内核上还搭载了若干特殊功能寄存器,如程序状态字寄存器(xPSR)、中断屏蔽寄存器组(PRIMASK、FAULTMASK、BASEPRI)、控制寄存器(CONTROL)。

xPSR寄存器

记录ALU标志(0标志,进位标志,负数标志,溢出标志)、执行状态、当前正在服务的中断号。

PRIMASK寄存器

该寄存器用于屏蔽所有可编程中断,当然不可编程中断如NMI、硬(hard)fault是不可编程的所以无法屏蔽。

FAULTMASK寄存器

该寄存器也可用于屏蔽中断,但相比于PRIMASK,该寄存器会屏蔽除NMI之外的所有中断,即便是硬(hard)fault也会被屏蔽掉。

BASEPRI寄存器

屏蔽优先级小于等于某个值的中断,如设置为5则表示屏蔽掉优先级小于等于5往后的所有中断,优先级比5大的则不会屏蔽。该寄存器写0表示不屏蔽任何中断。

CONTROL寄存器

定义特权状态(特权级还是用户级),并且决定使用哪一个堆栈指针(MSP还是PSP)。

以下为Cortex-M3异常类型

操作模式与特权级别

Cortex-M3支持两种处理器模式和两个特权操作。

两种处理模式为:handler模式和线程模式。引入两种模式的本意是用于区分普通的应用程序代码和异常服务例程代码。

两种特权级别为:特权级和用户级。

在CM3运行主程序时(线程模式),既可以使用特权级也可以使用用户级,但是异常服务例程必须在特权级下执行。复位后处理器默认进入线程模式、特权级。在特权级下程序可以访问所有范围的存储器(如果有MPU内存管理单元则要在MPU规定的禁地之外),并且可以执行所有指令。

用户级切换为特权级的流程

用户级程序不能通过简单的修改CONTROL寄存器的值就进入特权级,它必须先进行“申诉”:执行一条系统调用指令SVC,这将会触发SVC异常由异常服务例程接管,如果批准了进入,则异常服务例程修改CONTROL寄存器才能从用户级进入特权级(要明白异常服务例程是在特权级下执行的,也就是说只有在特权级下进行修改CONTROL寄存器才能从用户级进入特权级)。

操作系统的内核通常都是在特权模式下运行,因为需要访问一些特殊的存储器、寄存器。

内建的嵌套向量中断控制器 NVIC

NVIC与内核是紧耦合的,它不属于某一款芯片的外设,其属于内核,所以如果大家去查阅相关如中文参考手册能找到的描述其实是不多的。因为类似中文参考手册大多介绍的是某一系列单片机的基本外设,NVIC不属于某一系列芯片的外设,它属于内核。

NVIC提供以下功能:

可嵌套的中断管理

向量中断支持

动态的优先级调整支持

中断延迟大大缩短

中断可屏蔽

可嵌套的中断支持

当一个异常发生时,硬件会自动比较该异常的优先级是否比当前异常优先级更高,如果更高,处理器会中断当前的中断服务例程,而服务新来的异常---即抢占。

向量中断支持

当开始响应一个中断后,CM3会自动定位一张向量表,并且根据中断号从向量表中找到中断服务例程的入口,然后跳转过去执行。

动态优先级调整支持

软件可以在运行时更改中断的优先级,如果在某个中断服务例程中修改了自己对应的中断优先级,而这个中断又有新的实例处于悬起中,也不会自己打断自己。

中断延迟大大缩减

Cortex-M3为了缩减中断延迟引入了好几个新特性,包括自动现场保护和恢复,咬尾中断和晚到中断,用于缩短中断嵌套时的ISR间的延迟。

咬尾中断简单来说就是在上一个中断执行完毕后不进行POP相关的寄存器,而是下一个异常继续使用上一个异常已经PUSH好的成果,形成首位紧密衔接的情况,所以叫做咬尾中断。

晚到中断就是如果在响应某一低优先级异常#1的早期检测到了更高优先级异常#2,只要#2不是太晚到就能以晚到中断的方式处理。即#1进行入栈结束后执行#2的服务例程,相当于#1帮#2做了入栈动作(徒做嫁衣了)。

中断可屏蔽

即可以屏蔽优先级低于某个阈值的中断(通过设置BASEPRI寄存器),也可以进行全体封杀(通过设置PRIMASK或FAULTMASK)。操作系统中的临界区操作常常使用到BASEPRI寄存器屏蔽某些中断以实现临界操作。

中断和异常

CM3支持16-4-1=11中系统异常(保留了4+1个档位),外加240个外部中断输入。CM3中取消了FIQ(快速中断请求,用于处理一些高优先级、对响应时间要求极高的中断事件),因为有了更好的机制---中断优先级管理和嵌套中断支持。CM3的所有中断机制都是由NVIC实现的。

要注意,虽然CM3支持多达256个中断,但具体使用的数量多少是由芯片生产商来决定的。

标签:优先级,中断,特权,初探,Cortex,M3,寄存器,服务例程,异常
From: https://www.cnblogs.com/RAM-YAO/p/18337045

相关文章

  • vue播放flv、hls(m3u8)视频及动态切换视频流
    【了解video.js】官方地址: https://github.com/videojs/video.js【用法】1、安装npminstallvideo.js--savenpminstallvideojs-flash--save//rtmp格式//flv格式npminstallflv.js--savenpminstallvideojs-flvjs-es6--save//hls格式video.js7.0以后版本......
  • STM32的内存映射机制详解
    目录前言一、基本概念二、内存映射的组成三、典型布局四、常用映射前言刚开始学习STM32的同学可能只知道按案例配置RAM、Flash的起始地址和容量,但是这个地址是怎么来的,可能并不清楚,接下来让我来给大家介绍一下STM32的内存映射机制。STM32的内存映射机制是一种将不同......
  • STM32G030F6P6TR_IAP
       bootloader程序 STM32FLASH读写1/**2******************************************************************************3*@filestmflash.c4*@brief读写STM32内部flash(STM32G030F6P6TR)5**************************************......
  • STM32—GPIO
    1.GPIO介绍GPIO可配置8种输入输出模式模式名称性质特征浮空输入数字输入可读取引脚电平,若引脚悬空,则电平不确定上拉输入数字输入可读取引脚电平,内部连接上拉电阻,悬空时默认高电平下拉输入数字输入可读取引脚电平,内部链接下拉电阻,悬空时默认低电平模拟输入模拟输入GPIO无效,......
  • 基于STM32设计的实验室智能门禁系统(华为云IOT)(198)
    基于STM32设计的实验室智能门禁系统(华为云IOT)(198)文章目录一、前言1.1项目介绍【1】项目功能介绍【2】项目硬件模块组成1.2设计思路【1】整体设计思路【2】整体构架【3】上位机开发思路【4】供电方式1.3项目开发背景【1】选题的意义......
  • STM32F1基于HAL库的学习记录实用使用教程分享(二、GPIO_Input 按键)
    往期内容STM32F1基于HAL库的学习记录实用使用教程分享(一、GPIO_Output)文章目录往期内容前言一、GPIO_Input1.浮空输入(GPIO_Mode_IN_FLOATING)2.上拉输入(GPIO_Mode_IPU)3.下拉输入(GPIO_Mode_IPD)4.上拉和下拉的区分原因二、配置1.RCC2.SYS(1).Debug(2).SystemWa......
  • 【计算机毕业设计】ssm399基于vue的电商购物网站+vue
    使用旧方法对电商购物信息进行系统化管理已经不再让人们信赖了,把现在的网络信息技术运用在电商购物信息的管理上面可以解决许多信息管理上面的难题,比如处理数据时间很长,数据存在错误不能及时纠正等问题。这次开发的电商购物网站管理员功能有个人中心,用户管理,商品类型管理,商......
  • 【计算机毕业设计】ssm398基于javaweb的酒店预订管理系统+vue
    使用旧方法对酒店预订信息进行系统化管理已经不再让人们信赖了,把现在的网络信息技术运用在酒店预订信息的管理上面可以解决许多信息管理上面的难题,比如处理数据时间很长,数据存在错误不能及时纠正等问题。这次开发的酒店预订管理系统管理员功能有个人中心,用户管理,房间类型管......
  • STM32下载程序的方式
            STM32下载程序的方式多种多样,每种方式都有其特点和适用场景。以下是一些常见的STM32下载程序的方式:1.SWD接口下载特点:        SWD(SerialWireDebug)是STM32特有的一种串行调试接口,通过两根线(SWDIO串行数据输入输出和SWCLK串行时钟输入)实现程序的下......
  • 基于 STM32 的 NAS私有云盘搭建:集成LwIP 协议、HTTP/HTTPS、WEB前端技术栈(代码示例)
    项目概述在本项目中,我们将搭建一个基于STM32的NAS(网络附加存储)私盘,通过网络访问存储在外部SATA硬盘上的文件。该项目将使用STM32开发板、外接SATA硬盘、LwIP协议栈以及FATFS文件系统来实现文件的上传、下载和管理,用户可以通过简单的Web界面进行操作。系统设计......