000000widow-hackspacecon/fw/HackSpaceCon_AS7/HSC_Wand/isr.cpp

48 lines
881 B
C++

/*
hackspacecon wand firmware
interrupt routines
*/
#include <Arduino.h>
#include "rgbled.h"
extern uint8_t run_rgbprog;
// TCB0 general interrupt
ISR(TCB0_INT_vect)
{
uint8_t intflags = TCB0.INTFLAGS;
// in this program, this interrupt is only used for timing.
// we'll now return to executing loop()
rgb_run_next = 1;
// reset the INTFLAGS - necessary on this series
TCB0.INTFLAGS = intflags;
}
// button interrupt
ISR(PORTA_PORT_vect)
{
uint8_t intflags = PORTA.INTFLAGS;
// shitty debounce; this is bad practice
delay(8);
// was our pin changed?
if (intflags & PIN2_bm) {
// start or re-start running a program
if (!digitalRead(PIN_PA2)) {
run_rgbprog = 1; // run a new program
rgb_run_next = 1;
}
}
// reset the INTFLAGS - necessary on this series
PORTA.INTFLAGS = intflags;
}