美文网首页
关于Cortex-M3处理器内核中断异常处理机制你了解多少?

关于Cortex-M3处理器内核中断异常处理机制你了解多少?

作者: 迪捷软件 | 来源:发表于2021-11-17 09:29 被阅读0次

01.简介

Cortex-M3处理器内核是ARM公司设计的Cortex-M系列的一款经典处理器内核,基于32位ARMv7内核架构,采用Thumb-2指令集,完全没有使用ARM指令集,即不能执行ARM指令。Thumb-2是16位Thumb 指令集的一个超集,在Thumb-2中,16位指令首次与32位指令并存。

Cortex-M3处理器的特点包括:性能强劲、功耗低、实时性好、代码密度得到很大改善、低成本的整体解决方案。

02.ARM架构版本进化史

ARM公司几十年如一日地开发新的处理器内核和系统功能块。随着功能的不断进化,处理水平的持续提高,年深日久造就了一系列的ARM架构。这里需要说明的是,ARM架构版本号和ARM处理器名字中的数字并不是一码事。比如,ARM7TDMI是基于ARMv4T架构的(T表示支持“Thumb指令”),并不是ARMv7架构。

ARMv5TE架构则是伴随着ARM9E处理器家族亮相的,ARM9E家族成员包括ARM926E-S和ARM946E-S,ARMv5TE架构添加了“服务于多媒体应用增强的DSP指令”。

后来又出了ARM11,ARM11是基于ARMv6架构建成的。基于ARMv6架构的处理器包括ARM1136J(F)-S,ARM1156T2(F)-S,以及ARM1176JZ(F)-S。

基于从ARMv6开始的新设计理念,ARM进一步扩展了它的CPU设计,也就是ARMv7架构,在这个版本中,内核架构首次从单一款式变成3种款式。

Cortex-A系列(Application):设计用于高性能的“开放应用平台”——越来越接近电脑了 ,针对日益增长的消费娱乐和无线产品设计,用于具有高计算要求、运行丰富操作系统及提供交互媒体和图形体验的应用领域,如智能手机、平板电脑、汽车娱乐系统、数字电视,智能本、电子阅读器、家用网络、家用网关和其他各种产品。

Cortex-R系列(Real-time):用于高端的嵌入式系统,尤其是那些带有实时要求的——又要快又要实时。 针对需要运行实时操作的系统应用,面向如汽车制动系统、动力传动解决方案、大容量存储控制器等深层嵌入式实时应用。

Cortex-M系列(Microcontroller):用于深度嵌入的,单片机风格的系统中。该系列面向微控制器领域,主要针对成本和功耗敏感的应用,如智能测量、人机接口设备、汽车和工业控制系统、家用电器、消费性产品和医疗器械等。

03.Cortex-M3中断异常处理机制

3.1 嵌套向量中断控制器

Cortex-M3内核中搭载了一颗中断控制器——嵌套向量中断控制器(NVIC),与内核是紧耦合的,因此我们是在Cortex-M3内核中实现NVIC。

可嵌套中断机制:

所有异常都可以被赋予不同的优先级,当前优先级被存储在xPSR的专用字段中。当一个异常发生时,硬件会自动比较该异常的优先级是否比当前的异常优先级更高。如果发现来了更高优先级的异常,处理器就会中断当前的中断服务例程(或者是普通程序),而服务新来的异常——即立即抢占。

3.2 中断和异常

与传统异常模型有了很大区别,Cortex-M3取消了FIQ快中断请求,采用更好的机制——中断优先级管理以及嵌套中断支持。支持11种系统异常(4+1个保留位),外加240个外部中断输入。

3.3 向量表

当Cortex-M3内核响应了一个发生的异常后,对应的异常服务例程(ESR)就会执行,Cortex-M3使用了“向量表查表机制”来确定ESR的入口地址。向量表其实是一个WORD(32位整数)数组,每个下标对应一种异常,该下标元素的值则是该ESR的入口地址,向量表在地址空间中的位置是可以设置的,通过NVIC中的一个重定位寄存器(VTOR)来指出向量表的地址。

0号类型并不是什么入口地址,而是给出了复位后MSP的初值。

以TLE987x 系列SoC(Cortex-M3核心)为例,外部中断向量表如下所示:

在系统初始化过程中通过设置VTOR = 0x11000000重定位向量表基地址。

外部中断IRQ #0 (GPT12)对应偏移为0x40,即向量地址为0x11000040,则IRQ 0中断服务程序的入口地址是0x1100221d,因为LSB必须是1,所以对应的ESR入口地址是0x1100221c,即GPT1_IRQHandler。

** 3.4 外部中断执行流程**

