姓名:陈星月 学号:19029100022 学院:丁香2号书院
转自:https://blog.csdn.net/csyifanZhang/article/details/104648813
【嵌牛导读】本文将对嵌入式系统的ARM Cortex-M3进行介绍
【嵌牛鼻子】ARM Cortex-M3
【嵌牛提问】什么是ARM Cortex-M3?
【嵌牛正文】
4.操作模式和特权级别
Cortex-M3处理器支持两种处理器的操作模式,还支持两级特权操作。两种操作模式分别为:处理者模式(handler mode)和线程模式(thread mode)。两级特权操作分别为:特权级和用户级(非特权级)
(1)特权访问与用户访问(非特权访问)
特权执行可以访问所有资源。
非特权执行时对有些资源的访问受到限制或不允许访问。如部分指令的使用 (设置FAULTMASK和PRIMASK的CPS指令 )对系统控制空间(SCS)的大部分寄存器的访问。
(2)线程模式和处理者模式
Cortex-M3处理器支持两种工作模式:线程模式和处理者模式
① 线程模式–可特权可用户
在复位时处理器进入线程模式–准确来说复位之后处理器特权及访问
异常返回时处理器进入线程模式
特权和用户(非特权)代码能够在线程模式下运行
线程模式下用户级访问和特权级访问的转换
② 处理者模式-全特权访问-异常读物
出现异常时处理器进入处理者模式
在处理者模式中,所有代码都是特权访问的
③ Tips
(1)用户可以方便地从特权级切换到用户级,但一旦进入用户级,就不能简单地试图改写控制寄存器就回到特权级,必须先申诉:执行一条系统调用指令SVC。
(2)通过引入特权级和用户级,就能够在硬件水平上限制某些不受信任的或者还没调试好的程序,不让他们随意配置涉及要害的寄存器,因而系统的可靠性得到了提高。
(3)主堆栈和进程堆栈
Cortex-M3内核有两个堆栈指针:MSP(SP_main)和PSP(SP_process)
堆栈指针R13是分组寄存器,在SP_main和SP_process之间切换。在任何时候,进程堆栈和主堆栈中只有一个是可见的。
MSP:由操作系统内核,异常服务例程以及应用程序代码访问-处理者模式只能使用MSP,因为他永远是特权级的。
PSP:用于不处于异常服务例程中的常规的应用程序代码。
控制寄存器用于定义特权级别,还用于选择当前使用哪个堆栈指针。
5.存储器映射
总体来说,Cortex-M3支持4GB存储空间。
内存中有两种格式存储字数据,称之为大端格式和小端格式。
大端格式:字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中。
小端格式:与大端存储格式相反,低地址中存放的是字数据的低字节,高地址存储存放的是字数据的高字节。
Cortex-M3处理器支持的数据类型有32位字、16位半字和8位字节。Cortex-M3处理器支持非对齐的传送,数据存储器的访问无须对齐。
6.流水线
Cortex-M3处理器使用一个带分支预测的3级流水线,分别是取指、解码和执行。因为带分支预测,跳转指令在译码时就被识别,取指时流水线自动加载跳转后地址的指令。
(1)分支预测功能
到BNE的时候,由于BNE是跳转指令,是否跳转取决于前面CMP指令的结果,由于CMP指令已经译码了,因此就可以预测到底是跳转还是顺序执行,如果跳转那么下一个指令直接就取跳转之后位置的指令,这叫作分支预测。
7.异常和中断
异常:指在正常的程序执行流程中发生暂时的停止并转向相应的处理。既包括系统异常,也包括一些程序中断。
中断:是对Cortex-M3核来说是来自内核的外面,来自各种片上外设或外扩的外设。
系统异常:是因为内核的活动产生的,即在执行指令或访问存储器时产生。
在处理异常前,当前处理器的状态必须保留,这样当异常处理完成后,当前程序继续执行。
处理器允许多个异常同时发生,他们将会按固定的优先级进行处理。
异常类型表:15个系统异常,240个中断源
(1)异常优先级
数值越小说明优先级越高,复位的优先级最高,高优先级的可以抢占低优先级的资源。
(2)Cortex-M3 异常有哪些特点?
自动的状态保存和恢复。处理器在进入异常之前将状态寄存器和部分寄存器自动压栈,退出后自动出栈,不需要多余的指令。
自动读取代码存储器或SRAM中包含地址的向量表入口。该操作与状态保存同时执行。
中断优先级可动态重新设置。
中断数目可配置为1~240。
8.存储器保护单元(MPU)
Cortex-M3有一个可选的存储器保护单元。配上它之后,就可以对特权级访问和用户级访问分别施加不同的访问限制。
当检测到犯规时,MPU会产生一个实现(fault)异常,可以由(fault)异常的服务例程来分析该错误。
最常见的就是由操作系统使用MPU,以使特权级代码的数据,包括操作系统本身的数据不被其他用户程序破坏。