import cbaos v0.1
[cbaos.git] / arch / arm-cortex-m0 / interrupt.c
blob61d321497bc0aa5d53ad20af0d12527ae594b748
1 /* Author: Domen Puncer <domen@cba.si>. License: WTFPL, see file LICENSE */
2 #include <stdio.h>
3 #include <interrupt.h>
4 #include <arch/cm0_regs.h>
7 struct irq_entry {
8 /* this will be changed to doubly linked list, and irq_request will also have to be fixed */
9 irqreturn_t (*handler)(int irq, void *dev_id);
10 void *dev_id;
13 int irq_request(unsigned int irq, irqreturn_t (*handler)(int irq, void *dev_id), unsigned long flags, void *dev_id);
14 void irq_free(unsigned int irq, void *dev_id);
16 /* cortex-m0 only supports 32 external interrupts - all is ISER[0] actually */
17 void irq_enable(int irq)
19 NVIC->ISER[irq>>5] = 1 << (irq&0x1f);
22 void irq_disable(int irq)
24 NVIC->ICER[irq>>5] = 1 << (irq&0x1f);
27 void irq_ack(int irq)
31 // clear pending
32 // NVIC->ICPR[irq>>5] = 1 << (irq&0x1f);
34 static irqreturn_t irq_default_handler(int irq, void *dev_id)
36 printf("%s: unhandled irq %i, disabling\n", __func__, irq);
37 irq_disable(irq);
38 return IRQ_HANDLED;