LTagKirov писал(а):
1. "Заряжается" таймер для счётчика измерения длительности, подробности надо уточнить, практически это самое интересное
2. Функция обратного вызова срабатывает после импульса на ножке или по таймеру?, интересно на любую
ножку можно повесить такую функцию ? И на каждую ножку будет нужен свой обработчик ?
Есть ли ограничение на количество ножек, ну кроме корпуса МК?
3. Импульс разбирается на соответствие части пакета с помощью автомата.
4. По результату разбора пакета - автомат обнуляется.
5. Полученный пакет хранится в буфере и забирается по мере необходимости.
1. Запуск при правильно настроенном таймере - 1 строчка, см, предыдущий пост.
2. В режиме захвата значения по внешнему импульсу происходит следующее: когда на ножку МК приходит фронт, текущее значение счетчика таймера аппаратно записывается в специальный регистр, а уже потом вызывается прерывание. Это позволяет максимально точно определять время прихода фронта, т.к. прерывание может неопределенное время ждать окончания других прерываний, да и точно не известны все тайминги. Соответственно в коде прерывания можно никуда не торопясь считать данные из регистра захвата.
По поводу ножек: у микроконтроллера есть несколько таймеров. Некоторые из них "продвинутые", и содержат, обычно, 4 "канала". Каналы могут генерировать ШИМ или захватывать внешнее значение как я описал. Ну и ещё некоторые вещи делать. В контроллере смарт-сенсора два таймера с 4 каналами и один с 1 каналом. Каналы привязаны к ножкам. Иногда есть возможность сделать remap - сменить ножку на какую-то другую определенную. В мощных МК есть до 4 вариантов, в слабых вариантов может не быть. Наш контроллер - один из слабейших.
Если нужно просто сделать прерывание по внешнему сигналу без захвата таймера, то в STM32 можно назначить обработчик почти на любую ножку МК. Даже на все сразу. Это называется EXTI.
Например, в Caustic я не использую захват таймера, а просто по прерыванию от нужной ножки беру время из "системных часов", сделанных на двух "последовательно соединенных" таймерах, считающих микросекунды. Точности более чем достаточно, и нет ограничения на выбор ножки для ИК-приемника. К тому же "системные часы" используются во многих местах Caustic.
3. Ага.
4. Ага.
5. Ага.