-
Re: Скан-код POWER
Из моей недавней переписки по аналогичному поводу (ну прям, рояль в кустах):
"Проблемка в том, что работа с таймером внутри прерывания, потребует вложенных прерываний. В данном случае - прерываний от события OCR или от переполнения.
Для этого нужно, чтобы флаг глобального разрешения прерываний (I) был установлен. А ведь он у нас аппаратно сбрасывается при входе в любое прерывание, а восстанавливается только при выходе из него командой RETI.
(кстати, команда RETI отличается от команды RET только воздействием на флаг I, это иногда можно использовать, например если при выходе из прерывания нужно, чтобы в дальнейшем прерывания оставались запрещены)
Так вот, чтобы сделать возможным вложенное прерывание, необходимо после входа в основное прерывание, сначала запретить все остальные прерывания, в их числе и основное, затем восстановить флаг глобального прерывания командой SEI. Соответственно, перед выходом из основного, нужно опять восстановить прежние настройки прерываний.
Это достаточно хлопотно и ПМСМ проще внутри прерываний, вместо таймера использовать простой программный счётчик. Ведь поскольку других прерываний нет (флаг I сброшен) то и нарушить работу счётчика ничто не сможет. Т.е. его стабильность ничем не будет отличаться от стабильности ТС."
По факту записи в TIMSK ничего вроде бы не должно происходить - сброс таймера производится записью нулей в TCNT. А прерывание может возникнуть, если на момент его разрешения через TIMSK, имеем установленным флаг события этого прерывания, и глобального разрешения прерываний.
PS:
ПМСМ приведенный код можно укоротить на одну команду:
in r17,timsk
sbr r17,1
out timsk,r17
PS:
Позвольте уточнить - в процитированном фрагменте, неудачное выражение "программный счётчик" следует понимать как "счётчик, организованный программно". Извиняйте за косноязычие...
Крайний раз редактировалось LeonT; 12.11.2010 в 00:28.
Ваши права
- Вы не можете создавать новые темы
- Вы не можете отвечать в темах
- Вы не можете прикреплять вложения
- Вы не можете редактировать свои сообщения
-
Правила форума