irq.h
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #ifndef __IRQ_H
00015 #define __IRQ_H
00016
00017 #include "SFBTypes.h"
00018
00019 #ifdef __cplusplus
00020 extern "C" {
00021 #endif
00022
00023 #define I_Bit 0x80
00024 #define F_Bit 0x40
00025
00026 #define SYS32Mode 0x1F
00027 #define IRQ32Mode 0x12
00028 #define FIQ32Mode 0x11
00029
00030 #define HIGHEST_PRIORITY 0x01
00031 #define HIGH_PRIORITY 0x04
00032 #define MEDIUM_PRIORITY 0x08
00033 #define LOW_PRIORITY 0x0C
00034 #define LOWEST_PRIORITY 0x0F
00035
00036 #define WDT_INT 0
00037 #define SWI_INT 1
00038 #define ARM_CORE0_INT 2
00039 #define ARM_CORE1_INT 3
00040 #define TIMER0_INT 4
00041 #define TIMER1_INT 5
00042 #define UART0_INT 6
00043 #define UART1_INT 7
00044 #define PWM0_1_INT 8
00045 #define I2C0_INT 9
00046 #define SPI0_INT 10
00047 #define SSP0_INT 10
00048 #define SSP1_INT 11
00049 #define PLL_INT 12
00050 #define RTC_INT 13
00051 #define EINT0_INT 14
00052 #define EINT1_INT 15
00053 #define EINT2_INT 16
00054 #define EINT3_INT 17
00055 #define ADC0_INT 18
00056 #define I2C1_INT 19
00057 #define BOD_INT 20
00058 #define EMAC_INT 21
00059 #define USB_INT 22
00060 #define CAN_INT 23
00061 #define MCI_INT 24
00062 #define GPDMA_INT 25
00063 #define TIMER2_INT 26
00064 #define TIMER3_INT 27
00065 #define UART2_INT 28
00066 #define UART3_INT 29
00067 #define I2C2_INT 30
00068 #define I2S_INT 31
00069
00070 #define VIC_SIZE 32
00071
00072 #define VECT_ADDR_INDEX 0x100
00073 #define VECT_CNTL_INDEX 0x200
00074
00075
00076
00077
00078
00079 #include "SFBTypes.h"
00080
00081 extern void init_VIC(void) ;
00082
00083 u32 install_irq( u32 IntNumber, IRQHandler *HandlerAddr, u32 Priority );
00084
00085
00086 u32 uninstall_irq( u32 IntNumber );
00087
00088 #ifdef __thumb__
00089 #define enableInterrupts() enableInterruptsFunction()
00090 #else
00091 #define enableInterrupts() \
00092 __asm__ __volatile__ ( \
00093 "MRS r0, CPSR\n\t" \
00094 "BIC r0, r0, #0x80\n\t" \
00095 "MSR CPSR_c, r0" \
00096 ::: "r0")
00097 #endif
00098 extern void enableInterruptsFunction();
00099
00100 #ifdef __thumb__
00101 #define disableInterrupts() disableInterruptsFunction()
00102 #else
00103 #define disableInterrupts() \
00104 __asm__ __volatile__ ( \
00105 "MRS r0, CPSR\n\t" \
00106 "ORR r0, r0, #0x80\n\t" \
00107 "MSR CPSR_c, r0" \
00108 ::: "r0")
00109 #endif
00110 extern void disableInterruptsFunction();
00111
00112 #ifdef __thumb__
00113 #define suspendInterrupts(u32var) suspendInterruptsFunction(&(u32var))
00114 #else
00115 #define suspendInterrupts(u32var) \
00116 __asm__ __volatile__ ( \
00117 "MRS %0, CPSR\n\t" \
00118 "ORR r0, %0, #0x80\n\t" \
00119 "MSR CPSR_c, r0" \
00120 : "=r" (u32var) : : "r0")
00121 #endif
00122 extern void suspendInterruptsFunction(u32 * pvar);
00123
00124 #ifdef __thumb__
00125 #define restoreInterrupts(u32var) restoreInterruptsFunction(&(u32var))
00126 #else
00127 #define restoreInterrupts(u32var) \
00128 __asm__ __volatile__ ( \
00129 "MSR CPSR_c, %0\n" \
00130 : : "r" (u32var) : "r0" )
00131 #endif
00132 extern void restoreInterruptsFunction(u32 * pvar);
00133
00134 #ifdef __cplusplus
00135 }
00136 #endif
00137
00138
00139 #endif
00140
00141
00142
00143
00144