STM32->EXTI

    CM3最多240个中断,每个中断有自己的可编程的中断优先级(唯一对应的中断优先级寄存器)。由于CM3支持硬件中断嵌套,所以可以有256级的可编程优先级和256级中断嵌套。

    STM32 目前支持的中断共为 84 个(16个内核+68个外部),16 级可编程中断优先级的设置(仅使用中断优先级设置 8bit 中的高 4 位)和16个抢占优先级(因为抢占优先级最多可以有四位数)。

    __set_FAULTMASK(1);     //关所有中断
    NVIC_SystemReset();     //复位,在core_cm3.h里定义

    上述代码通过__set_FAULTMASK(1)关闭所有中断,避免在执行NVIC_SystemReset()复位函数中被打断。想要保持之前配置好的寄存器不被初始化复位,需要在程序跳转之前先初始化堆栈

      __set_MSP(*(__IO uint32_t*)  0x08000000);    初始化堆栈指针
      ((void (*)(void)) (*(vu32 *)0x08000004)();   程序跳转


STM32/Cortex-M3中是通过改变 CPU的当前优先级来允许或禁止中断。  

PRIMASK位:允许NMIhard fault异常,其他都被屏蔽(当前CPU优先级=0) 

FAULTMASK位:允许NMI,其他所有都被屏蔽(当前CPU优先级=-1)  

STM32固件库中(stm32f10x_nvic.c stm32f10x_nvic.h)定义了四个函数操作PRIMASK位和FAULTMASK位,改变 CPU 的当前优先级,从而达到控制所有中断的目的。 

NVIC_SETPRIMASK()        //关闭总中断 

NVIC_RESETPRIMASK()      //开放总中断 

第二种方法: 

NVIC_SETFAULTMASK()     //关闭总中断 

NVIC_RESETFAULTMASK()   //开放总中断  


#define CLI()     __set_PRIMASK(1) 

#define SEI()     __set_PRIMASK(0)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值