|
|
@ -31,10 +31,25 @@ |
|
|
|
|
|
|
|
|
|
|
|
namespace umodular { namespace clock { |
|
|
|
namespace umodular { namespace clock { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline uint32_t phase_mult(uint32_t val)
|
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
return (val * PHASE_FACTOR) >> 8; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static inline uint16_t clock_diff(uint16_t old_clock, uint16_t new_clock)
|
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
if (new_clock >= old_clock) { |
|
|
|
|
|
|
|
return new_clock - old_clock; |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
return new_clock + (65535 - old_clock); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
uClockClass::uClockClass() |
|
|
|
uClockClass::uClockClass() |
|
|
|
{ |
|
|
|
{ |
|
|
|
init(); |
|
|
|
init(); |
|
|
|
mode = INTERNAL_CLOCK; |
|
|
|
mode = INTERNAL_CLOCK; |
|
|
|
|
|
|
|
state = PAUSED; |
|
|
|
setTempo(120); |
|
|
|
setTempo(120); |
|
|
|
|
|
|
|
|
|
|
|
onClock96PPQNCallback = NULL; |
|
|
|
onClock96PPQNCallback = NULL; |
|
|
@ -71,21 +86,6 @@ void uClockClass::init() |
|
|
|
SREG = tmpSREG; |
|
|
|
SREG = tmpSREG; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
uint16_t clock_diff(uint16_t old_clock, uint16_t new_clock)
|
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
if (new_clock >= old_clock) { |
|
|
|
|
|
|
|
return new_clock - old_clock; |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
return new_clock + (65535 - old_clock); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#define PHASE_FACTOR 16 |
|
|
|
|
|
|
|
static uint32_t phase_mult(uint32_t val)
|
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
return (val * PHASE_FACTOR) >> 8; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void uClockClass::start()
|
|
|
|
void uClockClass::start()
|
|
|
|
{ |
|
|
|
{ |
|
|
|
start_timer = millis(); |
|
|
|
start_timer = millis(); |
|
|
@ -180,8 +180,8 @@ void uClockClass::setMode(uint8_t tempo_mode) |
|
|
|
|
|
|
|
|
|
|
|
void uClockClass::clockMe()
|
|
|
|
void uClockClass::clockMe()
|
|
|
|
{ |
|
|
|
{ |
|
|
|
if (uClock.mode == uClock.EXTERNAL_CLOCK) { |
|
|
|
if (mode == EXTERNAL_CLOCK) { |
|
|
|
uClock.handleClock(); |
|
|
|
handleClock(); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -354,7 +354,7 @@ ISR(TIMER1_OVF_vect) |
|
|
|
// global timer counter
|
|
|
|
// global timer counter
|
|
|
|
_timer = millis(); |
|
|
|
_timer = millis(); |
|
|
|
|
|
|
|
|
|
|
|
if (uClock.state == uClock.STARTED) { |
|
|
|
if (uClock.state == umodular::clock::STARTED) { |
|
|
|
_clock++; |
|
|
|
_clock++; |
|
|
|
uClock.handleTimerInt(); |
|
|
|
uClock.handleTimerInt(); |
|
|
|
} |
|
|
|
} |
|
|
|