打印
[STM32F2]

请问如何在非特权模式下开关irq中断?

[复制链接]
1399|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ZorroCN|  楼主 | 2015-7-3 15:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如题,KEIL 5.15. STM32F205
调用原来的__enable_irq()和__disable_irq()肯定不行。所以打算用SVC来处理
void __SVC_1(void)
{
        __set_PRIMASK(0);
}
}
void __SVC_2(void)
{
      __set_PRIMASK(1);
}
void __svc(1)  irq_en(void);
void __svc(2)  irq_dis(void);

结果每次调用irq_dis();都会出现hardfault,但irq_en()却不会。
请问,是我哪里处理错了吗?
在非特权模式下有什么开关irq中断的好办法?
沙发
amanda_s| | 2015-7-3 17:19 | 只看该作者
PRIMASK寄存器只能在特权级下进行访问。

使用特权

评论回复
板凳
ZorroCN|  楼主 | 2015-7-3 17:37 | 只看该作者
amanda_s 发表于 2015-7-3 17:19
PRIMASK寄存器只能在特权级下进行访问。

换句话说,我必须得在SVC里面设置回特权模式才可以吗?不能直接在SVC里面操作?

使用特权

评论回复
地板
ZorroCN|  楼主 | 2015-7-3 18:29 | 只看该作者
SVC本身就是运行在特权模式下的,可是此时__set_PRIMASK(1)会 hardfault ,__disable_irq 也会 hardfault。
难道一定要再设置一下CONTROL才可以?好像不是这么回事吧?

使用特权

评论回复
5
ZorroCN|  楼主 | 2015-7-3 18:30 | 只看该作者
另外,__set_PRIMASK(0)和__enable_irq在SVC下却不会进hardfault。

使用特权

评论回复
6
myxiaonia| | 2015-7-4 07:56 | 只看该作者
非特权模式下用svc关中断是可以的,但是却无法再开中断,因为此时svc中断也被禁止了。。。
其实这个问题本坛早就有了,你找找看,讨论的比较深刻

你的问题我也遇上过,最后放弃了,是不是rtx中使用非特权模式的问题啊

使用特权

评论回复
7
ZorroCN|  楼主 | 2015-7-4 13:41 | 只看该作者
myxiaonia 发表于 2015-7-4 07:56
非特权模式下用svc关中断是可以的,但是却无法再开中断,因为此时svc中断也被禁止了。。。
其实这个问题本 ...

似乎是说到了关键问题。忘了我把SVC也禁了,问题可能出现在这里。
可是开关中断应该是比较常用的功能才对。如果这样做不了,那估计就只能在特权模式下运行所有程序了...
或者是SVC退出的时候切换到特权模式,等到下次执行开中断的时候再切换到非特权模式,不过这样做好像过于复杂了。

使用特权

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

本版积分规则

29

主题

84

帖子

0

粉丝