NMI不可屏蔽外部中断的使用方法

本文详细介绍了APT32F173处理器中NMI(不可屏蔽外部中断)的工作原理、配置方法以及如何在vectors.S文件中添加NMI中断处理函数。特别关注了外部时钟检测错误、内存校验错误和掉电检测等NMI中断源的使用实例。

1.概述

NMI(不可屏蔽的外部中断)是一个特殊的异常。因为它处于异常区,所以它不受全局中断使能位MSTATUS.MIE的控制。NMI作为外部事件,E906 将其异常向量号定义为24,优先级在所有的中断和异常中最高。

在APT32F173中,可以升级为NMI的外部中断源有:

  • 外部时钟检测错误

  • EXI0

  • 内存(Flash,SRAM)校验错误

  • 掉电检测

上述中断源的NMI使能后,不会影响原有的中断通路,比如EMCM的中断通路也是有效的,当然NMI的优先级是最高的,所以会以NMI的形式请求中断。

2.寄存器控制配置

在SYSCON系统配置OPT1寄存器中,选择NMI触发源控制位,如下图所示,当需要使用NMI中断的时候,需要将该位置1。例如:需要使用LVD的NMI中断,需要将Bit[27]置1。

3.如何使用NMI中断

一、在vectors.S中添加NMI中断处理函数入口

.NMI_Handler:
    lw      t0, 0x0(sp)
    lw      t1, 0x4(sp)
    addi    sp, sp, 8

    addi    sp, sp, -64
    sw      ra, 0(sp)
    sw      t0, 4(sp)
    sw      t1, 8(sp)
    sw      t2, 12(sp)
    sw      a0, 16(sp)
    sw      a1, 20(sp)
    sw      a2, 24(sp)
    sw      a3, 28(sp)
    sw      a
### 不可屏蔽中断与可屏蔽中断的工作机制及区别 #### 定义与基本概念 不可屏蔽中断NMI, Non-Maskable Interrupt)是一种特殊类型的硬件中断,其设计目的是为了处理那些需要立即响应的重要事件[^1]。相比之下,可屏蔽中断(INTR, Interrupt Request)则可以通过软件或硬件的方式被禁用或忽略。 具体来说,不可屏蔽中断源一旦发出请求,CPU 必须无条件地对其进行响应[^3]。而可屏蔽中断的请求可能会因为当前系统的状态或其他优先级更高的任务而被延迟甚至忽略。 #### 工作原理 ##### 可屏蔽中断(INTR) 可屏蔽中断依赖于 CPU 的中断标志位(IF, Interrupt Flag)。当 IF 位被清零时,所有的外部可屏蔽中断都会被屏蔽掉,这意味着即使有中断信号到达,CPU 也不会对其作出反应[^4]。此外,如果整个中断控制系统被关闭,那么即使是正常的可屏蔽中断也无法传递到 CPU 上[^2]。 以下是典型的可屏蔽中断处理流程: ```c void handle_interrupt() { disable_interrupts(); // 关闭中断以防止嵌套中断干扰 save_context(); // 保存当前上下文环境 identify_interrupt_source(); // 确定哪个设备发出了中断 service_the_device(); // 处理对应的中断服务程序 restore_context(); // 恢复之前的上下文 enable_interrupts(); // 开启中断继续执行后续操作 } ``` ##### 不可屏蔽中断NMI) 对于 NMI 来说,它不受 IF 标志的影响,也不受常规中断控制器管理逻辑的约束。只要触发了有效的 NMI 请求,无论当前系统处于何种运行模式或者是否有其他更高优先级的任务正在执行,CPU 都会立刻停止当前的操作并跳转至相应的中断处理程序。 值得注意的是,在一些特定条件下,尽管被称为“不可屏蔽”,但实际上还是存在能够阻止 NMIs 到达处理器核心的方法,不过这些方法通常涉及非常底层且复杂的硬件配置更改。 #### 主要差异总结 | 特性 | 可屏蔽中断(INTR) | 不可屏蔽中断(NMI) | |---------------------|------------------------------------|-----------------------------------| | 是否能被屏蔽 | 是 | 否 | | 控制方式 | 软件/硬件均可控制 | 几乎完全由硬件决定 | | 使用场景 | 日常外设交互 | 致命错误检测、调试工具支持等功能 | ### 结论 综上所述,虽然两者同属中断范畴之内,但在实际应用过程中扮演着截然不同的角色。理解这两者之间的异同有助于开发者更好地利用有限资源构建高效稳定的应用程序框架[^5]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值