Closed sadr0b0t closed 6 years ago
Готово дело. Работает на Arduino Leonardo (на ней есть только Timer1) https://github.com/sadr0b0t/arduino-timer-api/commit/e6dc816583370c544a7d7634706f69b46fd89882
Смысл - установить/снять бит в регистре TIMSKx
включить прерывание
TIFR5 = _BV(OCF5A); // clear any pending interrupts
TIMSK5 = _BV(OCIE5A); // enable the output compare interrupt
выключить прерывание
TIMSK5 = ~_BV(OCIE5A); // disable output compare interrupt
Стоит ли еще сбрасывать TIFR5 не только перед включением, но и перед выключением - вопрос. В куске кода, который все-таки был в Sevro.cpp для Wiring TIFR5 не сбрасывался и мы не будем. Скорее всего выключить прерывание достаточно, чтобы старые вызовы не пришли из очереди, а при запуске таймера старую очередь имеет смысл чистить, например, в том случае, когда идет перенастройка еще при работающем таймере. В любом случае текущий вариант рабочий, ок.
timer_stop_ISR не работает на AVR/Arduino, таймер не останавливается. Что логично, т.к. метод по факту не реализован:
Код взят из Servo.cpp, нужно реализовать самим https://github.com/arduino/Arduino/blob/ide-1.5.x/libraries/Servo/src/avr/Servo.cpp#L184