__set_PRIMASK
时间: 2023-07-03 17:30:55 浏览: 104
__set_PRIMASK()是一个CMSIS(Cortex Microcontroller Software Interface Standard)提供的函数,用于设置处理器中断屏蔽位(PRIMASK)。
PRIMASK是ARM Cortex-M系列处理器上的一个特殊寄存器,用于控制处理器是否响应外部中断。当PRIMASK中断屏蔽位被设置为1时,处理器会屏蔽所有优先级低于或等于当前正在执行的中断的中断请求,从而禁止处理器响应这些中断。当PRIMASK中断屏蔽位被清零时,处理器会正常响应中断请求。
__set_PRIMASK()函数允许将PRIMASK中断屏蔽位设置为指定的值(0或1)。该函数的原型如下:
```void __set_PRIMASK(uint32_t priMask);```
其中,priMask参数可以是0或1,表示将PRIMASK中断屏蔽位设置为0或1。需要注意的是,该函数需要在特权级下才能执行,否则会触发HardFault异常。
相关问题
__set_PRIMASK __disable_irq
__set_PRIMASK和__disable_irq是CMSIS提供的用来操作中断的接口。__set_PRIMASK用于设置PRIMASK寄存器的值,可以用来开启或关闭中断。__disable_irq是调用了__set_PRIMASK来关闭所有中断。通过调用__disable_irq,CPU将不再响应中断请求,但并不会屏蔽中断的触发。如果在关闭总中断后有中断触发,中断标志将被置位。当调用__enable_irq来开启总中断后,之前触发的中断将会立即被处理。要想禁止所有中断,可以对每个模块的中断进行Disable操作,或者通过清除中断标志或清除寄存器状态的方法来达到目的。这样在__enable_irq开启总中断后,MCU就不会响应之前触发的中断了。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* [STM32中断相关概念阐述](https://blog.csdn.net/qq153471503/article/details/126177103)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
- *2* *3* [STM32关于开关总中断的问题](https://blog.csdn.net/weixin_42224980/article/details/105654722)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
__set_PRIMASK(1)
__set_PRIMASK(1) 是一个用于设置 Cortex-M 处理器中的 PRIMASK 寄存器的指令。PRIMASK寄存器用于控制中断的优先级,当PRIMASK寄存器的值为1时,会禁止所有可屏蔽的中断。这意味着通过设置 PRIMASK 寄存器为 1,可以禁用所有中断,从而实现临界区的保护或者实现禁止中断的功能。需要注意的是,这个指令的具体实现可能会因不同的处理器架构而有所差异,所以具体的使用方式和效果可能会有所不同。