Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #ifndef __IRQ_H
00014 #define __IRQ_H
00015
00016
00017
00018 #define __irq
00019 #define __fiq
00020
00021
00022
00023
00024
00025
00026
00027 #define NESTED_INTERRUPT 0
00028
00029 #define I_Bit 0x80
00030 #define F_Bit 0x40
00031
00032 #define SYS32Mode 0x1F
00033 #define IRQ32Mode 0x12
00034 #define FIQ32Mode 0x11
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_INT 8
00045 #define I2C0_INT 9
00046 #define SPI0_INT 10
00047 #define SPI1_INT 11
00048 #define PLL_INT 12
00049 #define RTC_INT 13
00050 #define EINT0_INT 14
00051 #define EINT1_INT 15
00052 #define EINT2_INT 16
00053 #define EINT3_INT 17
00054 #define ADC0_INT 18
00055 #define I2C1_INT 19
00056 #define BOD_INT 20
00057 #define ADC1_INT 21
00058 #define USB_INT 22
00059
00060 #define IRQ_SLOT_EN 0x20
00061 #define VIC_SIZE 16
00062
00063 #define VECT_ADDR_INDEX 0x100
00064 #define VECT_CNTL_INDEX 0x200
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075 #if 0
00076 #if NESTED_INTERRUPT
00077 #define IENABLE __asm { MRS LR, SPSR } \
00078 __asm { STMFD SP!, {LR} } \
00079 __asm { MSR CPSR_c, #SYS32Mode } \
00080 __asm { STMFD SP!, {LR} }
00081 #else
00082 #define IENABLE ;
00083 #endif
00084
00085 #if NESTED_INTERRUPT
00086 #define IDISABLE __asm { LDMFD SP!, {LR} } \
00087 __asm { MSR CPSR_c, #(IRQ32Mode|I_Bit) } \
00088 __asm { LDMFD SP!, {LR} } \
00089 __asm { MSR SPSR_cxsf, LR }
00090 #else
00091 #define IDISABLE ;
00092 #endif
00093 #endif
00094
00095 #if NESTED_INTERRUPT
00096 #warning "Macros not tested successfully with arm-elf-gcc
00097 #define IENABLE asm volatile( \
00098 "MRS LR, SPSR \n" \
00099 "STMFD SP!, {LR} \n" \
00100 "MSR CPSR_c, #0x1F \n" \
00101 "STMFD SP!, {LR} " )
00102 #else
00103 #define IENABLE ;
00104 #endif
00105
00106 #if NESTED_INTERRUPT
00107 #define IDISABLE asm volatile( \
00108 "LDMFD SP!, {LR} \n" \
00109 "MSR CPSR_c, #0x92 \n" \
00110 "LDMFD SP!, {LR} \n" \
00111 "MSR SPSR_cxsf, LR \n" )
00112 #else
00113 #define IDISABLE ;
00114 #endif
00115
00116
00117 void init_VIC( void );
00118 unsigned long install_irq( unsigned long IntNumber, void *HandlerAddr );
00119 unsigned long uninstall_irq( unsigned long IntNumber );
00120
00121
00122
00123 #endif
00124
00125
00126
00127