IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 【嵌入式操作系统-2】Cortex-M7处理器编程者模型 -> 正文阅读

[嵌入式]【嵌入式操作系统-2】Cortex-M7处理器编程者模型

Cortex-M7内核外设

Cortex-M7处理器实现

  1. 中断向量控制器
    NVIC是一种嵌入式的中断控制器,它支持低延迟的中断处理。

  2. 系统控制模块
    系统控制模块(SCB)是访问处理器的接口,它提供了包含配置,控制,报告异常信息在内的系统实现和系统控制。

  3. 系统定时器
    一个24位的向下计数计数器,可以用作实时操作系统的节拍计时器或者普通计时器。

  4. 集成指令和数据缓存(可选)
    指令和数据缓存提供了对频繁访问的数据和指令的快速访问,提高了系统访问内存的平均性能。

  5. 内存保护单元(可选)
    内存保护单元通过为不同的内存区域定义访问属性提高了系统的可靠性,它提供了多达八个或者16个不同的区域,和一个可选择的预定义备份区。

  6. 浮点运算单元
    浮点运行单元支持32位的单精度浮点运算和64位的双精度浮点运算。

Cortex-M7处理器编程者模型

程序员模型是指从编程者的角度来看,处理器提供了哪些可用的特性给编程人员,这部分除了单独的核心寄存器描述外,还包含有关处理器模式的信息和软件执行和堆栈的特权级别。

软件运行时的处理器模式和特权级

两种处理器模式:

线程模式

  • 线程模式用于执行应用程序,当复位结束之后处理器就进入了线程模式。

Handler模式

  • 用于处理异常,当异常处理完成后将恢复为线程模式。

软件运行时的两种特权等级:

非特权级:

  • 对MRS和MSR指令(访问特殊功能寄存器)的访问受限,并且不能使用CPS指令(Change Processor State)。
  • 不能访问系统定时器,NVIC,和SCB。
  • 访问内存或者外设可能受到限制。

特权级:

  • 特权级下可以使用所有指令和访问所有的资源。

  • 在线程模式下,控制寄存器控制着软件处于特权级还是非特权级,而在Handler模式,软件始终处于特权级。

  • 只有在特权级运行的软件才能够操作控制寄存器改变在线程模式下的特权级别,非特权级的软件可以使用SVC指令触发一个系统调用来转移控制到特权级软件。

  • 处理器使用的是满递减式栈,这意味着栈顶指针保存着最后一个入栈的元素的地址,当一个新的元素入栈,栈指针将递减,然后将新的值写入栈中。
  • 处理器实现了两种栈,一种是主栈,另一个是进程栈,他们拥有独立的栈指针。
  • 在线程模式下,控制寄存器控制着处理器使用主栈还是进程栈,而在Handler模式,始终使用主栈。
处理器模式执行的程序软件运行时的特权级使用的栈
Thread应用程序特权级或者非特权级主栈或者进程栈
Handler异常处理特权级主栈

处理器寄存器

在这里插入图片描述

寄存器读写属性特权/非特权访问复位后的值描述
R0-R12RW均可以未知32位的通用寄存器
MSPRW均可以复位后从地址0x00000000加载MSP的初始值
(引导程序的中断向量表从0x00000000开始,前四个字节为sp初值)
主栈指针
PSPRW均可以0x00000000主栈指针
LRRW均可以0xFFFFFFFF链接寄存器
PCRW均可以复位后从地址0x00000004加载复位向量的值,该值的第0位会被加载到ESSR的T位,用于决定程序是否运行于Thumb状态程序计数器
PSRRW均可以0x01000000程序状态寄存器不是一个寄存器,它包含APSR,IPSR,EPSR
APSRRW均可以未知应用程序状态寄存器
IPSPRRO特权0x00000000中断程序状态寄存器
EPSRRO特权0x01000000运行程序状态寄存器
PRIMASKRW特权0x00000000优先级掩码寄存器
FAULTMASKRW特权0x00000000故障掩码寄存器
BASEPRIRW特权0x00000000基本优先级掩码寄存器
CONTROLRW特权0x00000000控制寄存器

