Several other interrupt button implementations had the same problem as did the sam4s-xplained
This commit is contained in:
parent
4bac220b77
commit
b013a0fa48
@ -94,11 +94,24 @@ static xcpt_t board_button_irqx(int irq, xcpt_t irqhandler, xcpt_t *store)
|
|||||||
oldhandler = *store;
|
oldhandler = *store;
|
||||||
*store = irqhandler;
|
*store = irqhandler;
|
||||||
|
|
||||||
/* Configure the interrupt */
|
/* Are we attaching or detaching? */
|
||||||
|
|
||||||
|
if (irqhandler != NULL)
|
||||||
|
{
|
||||||
|
/* Configure the interrupt */
|
||||||
|
|
||||||
|
sam_gpioirq(irq);
|
||||||
|
(void)irq_attach(irq, irqhandler);
|
||||||
|
sam_gpioirqenable(irq);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Detach and disable the interrupt */
|
||||||
|
|
||||||
|
(void)irq_detach(irq)
|
||||||
|
sam_gpioirqdisable(irq);
|
||||||
|
}
|
||||||
|
|
||||||
sam_gpioirq(irq);
|
|
||||||
(void)irq_attach(irq, irqhandler);
|
|
||||||
sam_gpioirqenable(irq);
|
|
||||||
irqrestore(flags);
|
irqrestore(flags);
|
||||||
|
|
||||||
/* Return the old button handler (so that it can be restored) */
|
/* Return the old button handler (so that it can be restored) */
|
||||||
|
@ -96,11 +96,24 @@ static xcpt_t board_button_irqx(int irq, xcpt_t irqhandler, xcpt_t *store)
|
|||||||
oldhandler = *store;
|
oldhandler = *store;
|
||||||
*store = irqhandler;
|
*store = irqhandler;
|
||||||
|
|
||||||
/* Configure the interrupt */
|
/* Are we attaching or detaching? */
|
||||||
|
|
||||||
|
if (irqhandler != NULL)
|
||||||
|
{
|
||||||
|
/* Configure the interrupt */
|
||||||
|
|
||||||
|
sam_gpioirq(irq);
|
||||||
|
(void)irq_attach(irq, irqhandler);
|
||||||
|
sam_gpioirqenable(irq);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Detach and disable the interrupt */
|
||||||
|
|
||||||
|
(void)irq_detach(irq)
|
||||||
|
sam_gpioirqdisable(irq);
|
||||||
|
}
|
||||||
|
|
||||||
sam_gpioirq(irq);
|
|
||||||
(void)irq_attach(irq, irqhandler);
|
|
||||||
sam_gpioirqenable(irq);
|
|
||||||
irqrestore(flags);
|
irqrestore(flags);
|
||||||
|
|
||||||
/* Return the old button handler (so that it can be restored) */
|
/* Return the old button handler (so that it can be restored) */
|
||||||
|
@ -142,11 +142,24 @@ xcpt_t board_button_irq(int id, xcpt_t irqhandler)
|
|||||||
oldhandler = *g_irqsw0;
|
oldhandler = *g_irqsw0;
|
||||||
*g_irqsw0 = irqhandler;
|
*g_irqsw0 = irqhandler;
|
||||||
|
|
||||||
/* Configure the interrupt */
|
/* Are we attaching or detaching? */
|
||||||
|
|
||||||
|
if (irqhandler != NULL)
|
||||||
|
{
|
||||||
|
/* Configure the interrupt */
|
||||||
|
|
||||||
|
sam_gpioirq(IRQ_SW0);
|
||||||
|
(void)irq_attach(IRQ_SW0, irqhandler);
|
||||||
|
sam_gpioirqenable(IRQ_SW0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Detach and disable the interrupt */
|
||||||
|
|
||||||
|
(void)irq_detach(IRQ_SW0)
|
||||||
|
sam_gpioirqdisable(IRQ_SW0);
|
||||||
|
}
|
||||||
|
|
||||||
sam_gpioirq(IRQ_SW0);
|
|
||||||
(void)irq_attach(IRQ_SW0, irqhandler);
|
|
||||||
sam_gpioirqenable(IRQ_SW0);
|
|
||||||
irqrestore(flags);
|
irqrestore(flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* configs/sure-pic32mx/src/pic32mx_buttons.c
|
* configs/sure-pic32mx/src/pic32mx_buttons.c
|
||||||
*
|
*
|
||||||
* Copyright (C) 2011, 2013 Gregory Nutt. All rights reserved.
|
* Copyright (C) 2011, 2013-2014 Gregory Nutt. All rights reserved.
|
||||||
* Author: Gregory Nutt <gnutt@nuttx.org>
|
* Author: Gregory Nutt <gnutt@nuttx.org>
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
@ -211,12 +211,14 @@ xcpt_t board_button_irq(int id, xcpt_t irqhandler)
|
|||||||
|
|
||||||
if (id < NUM_BUTTONS)
|
if (id < NUM_BUTTONS)
|
||||||
{
|
{
|
||||||
|
pic32mx_gpioirqdisable(g_buttoncn[id]);
|
||||||
oldhandler = pic32mx_gpioattach(g_buttonset[id], g_buttoncn[id], irqhandler);
|
oldhandler = pic32mx_gpioattach(g_buttonset[id], g_buttoncn[id], irqhandler);
|
||||||
if (irqbuttron)
|
if (irqhandler != NULL)
|
||||||
{
|
{
|
||||||
pic32mx_gpioirqenable(g_buttoncn[id]);
|
pic32mx_gpioirqenable(g_buttoncn[id]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return oldhandler;
|
return oldhandler;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* configs/ubw32/src/board_buttons.c
|
* configs/ubw32/src/board_buttons.c
|
||||||
*
|
*
|
||||||
* Copyright (C) 2012 Gregory Nutt. All rights reserved.
|
* Copyright (C) 2012, 2014 Gregory Nutt. All rights reserved.
|
||||||
* Author: Gregory Nutt <gnutt@nuttx.org>
|
* Author: Gregory Nutt <gnutt@nuttx.org>
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
@ -186,12 +186,14 @@ xcpt_t board_button_irq(int id, xcpt_t irqhandler)
|
|||||||
|
|
||||||
if (id < NUM_BUTTONS)
|
if (id < NUM_BUTTONS)
|
||||||
{
|
{
|
||||||
|
pic32mx_gpioirqdisable(g_buttoncn[id]);
|
||||||
oldhandler = pic32mx_gpioattach(g_buttonset[id], g_buttoncn[id], irqhandler);
|
oldhandler = pic32mx_gpioattach(g_buttonset[id], g_buttoncn[id], irqhandler);
|
||||||
if (irqbuttron)
|
if (irqhandler)
|
||||||
{
|
{
|
||||||
pic32mx_gpioirqenable(g_buttoncn[id]);
|
pic32mx_gpioirqenable(g_buttoncn[id]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return oldhandler;
|
return oldhandler;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user