You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
49 lines
1.6 KiB
49 lines
1.6 KiB
/* |
|
* Interrupt and PWM utilities for 16 bit Timer1 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 timer1 of the ATMega1280 or Arduino Mega |
|
* Modified April 2012 by Paul Stoffregen |
|
* Modified again, June 2014 by Paul Stoffregen |
|
* This version has been downloaded from https://github.com/PaulStoffregen/TimerOne (commit aaeb4a36f5f23e99e6011bea77cf76abb912e13a) |
|
* |
|
* 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 "TimerOne.h" |
|
|
|
TimerOne Timer1; // preinstatiate |
|
|
|
unsigned short TimerOne::pwmPeriod = 0; |
|
unsigned char TimerOne::clockSelectBits = 0; |
|
void (*TimerOne::isrCallback)() = TimerOne::isrDefaultUnused; |
|
|
|
// interrupt service routine that wraps a user defined function supplied by attachInterrupt |
|
#if defined(__AVR__) |
|
ISR(TIMER1_OVF_vect) |
|
{ |
|
Timer1.isrCallback(); |
|
} |
|
|
|
#elif defined(__arm__) && defined(CORE_TEENSY) |
|
void ftm1_isr(void) |
|
{ |
|
uint32_t sc = FTM1_SC; |
|
#ifdef KINETISL |
|
if (sc & 0x80) FTM1_SC = sc; |
|
#else |
|
if (sc & 0x80) FTM1_SC = sc & 0x7F; |
|
#endif |
|
Timer1.isrCallback(); |
|
} |
|
|
|
#endif |
|
|
|
void TimerOne::isrDefaultUnused() |
|
{ |
|
}
|
|
|