打印
[技术讨论]

华大单片机如何开启或关闭全局中断

[复制链接]
3585|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
白虎姐|  楼主 | 2021-8-26 16:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
工程师在开发程序时,时序要求比较高时不能有中断来打断程序的执行,这就需要把所有中断全部关闭掉。有些工程师反应不清楚如何来关闭全局中断。大家知道华大单片机使用的是ARM内核,全局中断在ARM内核中已经有相关的定义,具体说明如下图

更多信息咨询请联系angel.qi:13827489351(微信与手机号码同步)
PRIMASK是1bit寄存器,复位时设置为0。设置为0时,允许中断和系统异常。设置为1时,仅允许NMI和HardFault异常。实际上,当设置为1时,它将当前优先级更改为0(最高可编程级别),相当于屏蔽掉了其它的中断,也就关闭全局中断。我们可以使用多种方式来操作这个寄存器。

在汇编语言中,可以使用MSR指令设置或清除PRIMASK寄存器。例如,可以使用以下代码设置PRIMASK(禁用中断):MOVS R0, #1 ; 需要写入PRIMASK的值放入通用寄存器R0  MSR PRIMASK, R0 ; 把R0的值写入PRIMASK
通过将R0值更改为0,可以以相同的方式启用中断。或者,可以使用CPI伪指令设置或清除PRIMASK:CPSIE i ; 清除 PRIMASK (开启全局中断)CPSID i ; 设置 PRIMASK (关闭全局中断)
在C语言中,符合CMSIS的设备驱动程序的用户可以使用以下函数设置并清除PRIMASK。即使不使用CMSIS,大多数C编译器都支持ARM。处理器将这两个函数作为内在函数自动处理:void __enable_irq(void); // 清除 PRIMASK (开启全局中断)void __disable_irq(void); // 设置 PRIMASK (关闭全局中断)

使用特权

评论回复

相关帖子

沙发
JacketCat| | 2023-4-14 21:28 | 只看该作者
学习了

使用特权

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

本版积分规则

40

主题

41

帖子

0

粉丝