// ------------------------------------------------------------ // this function inits and starts the timer, using the specified // function as a callback and the period provided. must be passed // the name of a function taking no arguments and returning void. // make sure this function can complete within the time allowed. // attempts to allocate a timer using available resources, // returning true on success or false in case of failure. // Period units is defined by scale, where scale = uSec or hmSec // and = 1-65535 microsecond (uSec) // or 1-65535 0.5ms increments (hmSec) // ------------------------------------------------------------ bool IntervalTimer::beginCycles(void (*isrCallback)(), intPeriod Period, bool scale, TIMid id) { // if this interval timer is already running, stop and deallocate it if (status == TIMER_SIT) { stop_SIT(); status = TIMER_OFF; } // store callback pointer myISRcallback = isrCallback; if (id < NUM_SIT) { // Allocate specified timer (id=0 to 2/4) or auto-allocate from pool (id=255) // attempt to allocate this timer if (allocate_SIT(Period, scale, id)) status = TIMER_SIT; //255 means allocate from pool else status = TIMER_OFF; } else { // attempt to allocate this timer if (allocate_SIT(Period, scale, AUTO)) status = TIMER_SIT; //255 means allocate from pool else status = TIMER_OFF; } // check for success and return if (status != TIMER_OFF) return true; return false; }
// ------------------------------------------------------------ // this function inits and starts the timer, using the specified // function as a callback and the period provided. must be passed // the name of a function taking no arguments and returning void. // make sure this function can complete within the time allowed. // attempts to allocate a timer using available resources, // returning true on success or false in case of failure. // Period units is defined by scale, where scale = uSec or hmSec // and = 1-65535 microsecond (uSec) // or 1-65535 0.5ms increments (hmSec) // ------------------------------------------------------------ bool IntervalTimer::beginCycles(void (*isrCallback)(), uint16_t newValue, bool scale) { // if this interval timer is already running, stop it if (status == TIMER_SIT) { stop_SIT(); status = TIMER_OFF; } // store callback pointer myISRcallback = isrCallback; // attempt to allocate this timer if (allocate_SIT(newValue, scale)) status = TIMER_SIT; else status = TIMER_OFF; // check for success and return if (status != TIMER_OFF) return true; return false; }
// ------------------------------------------------------------ // stop the timer if it's currently running, using its status // to determine what hardware resources the timer may be using // ------------------------------------------------------------ void IntervalTimer::end() { if (status == TIMER_SIT) stop_SIT(); status = TIMER_OFF; }