Пауза счетчик SAMD21 TCC - PullRequest
       70

Пауза счетчик SAMD21 TCC

0 голосов
/ 14 января 2019

Периферийное устройство Atmel SAMD21 TCC предоставляет команду STOP, которая приостанавливает работу счетчика. Счетчик может быть восстановлен командой RETRIGGER.

Когда выдается STOP, TCC переходит в состояние отказа, в котором выходы либо находятся в трех состояниях, либо приводятся в состояния, указанные в регистре конфигурации. Предположительно этот механизм предназначен для поддержки фиксированного отказоустойчивого выходного состояния.

В моем случае я хочу, чтобы выходные контакты замерзали в состоянии, в котором они находились во время команды STOP. Единственный способ сделать это - обновлять сконфигурированный регистр состояния выходного сигнала сбоя каждый раз, когда выходы обновляются, что требует обработки прерываний, что противоречит цели большей части архитектуры расширения формы выходного сигнала TCC, а также является нагрузка обработки я бы предпочел избежать. Есть и другие сложности, такие как учет механизма мертвого времени и аппаратные / программные гонки.

Итак, я искал способы достижения этого, которые не включают команду STOP, - но я не вижу другого способа остановить счетчик. Невозможно управлять входом периферийных часов, и отключение его в GCLK исключается, так как он также запускает TCC1. (И кто знает, какие другие эффекты это могло бы иметь.) Отрицание бита ENABLE, помимо того, что оно является избыточным, неудивительно, что также дает выходы. Изменение конфигурации различными другими способами обычно требует записи для включения защищенных регистров, поэтому сначала необходимо отключить периферийное устройство.

(Единственная идея, которую я еще не исследовал, - это запустить счетчик из системы событий и вместо этого управлять генерацией / стробированием событий.)

Итак: есть ли способ приостановить работу периферийного устройства в его текущем состоянии, сохраняя при этом состояние выходных контактов?

1 Ответ

0 голосов
/ 22 января 2019

Все, что я могу попробовать - это асинхронное событие COUNT, которое звучит так: - это вход для часов на счетчик.

(номера страниц из руководства от 03/2016)

31.6.4.3. События, с.712; Подсчет во время активного состояния асинхронного события (увеличение или уменьшение, в зависимости от направления счетчика). В этом случае счетчик будет увеличиваться или уменьшаться в каждом цикле предварительно масштабированных часов, пока событие активно.

31.8.9. Контроль событий, с.734; Регистр EVCTRL, Биты 2: 0 - EVACT0 [2: 0]: вход события таймера / счетчика 0 Действие 0x5 COUNT (асинхронный) Счетчик активного состояния асинхронного события

Недостатком является то, что программные события должны быть синхронными.

...