|
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- /*
- * Interrupt and PWM utilities for 16 bit Timer3 on ATmega168/328
- * Original code by Jesse Tane for http://labs.ideo.com August 2008
- * Modified March 2009 by Jérôme Despatis and Jesse Tane for ATmega328 support
- * Modified June 2009 by Michael Polli and Jesse Tane to fix a bug in setPeriod() which caused the timer to stop
- * Modified Oct 2009 by Dan Clemens to work with timer3 of the ATMega1280 or Arduino Mega
- * Modified April 2012 by Paul Stoffregen
- * Modified again, June 2014 by Paul Stoffregen
- *
- * This is free software. You can redistribute it and/or modify it under
- * the terms of Creative Commons Attribution 3.0 United States License.
- * To view a copy of this license, visit http://creativecommons.org/licenses/by/3.0/us/
- * or send a letter to Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA.
- *
- */
-
- #include "TimerThree.h"
-
- TimerThree Timer3; // preinstatiate
-
- unsigned short TimerThree::pwmPeriod = 0;
- unsigned char TimerThree::clockSelectBits = 0;
- void (*TimerThree::isrCallback)() = TimerThree::isrDefaultUnused;
-
- // interrupt service routine that wraps a user defined function supplied by attachInterrupt
- #if defined(__AVR__)
- ISR(TIMER3_OVF_vect)
- {
- Timer3.isrCallback();
- }
-
- #elif defined(__arm__) && defined(TEENSYDUINO) && (defined(KINETISK) || defined(KINETISL))
- void ftm2_isr(void)
- {
- uint32_t sc = FTM2_SC;
- #ifdef KINETISL
- if (sc & 0x80) FTM2_SC = sc;
- #else
- if (sc & 0x80) FTM2_SC = sc & 0x7F;
- #endif
- Timer3.isrCallback();
- }
-
- #elif defined(__arm__) && defined(TEENSYDUINO) && defined(__IMXRT1062__)
- void TimerThree::isr(void)
- {
- FLEXPWM2_SM2STS = FLEXPWM_SMSTS_RF;
- Timer3.isrCallback();
- }
-
- #endif
-
- void TimerThree::isrDefaultUnused()
- {
- }
|