ARM Cortex-M3,M4内核介绍-NVIC和中断机制

        m3以控制为主,控制的一个关键指标就是实时性,能够及时对变化的情况作出反应,而这主要是通过中断机制来完成的,可以说除却运算性能,cortex-M3内核的主要修为都体现在控制的实时性上——也即中断的即时响应机制。了解nvic之前需要了解一下存储器映射。

存储器映射

Cortex-M处理器的4GB地址空间被分为了多个存储器区域, 如图所示。

        区域根据各自典型用法进行划分,它们主要用于: 程序代码访问(如 CODE区域)。 数据访问(如 SRAM 区域)外设(如外设区域)。处理器的内部控制和调试部件(如私有外设总线)。
        架构的这种安排具有很大的灵活性,存储器区域可用于其他目的。例如.程序既可以在CODE区域执行,也可以在SRAM区域执行,而且微控制器也可以在CODE区域加人SRAM块。实际上,微控制器设备只会使用每个区域的一小部分作为程序Flash、SRAM 和外设,有些区域可能不会用到。不同的微控制器具有不同的存储器大小和外设地址,这些信息一般会在微控制器供应商提供的数据手册中有所描述。
        所有Cortex-M处理器的存储器映射处理都是一样的。例如,PPB地址区域中存在NVIC的寄存器、处理器配置寄存器以及调试部件的寄存器等,所有的Cortex-M设备都是这么设计的,这样可以提高不同Cortex-M设备间的软件可移植性和代码可重用性。这对开发工具供应商也非常有利,因为Cortex-M3和Cortex-M4设备调试控制的工作方式都是一样的。

什么是异常?

异常是会改变程序流的事件,当其产生时,处理器会暂停当前正在执行的任务,转而执行一段被称作异常处理的程序。在异常处理执行完后,处理器会继续正常地程序执行。对于ARM架构,中断就是异常的一种,它一般由外设或外部输人产生,有时也可以由软件触发。中断的异常处理也被称作中断服务程序(ISR)。Cortex-M 处理器具有多个异常源。

 (1)        NVIC外理异常。NVIC可以处理多个中断请求(IRQ)和一个不可屏蔽中断(NMI)请求,IRQ一般由片上外设或外部中断输人通过I/O端口产生NMI可用于看门狗定时器或掉电检测(一种电压监视单元,在电压低到一定程度时会给处理器产生警告)。处理器内部也有SvsTick的定时器,它可以产生周期性的分时中断请求,可用于OS计时或没有OS的应用中的简单定时控制。
(2)        外理器自身也是一个异常事件源,其中包括表示系统错误状态的错误事件以及软件
产生,支持嵌人式 OS 操作的异常。这些异常类型如下表所示。

        对于上表可以看到,每个异常源都有一个异常编号,编号1~15被归为系统异常,16号及其之上的则用于中断。Cortex-M3和Cortex-M4处理器在设计上支持最多240个中断输入,不过实际实现的中断数量要小得多,一般在16~100之间,这样可以减小硅片面积,同时也会降低功耗。
        异常编号在多个寄存器中都有所体现,其中包括用于确定异常向量地址的IPSR(读了之后可以知道异常类型)。异常向量存储在向量表中,在进入异常流程中,处理器会读取这个表格以确定异常处理的起始地址
        与ARM7TDMI等经典ARM处理器相比,Cortex-M处理器中没有FIQ(快速中断)。不过,
Cortex-M3和Cortex-M4的中断等待非常小,只有12个周期,因此这也不会引起什么问题。
        复位是一种特殊的异常,当处理器从复位中退出时,就会在线程模式(而不是其他异常时
的处理模式)下执行复位处理。IPSR 中的异常编号读出也是0。 

嵌套向量中断控制器(NVIC)

        NVIC为Cortex-M处理器的一部分,它是可编程的,且寄存器位于存储器映射的系统控制空间(SCS)。NVIC处理异常和中断配置、优先级以及中断屏蔽。NVIC具有以下特性。
1.灵活的中断和异常管理
        每个中断(除了NMI)都可以被使能或禁止,而且都具有可由软件设置或清除的挂起状
态。NVIC可以处理多种类型的中断源:
        脉冲中断请求:中断请求至少持续一个时钟周期,当NVIC在某中断输入收到一个脉
冲时,挂起状态就会置位且保持到中断得到处理。
        电平触发中断请求:在中断得到处理前需要将中断源的请求保持为高。
