Async timer, problem solved.
Mar. 26th, 2012 04:08 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Да, вся магия заключалась в том, чтобы дождаться окончания переноса данных из "теневых" регистров в таймер. Я не стал мудрить и написал макрос-враппер, коий дожидается освобождения регистра, пишет данные, дожидается успешного завершения. Попутно выяснилось, что в режиме Clear-Timer-on-Compare (CTC) прерывание "Output Compare" срабатывает ДВАЖДЫ. Видимо, первый раз, когда таймер дощёлкал до переполнения, а второй раз, когда перевалил за него (плюс небольшой оверхед). Я сделал так, чтобы обработчик прерывания дожидался следующего щелчка (глядя во всё тот же регистр с флагами "асинхронной готовности"), и сразу всё наладилось.
Итого - плата работает, но потребляет всего 1.1 мА.
Всё равно много. Такого не должно быть. Дело в том, что часть схемы запитывается от дежурного источника, и именно за это потребление надо побороться; остальное запитывается от мощного понижатора и там уже можно не бояться. Вероятно, где-то между двумя доменами питания сидит резистивная подтяжка и через неё, похоже, "сифонит".
Впрочем, 1.1 мА это примерно на порядок меньше тока саморазряда Батарейки... можно и так оставить.
Итого - плата работает, но потребляет всего 1.1 мА.
Всё равно много. Такого не должно быть. Дело в том, что часть схемы запитывается от дежурного источника, и именно за это потребление надо побороться; остальное запитывается от мощного понижатора и там уже можно не бояться. Вероятно, где-то между двумя доменами питания сидит резистивная подтяжка и через неё, похоже, "сифонит".
Впрочем, 1.1 мА это примерно на порядок меньше тока саморазряда Батарейки... можно и так оставить.