projekty/Source/example1/src/armVIC.c

Go to the documentation of this file.
00001 /******************************************************************************
00002  *
00003  * $RCSfile: $
00004  * $Revision: $
00005  *
00006  * This module provides the interface routines for setting up and
00007  * controlling the various interrupt modes present on the ARM processor.
00008  * Copyright 2004, R O SoftWare
00009  * No guarantees, warrantees, or promises, implied or otherwise.
00010  * May be used for hobby or commercial purposes provided copyright
00011  * notice remains intact.
00012  *
00013  *****************************************************************************/
00014 #include "types.h"
00015 #include "armVIC.h"
00016 
00017 #define IRQ_MASK 0x00000080
00018 #define FIQ_MASK 0x00000040
00019 #define INT_MASK (IRQ_MASK | FIQ_MASK)
00020 
00021 static inline unsigned __get_cpsr(void)
00022 {
00023   unsigned long retval;
00024   asm volatile (" mrs  %0, cpsr" : "=r" (retval) : /* no inputs */  );
00025   return retval;
00026 }
00027 
00028 static inline void __set_cpsr(unsigned val)
00029 {
00030   asm volatile (" msr  cpsr, %0" : /* no outputs */ : "r" (val)  );
00031 }
00032 
00033 unsigned disableIRQ(void)
00034 {
00035   unsigned _cpsr;
00036 
00037   _cpsr = __get_cpsr();
00038   __set_cpsr(_cpsr | IRQ_MASK);
00039   return _cpsr;
00040 }
00041 
00042 unsigned restoreIRQ(unsigned oldCPSR)
00043 {
00044   unsigned _cpsr;
00045 
00046   _cpsr = __get_cpsr();
00047   __set_cpsr((_cpsr & ~IRQ_MASK) | (oldCPSR & IRQ_MASK));
00048   return _cpsr;
00049 }
00050 
00051 unsigned enableIRQ(void)
00052 {
00053   unsigned _cpsr;
00054 
00055   _cpsr = __get_cpsr();
00056   __set_cpsr(_cpsr & ~IRQ_MASK);
00057   return _cpsr;
00058 }
00059 
00060 unsigned disableFIQ(void)
00061 {
00062   unsigned _cpsr;
00063 
00064   _cpsr = __get_cpsr();
00065   __set_cpsr(_cpsr | FIQ_MASK);
00066   return _cpsr;
00067 }
00068 
00069 unsigned restoreFIQ(unsigned oldCPSR)
00070 {
00071   unsigned _cpsr;
00072 
00073   _cpsr = __get_cpsr();
00074   __set_cpsr((_cpsr & ~FIQ_MASK) | (oldCPSR & FIQ_MASK));
00075   return _cpsr;
00076 }
00077 unsigned getCPRS(void)
00078 {
00079         return __get_cpsr();
00080 }
00081 unsigned setCPRS(unsigned cprs)
00082 {
00083         unsigned oldCprs=__get_cpsr();
00084         __set_cpsr(cprs);
00085         return oldCprs;
00086 }
00087 unsigned enableFIQ(void)
00088 {
00089   unsigned _cpsr;
00090 
00091   _cpsr = __get_cpsr();
00092   __set_cpsr(_cpsr & ~FIQ_MASK);
00093   return _cpsr;
00094 }

Generated on Fri Sep 21 13:41:54 2007 for example1 by  doxygen 1.4.7