1
0
mirror of git://projects.qi-hardware.com/ben-wpan.git synced 2024-11-29 13:42:47 +02:00

atusb/fw/: aggregate interrupts while waiting

- board_app.c (INT0_vect): always read IRQ_STATUS, even if an
  interrupt is already enqueued
- board_app.c (INT0_vect): if an interrupt is enqueued, accumulate
  the interrupts signaled since
- board_app.c (irqs_more): when a pending transfer completes, send
  interrupts accumulated since (if any)
This commit is contained in:
Werner Almesberger 2011-06-23 09:41:40 -03:00
parent 15db279ca2
commit 27fc0a0e2c

View File

@ -144,17 +144,29 @@ void gpio_cleanup(void)
} }
static uint8_t irqs = 0;
static void irqs_more(void *user)
{
static uint8_t buf;
if (!irqs)
return;
buf = irqs;
usb_send(&eps[1], &buf, 1, irqs_more, NULL);
irqs = 0;
}
ISR(INT0_vect) ISR(INT0_vect)
{ {
static uint8_t irq;
if (eps[1].state != EP_IDLE)
return;
spi_begin(); spi_begin();
spi_send(AT86RF230_REG_READ | REG_IRQ_STATUS); spi_send(AT86RF230_REG_READ | REG_IRQ_STATUS);
irq = spi_recv(); irqs |= spi_recv();
spi_end(); spi_end();
usb_send(&eps[1], &irq, 1, NULL, NULL); if (eps[1].state == EP_IDLE)
irqs_more(NULL);
} }