ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
30 июня
275439 Топик полностью
MBedder, терминатор (29.09.2011 11:12, просмотров: 151) ответил mazur на Ну соображения были такие. Сброс счетчика, чтобы импульс был гарантированной длины. Включение прерывания и запуск таймера. Если бред, как тогда сделать?
>> В INTx_ISR: - Установка требуемой ноги порта в 1 - Чтение ранее запущенного таймера - Прибавление к прочитанному значения требуемой задержки (перенос игнорировать) - Запись результата в OCRxx - Запрещение прерывания INTx - Разрешение прерывания OCRxx - reti В OCRxx_ISR: - Сброс требуемой ноги порта в 0 - Запрещение прерывания OCRxx - Сброс флага INTx, который мог установиться от дребезга - Разрешение прерывания INTx - reti Можно обойтись и без OCRxx_ISR, если импульс допустимо генерить на одном из OCxx выходов. Тогда начать импульс можно при помощи Force Output Compare, закончить - по совпадению OCRxx, но придется позаботиться об антидребезге на INTx, иначе импульс будет длиннее желаемого на весь период дребезга (в варианте с OCRxx_ISR антидребезг получается на халяву, т.к. флаг INTx там игнорируется на всю длину импульса и принудительно сбрасывается в конце импульса, если возникал).