博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【转】STM32 - 程序跳转、中断、开关总中断
阅读量:4958 次
发布时间:2019-06-12

本文共 830 字,大约阅读时间需要 2 分钟。

程序跳转注意:

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);//开放总中断

 

 

【】

转载于:https://www.cnblogs.com/skullboyer/p/9031825.html

你可能感兴趣的文章
转战简书
查看>>
idea启动tomcat时报错 Address localhost:1099 is already in use
查看>>
Visual DSP定点数(fract)使用指南
查看>>
从excel表格加载数据返回DataSet
查看>>
kernel笔记——网络收发包流程
查看>>
【js】逻辑运算符 && 、|| ,位运算符 | 、&
查看>>
python-open-cv 自动人脸识别安装包
查看>>
js 数字前自动补零
查看>>
Shell脚本书写规范
查看>>
P1036 选数
查看>>
浅谈C/C++中的typedef和#define
查看>>
Locust 性能测试工具安装使用说明
查看>>
二分图匹配
查看>>
【树莓派】双网卡添加多路由静态路由持久化的问题处理
查看>>
Installing TensorFlow on Ubuntu
查看>>
Codeforces1176B(B题)Merge it!
查看>>
https+apache+tomcat Linux 环境
查看>>
codeforces723 D. Lakes in Berland(并查集)
查看>>
约束和异常处理
查看>>
PHP初识
查看>>