head 1.1; branch 1.1.1; access ; symbols start:1.1.1.1 PAlibDoc:1.1.1; locks ; strict; comment @# @; 1.1 date 2005.11.02.08.30.22; author jandujar; state Exp; branches 1.1.1.1; next ; 1.1.1.1 date 2005.11.02.08.30.22; author jandujar; state Exp; branches ; next ; desc @@ 1.1 log @Initial revision @ text @ PA_lib: PA_Interrupt.h Source File

PA_Interrupt.h

Go to the documentation of this file.
00001 #ifndef _PA_Interrupt
00002 #define _PA_Interrupt
00003 
00004 
00011 typedef void(*funcpointer)(void);
00012 
00013 extern volatile bool PA_Newframe;
00014 
00015 extern volatile bool PA_vblok; // Passe à 1 quand VBL activé...
00016 
00017 
00018 extern u32 PA_CPU; // Pourcentage CPU...
00019 extern u32 PA_MaxCPU; // Max CPU...
00020 extern u32 PA_lines; // Nombre de lignes, pour faire le calcul...
00021 extern u8 PA_VBLCount; // Compte le nombre de VBL avant qu'on en arrive à un tour
00022 extern u8 PA_nVBLs;
00023 
00024 
00025 //Interrupt Registers
00026 #ifndef REG_IME
00027        #define REG_IME *(u32*)0x04000208
00028 #endif
00029 #ifndef REG_IE
00030 #define REG_IE *(u32*)0x04000210
00031 #endif
00032 #ifndef REG_IF
00033 #define REG_IF *(u32*)0x04000214
00034 #endif
00035 
00036 
00037 #define REG_INTERRUPT IRQ_HANDLER //*(u32*)0x3007FFC
00038 #define REG_DISPSTAT DISP_SR //*(u16*)0x4000004
00039 
00040 
00041 #define REG_VCOUNT _REG16(0x04000006)
00042 
00043 // Interrupts
00044 #define INTVBLANK 0x0001
00045 #define INTHBLANK 0x0002
00046 #define INTVCOUNT 0x0004
00047 #define INTTIMER0 0x0008
00048 #define INTTIMER1 0x0010
00049 #define INTTIMER2 0x0020
00050 #define INTTIMER3 0x0040
00051 #define INTCOM 0x0080
00052 #define INTDMA0 0x0100
00053 #define INTDMA1 0x0200
00054 #define INTDMA2 0x0400
00055 #define INTDMA3 0x0800
00056 #define INTBUTTON 0x1000
00057 #define INTCART 0x2000
00058 
00059 #define INT_VBLANK 0
00060 #define INT_HBLANK 1
00061 #define INT_VCOUNT 2
00062 #define INT_TIMER0 3
00063 #define INT_TIMER1 4
00064 #define INT_TIMER2 5
00065 #define INT_TIMER3 6
00066 #define INT_COM 7
00067 #define INT_DMA0 8
00068 #define INT_DMA1 9
00069 #define INT_DMA2 10
00070 #define INT_DMA3 11
00071 #define INT_KEY 12
00072 #define INT_CART 13
00073 
00074 #define ENABLE_VBLANK 8
00075 #define ENABLE_HBLANK 16
00076 #define ENABLE_VCOUNT 32
00077 
00078 
00079 // Pour activer les timers, que pour moi...
00080 // TIMER O
00081 #define TIMER0COUNT         *(volatile u16 *)(0x04000100)
00082 #define TIMER0CNT           *(volatile u16 *)(0x04000102)
00083 #define TIMER0CNT_TIMER_START               (TIMER0CNT |= 0x0080)
00084 #define TIMER0CNT_IRQ_ENABLE                (TIMER0CNT |= 0x0040)
00085 #define PA_EnableTimer0() {TIMER0CNT_TIMER_START; TIMER0CNT_IRQ_ENABLE;}
00086 
00087 #define TIMER0CNT_TIMER_STOP                (TIMER0CNT &= 0xFF7F)
00088 #define TIMER0CNT_IRQ_DISABLE               (TIMER0CNT &= 0xFFBF)
00089 #define PA_DisableTimer0() {TIMER0CNT_TIMER_STOP; TIMER0CNT_IRQ_DISABLE;}
00090 
00091 // TIMER 1
00092 #define TIMER1COUNT         *(volatile u16 *)(0x04000104)
00093 #define TIMER1CNT           *(volatile u16 *)(0x04000106)
00094 #define TIMER1CNT_TIMER_START               (TIMER1CNT |= 0x0080)
00095 #define TIMER1CNT_IRQ_ENABLE                (TIMER1CNT |= 0x0040)
00096 #define PA_EnableTimer1() {TIMER1CNT_TIMER_START; TIMER1CNT_IRQ_ENABLE;}
00097 
00098 #define TIMER1CNT_TIMER_STOP                (TIMER1CNT &= 0xFF7F)
00099 #define TIMER1CNT_IRQ_DISABLE               (TIMER1CNT &= 0xFFBF)
00100 #define PA_DisableTimer1() {TIMER1CNT_TIMER_STOP; TIMER1CNT_IRQ_DISABLE;}
00101 
00102 // TIMER 2
00103 #define TIMER2COUNT         *(volatile u16 *)(0x04000108)
00104 #define TIMER2CNT           *(volatile u16 *)(0x0400010A)
00105 #define TIMER2CNT_TIMER_START               (TIMER2CNT |= 0x0080)
00106 #define TIMER2CNT_IRQ_ENABLE                (TIMER2CNT |= 0x0040)
00107 #define PA_EnableTimer2() {TIMER2CNT_TIMER_START; TIMER2CNT_IRQ_ENABLE;}
00108 
00109 #define TIMER2CNT_TIMER_STOP                (TIMER2CNT &= 0xFF7F)
00110 #define TIMER2CNT_IRQ_DISABLE               (TIMER2CNT &= 0xFFBF)
00111 #define PA_DisableTimer2() {TIMER2CNT_TIMER_STOP; TIMER2CNT_IRQ_DISABLE;}
00112 
00113 // TIMER 3
00114 #define TIMER3COUNT         *(volatile u16 *)(0x0400010C)
00115 #define TIMER3CNT           *(volatile u16 *)(0x0400010E)
00116 #define TIMER3CNT_TIMER_START               (TIMER3CNT |= 0x0080)
00117 #define TIMER3CNT_IRQ_ENABLE                (TIMER3CNT |= 0x0040)
00118 #define PA_EnableTimer3() {TIMER3CNT_TIMER_START; TIMER3CNT_IRQ_ENABLE;}
00119 
00120 #define TIMER3CNT_TIMER_STOP                (TIMER3CNT &= 0xFF7F)
00121 #define TIMER3CNT_IRQ_DISABLE               (TIMER3CNT &= 0xFFBF)
00122 #define PA_DisableTimer3() {TIMER3CNT_TIMER_STOP; TIMER3CNT_IRQ_DISABLE;}
00123 
00124 
00125 
00126 
00127 extern funcpointer interruptfunc[14];
00128 
00129 
00130 void interruptfunction(void);
00131 
00145 #define PA_InitVBL() PA_StartInt(INT_VBLANK, PA_vblFunc)
00146 
00153 void PA_ResetInterrupts(void);
00154 
00168 void PA_StartInt(u8 inter, funcpointer interfunc);
00169 
00170 
00179 void PA_StopInt(u8 inter);
00180 
00181 
00187 #define PA_GetVcount() (REG_VCOUNT&511)
00188 
00194 void PA_vblFunc(void);
00195  // end of Interrupts
00197 
00198 
00199 #endif
00200 
00201 

Generated on Fri Oct 28 23:16:50 2005 for PA_lib by  doxygen 1.3.9.1
@ 1.1.1.1 log @Initial import of PalibDoc, begin on PAlib0.64b @ text @@