5.2.1. 系统不可屏蔽中断

5.2.1.1. 功能使用说明

  • 不可屏蔽中断,是指在系统或者用户程序使用关中断接口,如local_irq_disable()

  • 关闭系统中断后,如果某个外设中断设置为不可屏蔽中断,则该中断依然可以响应,不受系统中断开关的影响,一般用于外设中断响应实时性要求非常高的场景。

  • `目前支持的芯片有AC632N、AC636N `

  • 发布的sdk默认关闭该功能,如果用户需要开启该功能,可以修改文件:

  • config/lib_system_config.c中的配置变量为1

*//================================================//*
*//        不可屏蔽中断使能配置(UNMASK_IRQ)        //*
*//================================================//*

const int CONFIG_CPU_UNMASK_IRQ_ENABLE = 0;

在该变量使能后,用户可以通过不可屏蔽中断设置接口将某个外设设置为不可屏蔽中断,接口使用示例:

request_irq(7, 3, timer3_isr, 0); //注册中断号为7的外设中断向量函数,优先级为3
irq_unmask_set(7, 0); //将中断号为7的外设中断设置为不可屏蔽中断,第二个参数默认为0,指定cpu0。

Note

由于不可屏蔽中断可以在系统或者用户在保护临界区的时候还能正常响应,因此不可屏蔽中断函数体需要满足如下要求:

1、中断函数代码需要放RAM中执行,不可定位到Flash。

2、中断函数体应该尽可能的简单,只用于控制功能(如配置寄存器),切勿包含运算密度高的流程。

3、中断函数体不能调用操作系统接口,如有调用其他用户函数接口,该接口需要满足上述1、2点要求。