cpu/atmega_common: misc gpio interrupt fixes

This commit is contained in:
Matthew Blue 2018-06-28 16:06:36 -04:00
parent 1c47f9074c
commit adc44e6496

View File

@ -150,6 +150,7 @@ int gpio_init_int(gpio_t pin, gpio_mode_t mode, gpio_flank_t flank,
{ {
int8_t int_num = _int_num(pin); int8_t int_num = _int_num(pin);
/* mode not supported */
if ((mode != GPIO_IN) && (mode != GPIO_IN_PU)) { if ((mode != GPIO_IN) && (mode != GPIO_IN_PU)) {
return -1; return -1;
} }
@ -159,19 +160,20 @@ int gpio_init_int(gpio_t pin, gpio_mode_t mode, gpio_flank_t flank,
return -1; return -1;
} }
/* flank not supported */
if (flank > GPIO_RISING) {
return -1;
}
gpio_init(pin, mode); gpio_init(pin, mode);
/* clear global interrupt flag */ /* clear global interrupt flag */
cli(); cli();
/* enable interrupt number int_num */ /* enable interrupt number int_num */
EIFR |= (1 << int_num);
EIMSK |= (1 << int_num); EIMSK |= (1 << int_num);
/* configure the flank */
if (flank > GPIO_RISING) {
return -1;
}
/* apply flank to interrupt number int_num */ /* apply flank to interrupt number int_num */
if (int_num < 4) { if (int_num < 4) {
EICRA &= ~(0x3 << (int_num * 2)); EICRA &= ~(0x3 << (int_num * 2));
@ -196,6 +198,7 @@ int gpio_init_int(gpio_t pin, gpio_mode_t mode, gpio_flank_t flank,
void gpio_irq_enable(gpio_t pin) void gpio_irq_enable(gpio_t pin)
{ {
EIFR |= (1 << _int_num(pin));
EIMSK |= (1 << _int_num(pin)); EIMSK |= (1 << _int_num(pin));
} }