【转】STM32 - 程序跳转、中断、开关总中断

程序跳转注意:

1、如果跳转之前的程序A里有些中断没有关,在跳转之后程序B的中断触发,但程序B里没有定义中断响应函数,找不到地址会导致死机。

 2、程序跳转前关总中断,程序跳转后开总中断(关总中断,只是屏蔽了中断;当开总中断后,关总中断之前开的如定时器的中断还是开启的)

开关总中断:

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

PRIMASK位:只允许NMI和hard fault异常,其他中断/异常都被屏蔽(当前CPU优先级=0)。

FAULTMASK位:只允许NMI,其他所有中断/异常都被屏蔽(当前CPU优先级=-1)。

第一种方法:

PRIMASK 用于除能在NMI 和硬fault 之外的所有异常,它有效地把当前优先级改为0(可编程优先级中的最高优先级)。

void__disable_irq (void);//关闭总中断

void __enable_irq (void);//开放总中断

__set_PRIMASK(1);//关闭总中断

__set_PRIMASK(0);//开放总中断

第二种方法:

FAULTMASK 更绝,它把当前优先级改为‐ 1 。这么一来,连硬fault 都被掩蔽了。使用方案与PRIMASK 的相似。但要注意的是,FAULTMASK 会在异常退出时自动清零。

void __disable_fault_irq (void); //关闭总中断

void __enable_fault_irq (void);//开放总中断

__set_FAULTMASK(1);//关闭总中断

__set_FAULTMASK(0);//开放总中断

常常使用

void __disable_irq (void);//关闭总中断

void __enable_irq (void);//开放总中断

来源

猜你喜欢

转载自www.cnblogs.com/skullboyer/p/9031825.html