有GTP1_T2的中断请求,会设置SCU.GPT12IRC[0]为1, 若SCU.GPT12EN[0]是1且SCU.IEN0[7]为1,则触发INTISR[0]中断,即外部中断0号,SCU向CPU发送中断的接口实现代码:

Cortex-M3 CPU中断触发接口实现如下:

3.5 中断系统设置全过程

1.当系统启动后,先设置优先级组寄存器。缺省情况下使用组0(7位抢占优先级,1位亚优先级)。

2. 如果需要重定位向量表,先把硬fault和NMI服务例程的入口地址写到新表项所在的地址中。

3. 配置向量表偏移量寄存器,使之指向新的向量表(如果有重定位的话)。

4. 为该中断建立中断向量。因为向量表可能已经重定位了,保险起见需要先读取向量表偏移量寄存器的值,根据该中断在表中的位置计算出对应的表项,再把服务例程的入口地址填写进去,如果一直使用ROM中的向量表,则无需此步骤。

5. 为该中断设置优先级。

6. 使能该中断。

3.6 Cortex-M3中断/异常的响应序列

中断/异常响应序列包含三个步骤(入栈、取向量、更新寄存器)。

1. 入栈

把8个寄存器的值压入栈(xPSR, PC, LR, R12以及R3-R0)

2. 取向量

根据异常号从向量表中找出正确的异常向量地址,然后从异常向量地址处取出服务程序的入口地址。

3. 更新寄存器

在入栈和取向量操作完成之后,执行服务例程之前,还要更新一系列的寄存器。

SP: 在入栈后会把堆栈指针(PSP或MSP)更新到新的位置。在执行服务例程时,将由MSP负责对堆栈的访问。

PSR:更新IPSR位段(地处PSR的最低部分)的值为新响应的异常编号。

PC:在取向量完成后,PC将指向服务例程的入口地址。

LR:在出入ISR的时候,LR的值将得到重新的诠释,这种特殊的值称为“EXC_RETURN”。在异常进入时由系统计算并赋给LR,并在异常返回时使用它。EXC_RETURN的二进制值除了最低4位外全为1,即0xFFFFFFFx,最低4位含义如下:

合法的EXC_RETURN值及其功能:

如果主程序在线程模式下运行,并且在使用MSP时被中断,则在服务例程中LR=0xFFFF_FFF9。

如果主程序在线程模式下运行,并且在使用PSP时被中断,则在服务例程中LR=0xFFFF_FFFD。

04.SkyEye支持的处理器列表

目前SkyEye支持市面上包括ARM、DSP、PowerPC、Sparc、X86、MIPS等多种架构在内的不同型号的处理器。下图为SkyEye支持的指令集架构、处理器内核、处理器型号、编译环境以及对应处理器可运行的操作系统。

参考资料

《CM3权威指南CnR2》

《Infineon-TLE987x-UserManual-v01_60-EN》

相关文章

  • 关于Cortex-M3处理器内核中断异常处理机制你了解多少?

    01.简介 Cortex-M3处理器内核是ARM公司设计的Cortex-M系列的一款经典处理器内核,基于32位AR...

  • 异常控制流2

    中断和异常的处理: 发生异常和中断事件后,系统将进入os内核对响应的事件进行处理,即改变处理器状态(用户态->内核...

  • (三)操作系统运行环境

    操作系统运行环境 CPU状态 中断/异常机制 操作系统运行机制 系统调用 处理器状态(模式) 中央处理器(CPU)...

  • iOS自旋锁

    自旋锁是专为防止多处理器并发而引入的一种锁,它在内核中大量应用于中断处理等部分(对于单处理器来说,防止中断处理中的...

  • 按键与中断处理

    NVIC中断工作原理 cortex-m3支持256个中断,其中包含了16个内核中断,240个外部中断。stm32中...

  • stm32F103RCT6概括

    命名规则 内核判断: Cortex-M3是一个32位处理器内核。内部的数据路径是32位的,寄存器是32位的,存储器...

  • 线程的异常处理机制

    前言 分析线程对异常的处理机制,首先要了解Java自身的异常处理机制,关于 try、catch、finally、t...

  • iOS异常浅析

    异常简介 处理器和系统内核中有设计标识不同事件的状态码,这些状态被编码为不同的位和信号。每次处理器和内核检测到状态...

  • iOS异常浅析

    异常简介 处理器和系统内核中有设计标识不同事件的状态码,这些状态被编码为不同的位和信号。每次处理器和内核检测到状态...

  • Linux 中断和内存同步

    中断和中断处理.中断: 由于处理器和外设速度上的差异, 在两者协同工作时, 让硬件在需要时再向内核发出信号.特殊的...

网友评论

      本文标题:关于Cortex-M3处理器内核中断异常处理机制你了解多少?

      本文链接:https://www.haomeiwen.com/subject/yfhltrtx.html