mirror of
https://github.com/DCC-EX/CommandStation-EX.git
synced 2024-11-30 03:26:13 +01:00
95 lines
1.4 KiB
C++
95 lines
1.4 KiB
C++
// This file is copied from https://github.com/davidcutting42/ArduinoTimers
|
|
// All Credit to David Cutting
|
|
|
|
#include <Arduino.h>
|
|
|
|
#if defined(ARDUINO_SAMD_ZERO)
|
|
|
|
#if defined(SAMC21)
|
|
#include "ATSAMC21G/Timer.h"
|
|
#else
|
|
#include "ATSAMD21G/Timer.h"
|
|
#endif
|
|
|
|
Timer TimerA(TCC0);
|
|
Timer TimerB(TCC1);
|
|
Timer TimerC(TCC2);
|
|
|
|
void TCC0_Handler() {
|
|
if(TCC0->INTFLAG.bit.OVF) {
|
|
TCC0->INTFLAG.bit.OVF = 1;
|
|
TimerA.isrCallback();
|
|
}
|
|
}
|
|
|
|
void TCC1_Handler() {
|
|
if(TCC1->INTFLAG.bit.OVF) {
|
|
TCC1->INTFLAG.bit.OVF = 1;
|
|
TimerB.isrCallback();
|
|
}
|
|
}
|
|
|
|
void TCC2_Handler() {
|
|
if(TCC2->INTFLAG.bit.OVF) {
|
|
TCC2->INTFLAG.bit.OVF = 1;
|
|
TimerC.isrCallback();
|
|
}
|
|
}
|
|
#elif defined(ARDUINO_AVR_MEGA) || defined(ARDUINO_AVR_MEGA2560)
|
|
|
|
#include "ATMEGA2560/Timer.h"
|
|
|
|
Timer TimerA(1);
|
|
Timer TimerB(3);
|
|
Timer TimerC(4);
|
|
Timer TimerD(5);
|
|
|
|
ISR(TIMER1_OVF_vect)
|
|
{
|
|
TimerA.isrCallback();
|
|
}
|
|
|
|
ISR(TIMER3_OVF_vect)
|
|
{
|
|
TimerB.isrCallback();
|
|
}
|
|
|
|
ISR(TIMER4_OVF_vect)
|
|
{
|
|
TimerC.isrCallback();
|
|
}
|
|
|
|
ISR(TIMER5_OVF_vect)
|
|
{
|
|
TimerD.isrCallback();
|
|
}
|
|
|
|
#elif defined(ARDUINO_AVR_UNO) // Todo: add other 328 boards for compatibility
|
|
|
|
#include "ATMEGA328/Timer.h"
|
|
|
|
Timer TimerA(1);
|
|
Timer TimerB(2);
|
|
|
|
ISR(TIMER1_OVF_vect)
|
|
{
|
|
TimerA.isrCallback();
|
|
}
|
|
|
|
ISR(TIMER2_OVF_vect)
|
|
{
|
|
TimerB.isrCallback();
|
|
}
|
|
|
|
#elif defined(ARDUINO_ARCH_MEGAAVR)
|
|
|
|
#include "ATMEGA4809/Timer.h"
|
|
|
|
Timer TimerA(0);
|
|
|
|
ISR(TCA0_OVF_vect) {
|
|
TimerA.isrCallback();
|
|
}
|
|
|
|
#endif
|