armvic.c

来自「Free Usb Stack for NXP LPC2xxx microcont」· C语言 代码 · 共 86 行

C
86
字号
/****************************************************************************** * * $RCSfile$ * $Revision: 124 $ * * This module provides the interface routines for setting up and * controlling the various interrupt modes present on the ARM processor. * Copyright 2004, R O SoftWare * No guarantees, warrantees, or promises, implied or otherwise. * May be used for hobby or commercial purposes provided copyright * notice remains intact. * *****************************************************************************/#include "type.h"#include "armVIC.h"#define IRQ_MASK 0x00000080#define FIQ_MASK 0x00000040#define INT_MASK (IRQ_MASK | FIQ_MASK)static inline unsigned __get_cpsr(void){  unsigned long retval;  asm volatile (" mrs  %0, cpsr" : "=r" (retval) : /* no inputs */  );   return retval;}static inline void __set_cpsr(unsigned val){  asm volatile (" msr  cpsr, %0" : /* no outputs */ : "r" (val)  );	}unsigned disableIRQ(void){  unsigned _cpsr;  _cpsr = __get_cpsr();  __set_cpsr(_cpsr | IRQ_MASK);  return _cpsr;}unsigned restoreIRQ(unsigned oldCPSR){  unsigned _cpsr;  _cpsr = __get_cpsr();  __set_cpsr((_cpsr & ~IRQ_MASK) | (oldCPSR & IRQ_MASK));  return _cpsr;}unsigned enableIRQ(void){  unsigned _cpsr;  _cpsr = __get_cpsr();  __set_cpsr(_cpsr & ~IRQ_MASK);  return _cpsr;}unsigned disableFIQ(void){  unsigned _cpsr;  _cpsr = __get_cpsr();  __set_cpsr(_cpsr | FIQ_MASK);  return _cpsr;}unsigned restoreFIQ(unsigned oldCPSR){  unsigned _cpsr;  _cpsr = __get_cpsr();  __set_cpsr((_cpsr & ~FIQ_MASK) | (oldCPSR & FIQ_MASK));  return _cpsr;}unsigned enableFIQ(void){  unsigned _cpsr;  _cpsr = __get_cpsr();  __set_cpsr(_cpsr & ~FIQ_MASK);  return _cpsr;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?