栈指针

在线程模式下,控制寄存器的bit[1]指示当前使用的是哪一个栈指针

  • 0 主栈(MSP)
  • 1 线程栈(PSP)

链接寄存器

存储了函数调用,异常处理的返回信息,复位后值为0xFFFFFFFF

程序计数器

包含当前指令的地址,复位后从0x00000004加载复位向量的值作为初值,该值的bit[0]会被加载到运行程序状态寄存器(EPSR)的T位,表明当前程序运行在Thumb状态还是其他状态。

程序状态寄存器

程序状态寄存器是APSR,EPSR,IPSR的组合,它们之间的位域相互独立,比特位的分布如下:
在这里插入图片描述
这些状态寄存器可以单独访问,也可以两个或者三个寄存器组合访问,访问他们使用MSR指令和MRS指令,下面是组合访问时的寄存器名称:
在这里插入图片描述

应用程序状态寄存器

应用程序状态寄存器中的标识位表示了运行指令后的当前状态。
在这里插入图片描述

中断程序状态寄存器

  • 中断程序状态寄存器中保存了当前中断服务程序的中断号,和中断向量表对应,在中断向量表0项存储的是MSP初值,第一项是复位向量,这两个都不是程序正常运行时的中断向量,下表中将0用于代表线程模式,1进行了保留,其他值和中断向量的位置一一对应。
    在这里插入图片描述

运行程序状态寄存器

ICI域:

  • 当中断发生时程序正在执行STM,LDM,PUSH,POP指令,或者FPU正在运行VSTM,VLDM,VPUSH,VPOP时会暂停该指令,然后把下一个操作数放到ICI域中,当中断执行完成之后,从ICI域中恢复操作数,继续执行该指令。

Thumb 状态:

  • Cortex-M7只能在Thumb状态下运行指令,下面几种情况会把该位清零
    • BLX, BX, POP{PC}
    • 异常返回时从栈中恢复状态寄存器的值。
    • 一个中断向量的Bit[0]或者复位。
  • 当T位为0时运行指令会发生故障或者锁住。
    在这里插入图片描述
    使用MRS指令读取该寄存器直接返回0,用MSR指令写该寄存器直接忽略。

异常掩码寄存器

异常掩码寄存器用于处理器屏蔽中断或者异常,但是它会影响任务的实时性,要想修改这些寄存器的值需要通过MSR或者MRS,CPS指令修改FAULTMASK或者PRIMASK。

优先级掩码寄存器

PRIMASK的Bit[0]用于屏蔽优先级可配置的异常,也就是除了NMI和HardFault都可以屏蔽。
在这里插入图片描述

故障掩码寄存器

它的第0位决定了是否屏蔽除了不可屏蔽中断(NMI)之外的其他中断,通过MSR指令在特权模式下可以访问。
在这里插入图片描述

基本优先级掩码寄存器

当BASEPRI的值不为0时,将会屏蔽小于等于该优先级的中断。
在这里插入图片描述

控制寄存器

该寄存器控制着线程模式下程序运行时的特权等级和使用的栈,还可以指示当前是否处于FPU状态。
在这里插入图片描述

  • Handler模式下始终使用MSP,因此在Handler模式下处理器会忽略对SPSEL位的写入,异常的进入和返回机制会根据EXC_RETURN的值自动更新控制寄存器的值。
  • 在带操作系统的环境下,作者建议在线程模式下使用PSP,内核和异常处理使用MSP。
  • 默认情况下,线程模式下使用的是MSP,如果想切换成PSP:
    • 可以使用MSR指令修改SPSEL位为1
    • 执行一个异常处理然后使用一个适当的EXC_RETURN进行返回。
  • 当切换栈指针之后必须使用ISB指令刷新流水线,以保证在ISB之后执行的指令都使用新的栈。
  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-04-28 12:02:29  更:2022-04-28 12:03:12 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/30 1:16:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码