// IRQ割り込みハンドラ void IRQ_handler(void){ // IRQ割り込みを停止 disable_IRQ(); // printf("get IRQ in IRQ handler\n"); // printf("CPSR (in IRQ_handler) = 0x%08x\n",getmode()); // Basic IRQ pendingをチェック if(*INTERRUPT_IRQ_BASIC_PENDING & 0x01 != 0){ // タイマー割り込み // デバッグ用 // printf("Timer IRQ start\n"); // printf("Timer Raw IRQ before: 0x%08x\n",*TIMER_RAWIRQ); // printf("irq_pending0 before : 0x%08x\n",*INTERRUPT_IRQ_BASIC_PENDING); // タイマ割り込み処理 timerIRQ_func(); // 割り込みフラグクリア *TIMER_IRQ_CLR = 0; // デバッグ用 // フラグがクリアされたかチェック // printf("irq_pending0 after: 0x%08x\n",*INTERRUPT_IRQ_BASIC_PENDING); // printf("Timer Raw IRQ after: 0x%08x\n",*TIMER_RAWIRQ); // printf("Timer IRQ end\n"); } // TODO: その他の割り込みも調べる // IRQ割り込みを許可 enable_IRQ(); return; }
void disable_all_IRQ(void){ // すべての割り込み不許可 *INTERRUPT_DISABLE_BASIC_IRQS = 0xffffffff; *INTERRUPT_DISABLE_IRQS1 = 0xffffffff; *INTERRUPT_DISABLE_IRQS2 = 0xffffffff; *INTERRUPT_FIQ_CTRL = 0; // IRQ不許可 disable_IRQ(); }
void mouse_dead() { printf(LNG_MOUSE_REMOVE); disable_IRQ(12); _kprintOK(); }