From d5f274ac7665e042a556fda1cecbdfa18852d22a Mon Sep 17 00:00:00 2001 From: Gregory Nutt Date: Wed, 3 Jul 2013 08:12:45 -0600 Subject: [PATCH] Fix SAM34 interrupt handling for ports D-F; fix MISO logic in Arduino Due touchscreen driver --- arch/arm/src/sam34/sam_gpioirq.c | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/arch/arm/src/sam34/sam_gpioirq.c b/arch/arm/src/sam34/sam_gpioirq.c index 854644bfbbd..3b7c8a2a29d 100644 --- a/arch/arm/src/sam34/sam_gpioirq.c +++ b/arch/arm/src/sam34/sam_gpioirq.c @@ -138,8 +138,33 @@ static int sam_irqbase(int irq, uint32_t *base, int *pin) *pin = irq - SAM_IRQ_PC0; return OK; } +#endif +#ifdef CONFIG_GPIOD_IRQ + if (irq <= SAM_IRQ_PD31) + { + *base = SAM_PIOD_BASE; + *pin = irq - SAM_IRQ_PD0; + return OK; + } +#endif +#ifdef CONFIG_GPIOE_IRQ + if (irq <= SAM_IRQ_PE31) + { + *base = SAM_PIOE_BASE; + *pin = irq - SAM_IRQ_PE0; + return OK; + } +#endif +#ifdef CONFIG_GPIOF_IRQ + if (irq <= SAM_IRQ_PF31) + { + *base = SAM_PIOF_BASE; + *pin = irq - SAM_IRQ_PF0; + return OK; + } #endif } + return -EINVAL; } @@ -408,7 +433,7 @@ void sam_gpioirqenable(int irq) { /* Clear (all) pending interrupts and enable this pin interrupt */ - (void)getreg32(base + SAM_PIO_ISR_OFFSET); + //(void)getreg32(base + SAM_PIO_ISR_OFFSET); putreg32((1 << pin), base + SAM_PIO_IER_OFFSET); } }