Периферийное устройство Atmel SAMD21 TCC предоставляет команду STOP, которая приостанавливает работу счетчика. Счетчик может быть восстановлен командой RETRIGGER.
Когда выдается STOP, TCC переходит в состояние отказа, в котором выходы либо находятся в трех состояниях, либо приводятся в состояния, указанные в регистре конфигурации. Предположительно этот механизм предназначен для поддержки фиксированного отказоустойчивого выходного состояния.
В моем случае я хочу, чтобы выходные контакты замерзали в состоянии, в котором они находились во время команды STOP. Единственный способ сделать это - обновлять сконфигурированный регистр состояния выходного сигнала сбоя каждый раз, когда выходы обновляются, что требует обработки прерываний, что противоречит цели большей части архитектуры расширения формы выходного сигнала TCC, а также является нагрузка обработки я бы предпочел избежать. Есть и другие сложности, такие как учет механизма мертвого времени и аппаратные / программные гонки.
Итак, я искал способы достижения этого, которые не включают команду STOP, - но я не вижу другого способа остановить счетчик. Невозможно управлять входом периферийных часов, и отключение его в GCLK исключается, так как он также запускает TCC1. (И кто знает, какие другие эффекты это могло бы иметь.) Отрицание бита ENABLE, помимо того, что оно является избыточным, неудивительно, что также дает выходы. Изменение конфигурации различными другими способами обычно требует записи для включения защищенных регистров, поэтому сначала необходимо отключить периферийное устройство.
(Единственная идея, которую я еще не исследовал, - это запустить счетчик из системы событий и вместо этого управлять генерацией / стробированием событий.)
Итак: есть ли способ приостановить работу периферийного устройства в его текущем состоянии, сохраняя при этом состояние выходных контактов?