某系统中对中断的打开、关闭函数如下:
static __inline int wsn_DisableInterrupt(void)
{
register int retval, temp;
__asm__ volatile (
"mrs %0, cpsr\n"//将cpsr状态寄存器的值传给%0
"\torr %1, %0, #0xC0\n"//将%0与0xC0值做orr或运算,即置位操作,并赋值给%1。CPSR的I、F位置1,关中断
"\tmsr cpsr_c, %1\n"//将%1的值传给cpsr_c状态寄存器
: "=r" (retval), "=r" (temp));
barrier(0);
return retval;
}
static __inline int wsn_EnableInterrupt(void)
{
register int retval, temp;
barrier(0);
__asm__ volatile (
"mrs %0, cpsr\n"
"\tbic %1, %0, #0xC0\n"//将%0与0xC0值做bic清零操作,并赋值给%1。CPSR的I、F位清0,开中断
"\tmsr cpsr_c, %1\n"
: "=r" (retval), "=r" (temp));
return retval;
}
以上两函数通过设置CPSR的I、F控制位设置中断。

本文介绍了某系统中如何通过设置CPSR的I、F控制位来实现中断的开启和关闭。具体操作包括使用MSR指令将通用寄存器的值传送到CPSR,以及使用BIC指令清除特定位以禁止IRQ和FIQ中断。此外,还提到了ORR指令在位操作中的应用。
最低0.47元/天 解锁文章
3633

被折叠的 条评论
为什么被折叠?



