void BaseDMD::end() { NVIC_DisableIRQ(TC7_IRQn); bool still_running = unregister_running_dmd(this); if(still_running) NVIC_EnableIRQ(TC7_IRQn); // Still some DMDs running else TC_Stop(TC2, 1); clearScreen(); scanDisplay(); }
void BaseDMD::end() { char oldSREG = SREG; cli(); bool still_running = unregister_running_dmd(this); if(!still_running) TIMSK1 &= ~_BV(TOIE1); // disable timer interrupt, no more DMDs are running SREG = oldSREG; // One final (manual) scan to turn off all LEDs clearScreen(); scanDisplay(); }
void BaseDMD::beginNoTimer() { digitalWrite(pin_noe, LOW); pinMode(pin_noe, OUTPUT); digitalWrite(pin_a, LOW); pinMode(pin_a, OUTPUT); digitalWrite(pin_b, LOW); pinMode(pin_b, OUTPUT); digitalWrite(pin_sck, LOW); pinMode(pin_sck, OUTPUT); clearScreen(); scanDisplay(); }