打印

ST开关总中断的函数在哪呢

[复制链接]
1286|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
blong75|  楼主 | 2015-11-23 20:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
白丁野老| | 2015-11-23 21:35 | 只看该作者
STM32的中断源比较多,用到什么中断就使能指定的中断,教程都有讲,如果你想像51一样一次使能所有中断那就用下面这个
INTX_ENABLE();//使能全部中断

使用特权

评论回复
板凳
冒泡的鱼儿| | 2015-11-23 23:01 | 只看该作者
__set_PRIMASK();这条语句足够了

使用特权

评论回复
地板
麦可可| | 2015-11-23 23:01 | 只看该作者
白丁野老 发表于 2015-11-23 21:35
STM32的中断源比较多,用到什么中断就使能指定的中断,教程都有讲,如果你想像51一样一次使能所有中断那就 ...

这个函数是什么意思呢?我怎么在库函数中没有找到?

使用特权

评论回复
5
葫芦娃75| | 2015-11-24 11:12 | 只看该作者
__set_PRIMASK();
是 core_cm3.c 里定义的内核函数. 用于写 PRIMASK 寄存器.
编译后生成一条 mrs R0, PRIMASK 的指令.

使用特权

评论回复
6
september7| | 2015-11-24 11:16 | 只看该作者
在 STM32/Cortex-M3 中是通过改变 CPU 的当前优先级来允许或禁止中断。  
PRIMASK 位:只允许 NMI 和 hard  fault 异常,其他中断/  异常都被屏蔽(当前 CPU 优先级=0)。  
FAULTMASK 位:只允许 NMI,其他所有中断/异常都被屏蔽(当前 CPU 优先级=-1)。

使用特权

评论回复
7
sunriselight| | 2015-11-24 11:24 | 只看该作者
下面两个函数等效于关闭总中断:  
void NVIC_SETPRIMASK(void);  
void NVIC_SETFAULTMASK(void);
下面两个函数等效于开放总中断:  
void NVIC_RESETPRIMASK(void);  
void NVIC_RESETFAULTMASK(void);

使用特权

评论回复
8
eggbiscuit| | 2015-11-24 11:25 | 只看该作者
可以用下面这种办法
#define CLI()      __set_PRIMASK(1)  
#define SEI()      __set_PRIMASK(0)  

使用特权

评论回复
9
蜕变吧| | 2015-11-24 22:44 | 只看该作者
eggbiscuit 发表于 2015-11-24 11:25
可以用下面这种办法
#define CLI()      __set_PRIMASK(1)  
#define SEI()      __set_PRIMASK(0)   ...

非屏蔽中断也会禁止么?NMI呢?

使用特权

评论回复
10
月正浓| | 2015-11-25 10:35 | 只看该作者
sunriselight 发表于 2015-11-24 11:24
下面两个函数等效于关闭总中断:  
void NVIC_SETPRIMASK(void);  
void NVIC_SETFAULTMASK(void);

在最新的库中,已经没有这种方法了

使用特权

评论回复
11
月正浓| | 2015-11-25 10:36 | 只看该作者
蜕变吧 发表于 2015-11-24 22:44
非屏蔽中断也会禁止么?NMI呢?

你可以看看M3的寄存器,这个应该是屏蔽所有中断的。

使用特权

评论回复
12
月正浓| | 2015-11-25 10:37 | 只看该作者
eggbiscuit 发表于 2015-11-24 11:25
可以用下面这种办法
#define CLI()      __set_PRIMASK(1)  
#define SEI()      __set_PRIMASK(0)   ...

你可以看看6楼的回复,PRIMASK 位:只允许 NMI 和 hard  fault 异常,其他中断/  异常都被屏蔽(当前 CPU 优先级=0)。  

使用特权

评论回复
13
陌小生| | 2015-11-26 22:29 | 只看该作者
eggbiscuit 发表于 2015-11-24 11:25
可以用下面这种办法
#define CLI()      __set_PRIMASK(1)  
#define SEI()      __set_PRIMASK(0)   ...

那是不是还可以宏定义FAULTMASK这个寄存器呢?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

83

帖子

1

粉丝