某系统中对中断的打开、关闭函数如下:
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