NVIC输入信号为高有效。不过,实际微控制器中的外部中断输入的设计可能会有所不
同,会被片上系统逻辑转换为有效的高电平信号。
2. 嵌套向量/中断支持
        每个异常都有一个优先级,中断等一些异常具有可编程的优先级,而其他的则可能会有固定的优先级。当异常产生时,NVIC会将异常的优先级和当前等级相比较,若新异常的优先级较高,当前正在执行的任务就会暂停,有些寄存器则会被保存在栈空间,而且处理器会开始执行新异常的异常处理,这个过程叫作“抢占”。当更高优先级的异常处理完成后,它就会被异常返回操作终止,处理器自动从栈中恢复寄存器内容,并目继续执行之前的任务。利用这种机制,异常服务嵌套不会带来任何软件开销。

3.向量化的异常/中断入口
        当异常发生时,处理器需要确定相应的异常处理入口的位置。对于 ARM7TDMI等
ARM处理器,这一操作由软件实现,Cortex-M处理器则会从存储器的向量表中自动定位异
常处理的入口,后面描述
。因此,这样也降低了从异常产生到异常处理执行间的延时。
4.中断屏蔽
        Cortex-M3和Cortex-M4处理器中的NVIC提供了多个中断屏蔽寄存器,如PRIMASK
特殊寄存器。利用PRIMASK 寄存器,可以禁止除hardFault和NMI外的所有异常。这种
屏蔽对不应被中断的操作非常有用。

向量表

        当异常事件产生且被处理器内核接受后,相应的异常处理就会执行。要确定异常处理的起始地址,处理器利用了一种向量表机制。向量表为系统存储器内的字数据数组,每个元素都代表一个异常类型的起始地址,如图所示。向量表是可以重定位的,重定位由NVIC中名为向量表偏移寄存(VTOR)的可编程寄存器控制。复位后,VTOR默认为0,向量表则位于地址 0x0 处。

        例如,若复位为异常类型1,则复位向量的地址为1x4(每个字为4字节),也就是0x00000004;NMI向量(类型2)则基位于2x4=0x00000008地址。0x00000000处存放的是MSP(MSP主堆栈指针,PSP进程堆栈指针) 的初始值。每个异常向量的最低位表示异常是否在Thumb状态下执行,由于Cortex-M处理器只支持Thumb指令,因此,所有异常向量的最低位都应该为1。 

错误处理

Cortex-M3和Cortex-M4 处理器中有几个异常为错误处理异常。处理器检测到错误时,就会触发错误异常,检测到的错误包括执行未定义的指令以及总线错误,对存储器访问返回错误的响应等。错误异常机制使得错误可以被快速发现,软件因此也可以执行相应的修复措施。

        总线错误、使用错误以及存储器管理错误默认都是禁止的,且所有的错误事件都会触发HardFault异常。不过,这些配置都是可编程的,可以单独使能这三个错误异常,以处理不同类型的错误。HardFault 异常总是使能的

中断响应 

入栈:通过dbus将寄存器硬件的保存在sram中。入栈之后更新相关的寄存器。

sram(内存)中,有一块地方专门用于堆栈(stack),中断发生的时候,将pc,psr,r0~r3,r12,lr这8个32位寄存器写到stack中,按时间顺序存于不相邻的地址中。sp就是stack point,堆栈指针,它会向下走,指向pc,psr,r0~r3,r12,lr等8个寄存器写入的地址。每写完8个寄存器,这个sp指针就会减去32。堆栈是lifo,先进后出。中断嵌套的级数不能大于堆栈容量。

出栈:

        恢复之前入栈的寄存器(pc恢复到入栈之前的pc数值等),更新nvic(中断置起来的响应位要被清除)。入栈,出栈,取向量有error都会在总线fault状态寄存器中体现。

咬尾操作:

中断1刚刚完成了的时候中断2来了,这就是咬尾操作。

之前的arm7中,需要将中断1存在sram的寄存器pop出来,再把中断2需要存再sram的寄存器push进sram,再执行中断2,再pop中断2。这样的时间很长。

现在m3中,不需要将中断1存在sram的寄存器pop出来,直接修改这些寄存器让他们变成中断2的寄存器,再执行中断2,再pop中断2。这样的时间大大缩短。

中断延迟:

定义:从检测到某中断请求,到执行了其服务例程的第一条指令时间, 理想为12 个处理器时钟周期(存储单元零延时),但是增加延迟的因素有,多周期指令(除法,LDRD,STRD),总线拥塞,多中断请求,优善级仲裁,中断嵌套,中断屏蔽等因素。

        

  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值