/** * This function will initialize hardware interrupt */ void rt_hw_interrupt_init(void) { rt_int32_t i; register rt_uint32_t idx; rt_uint32_t *priority = at91sam9260_default_irq_priority; at91_extern_irq = (1 << AT91SAM9260_ID_IRQ0) | (1 << AT91SAM9260_ID_IRQ1) | (1 << AT91SAM9260_ID_IRQ2); /* Initialize the AIC interrupt controller */ at91_aic_init(priority); /* init exceptions table */ for(idx=0; idx < MAX_HANDLERS; idx++) { rt_snprintf(irq_desc[idx].name, RT_NAME_MAX - 1, "default"); irq_desc[idx].handler = (rt_isr_handler_t)rt_hw_interrupt_handle; irq_desc[idx].param = RT_NULL; irq_desc[idx].counter = 0; } at91_gpio_irq_init(); /* init interrupt nest, and context in thread sp */ rt_interrupt_nest = 0; rt_interrupt_from_thread = 0; rt_interrupt_to_thread = 0; rt_thread_switch_interrupt_flag = 0; }
void __init at91x40_init_interrupts(unsigned int priority[NR_AIC_IRQS]) { if (!priority) priority = at91x40_default_irq_priority; at91_aic_init(priority); }
void __init at91x40_init_interrupts(unsigned int priority[NR_AIC_IRQS]) { u32 extern_irq = (1 << AT91X40_ID_IRQ0) | (1 << AT91X40_ID_IRQ1) | (1 << AT91X40_ID_IRQ2); if (!priority) priority = at91x40_default_irq_priority; at91_aic_init(priority, extern_irq); }
void __init at91sam9261_init_interrupts(unsigned int priority[NR_AIC_IRQS]) { if (!priority) priority = at91sam9261_default_irq_priority; /* Initialize the AIC interrupt controller */ at91_aic_init(priority); /* Enable GPIO interrupts */ at91_gpio_irq_setup(); }
void __init at91sam9263_init_interrupts(unsigned int priority[NR_AIC_IRQS]) { if (!priority) priority = at91sam9263_default_irq_priority; at91_aic_init(priority); at91_gpio_irq_setup(); }
int __INIT__ at91sam926x_interrupt_init(void) { __u32 i, j; __u32 irq; at91_aic_init(); for (i = 0; i < 3; i++) { for (j = 0; j < 32; j++) { irq = 32 + ((i << 5) | j); irq_assoc_intctl(irq, &at91sam926x_gpio_intctrl); irq_set_handler(irq, irq_handle_simple, 0); } irq_set_handler(PIO_IRQ_OFFSET + i, at91sam926x_gpio_irqparse, 1); } irq_enable(); // fixme return 0; }
/** * This function will initialize hardware interrupt */ void rt_hw_interrupt_init(void) { rt_int32_t i; register rt_uint32_t idx; rt_uint32_t *priority = at91sam9260_default_irq_priority; at91_extern_irq = (1 << AT91SAM9260_ID_IRQ0) | (1 << AT91SAM9260_ID_IRQ1) | (1 << AT91SAM9260_ID_IRQ2); /* Initialize the AIC interrupt controller */ at91_aic_init(priority); /* init exceptions table */ for(idx=0; idx < MAX_HANDLERS; idx++) { isr_table[idx] = (rt_isr_handler_t)rt_hw_interrupt_handle; } /* init interrupt nest, and context in thread sp */ rt_interrupt_nest = 0; rt_interrupt_from_thread = 0; rt_interrupt_to_thread = 0; rt_thread_switch_interrput_flag = 0; }