void rt_hw_trap_irq() { void *param; unsigned long ir; rt_isr_handler_t isr_func; extern struct rt_irq_desc isr_table[]; ir = rt_hw_interrupt_get_active(INT_IRQ); if (ir == 127) { /* new IRQ generation */ rt_hw_interrupt_ack(INT_IRQ); ir = rt_hw_interrupt_get_active(INT_IRQ); if (ir == 127) { /* still spurious interrupt, get out */ /*rt_kprintf("still spurious interrupt\n");*/ return; } /*rt_kprintf("new IRQ: %d\n", ir);*/ } /* get interrupt service routine */ isr_func = isr_table[ir].handler; param = isr_table[ir].param; /* turn to interrupt service routine */ if (isr_func != RT_NULL) isr_func(ir, param); /* new IRQ generation */ rt_hw_interrupt_ack(INT_IRQ); }
void rt_hw_trap_fiq() { void *param; unsigned long ir; rt_isr_handler_t isr_func; extern struct rt_irq_desc isr_table[]; ir = rt_hw_interrupt_get_active(INT_FIQ); /* get interrupt service routine */ isr_func = isr_table[ir].handler; param = isr_table[ir].param; /* turn to interrupt service routine */ isr_func(ir, param); /* new FIQ generation */ rt_hw_interrupt_ack(INT_FIQ); }
void rt_hw_trap_irq() { rt_isr_handler_t isr_func; rt_uint32_t irq; void *param; /* get irq number */ irq = rt_hw_interrupt_get_active(0); /* get interrupt service routine */ isr_func = irq_desc[irq].handler; param = irq_desc[irq].param; /* turn to interrupt service routine */ isr_func(irq, param); rt_hw_interrupt_ack(0, irq); #ifdef RT_USING_INTERRUPT_INFO irq_desc[irq].counter ++; #endif }