Перейти к содержанию
    

захват с обнулением таймера?

Вопрос к знатокам. Мне надо сохранять интервалы времени между приходящими импульсами. F407 CPU. Настроил таймер, интерапт по capture ch1, читаю count, вычитаю предыдущий. Все хорошо. Но хотелось бы еще лучше. Можно ли настроить таймер так, чтобы он при поступлении импульса сохранял счетчик (скажем по DMA) и автоматом обнулял? Тогда бы не надо было вычитать и не надо прерывания на каждый импульс.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно ли настроить таймер так, чтобы он при поступлении импульса сохранял счетчик (скажем по DMA) и автоматом обнулял?

Конечно можно. Читать RM в районе полей SMS и TS регистра SMCR.

Bits 6:4 TS[2:0]: Trigger selection

This bit-field selects the trigger input to be used to synchronize the counter.

...

101: Filtered Timer Input 1 (TI1FP1)

110: Filtered Timer Input 2 (TI2FP2)

...

Bits 2:0 SMS: Slave mode selection

When external signals are selected the active edge of the trigger signal (TRGI) is linked to the

polarity selected on the external input (see Input Control register and Control Register

description.

...

100: Reset Mode - Rising edge of the selected trigger input (TRGI) reinitializes the counter

and generates an update of the registers.

...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно ли настроить таймер так, чтобы он при поступлении импульса сохранял счетчик (скажем по DMA) и автоматом обнулял? Тогда бы не надо было вычитать и не надо прерывания на каждый импульс.

DMA - здравая идея. А вот "не надо было бы вычитать" - это напрасно. Неужели так трудно вычесть? К тому же эти обнуления могут привести к неочевидным побочным эффектам, там нужно хорошенько подумать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

DMA - здравая идея. А вот "не надо было бы вычитать" - это напрасно. Неужели так трудно вычесть? К тому же эти обнуления могут привести к неочевидным побочным эффектам, там нужно хорошенько подумать.

 

Вычитать не жалко, благо не в столбик:) Но делать это надо сразу, чтобы записывать в память только 8 бит. Если импульсы приходят очень часто, не хочется интерапт на каждый. В крайнем случае можно конечно писать по DMA в буффер, отдельно в цикле вычитать и писать в другой буффер, но если можно заставить железо все делать, почему бы и нет?

 

Можно поподробнее какие грабли возможны с обнулением?

 

 

Конечно можно. Читать RM в районе полей SMS и TS регистра SMCR.

 

Да, я смотрел на slave mode, но не понял. можно ли и capture, и reset делать по одному и тому же фронту. Попробую, спасибо.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да, я смотрел на slave mode, но не понял. можно ли и capture, и reset делать по одному и тому же фронту. Попробую, спасибо.

Можно. Кста, можно сделать анти-ШИМ: в одном регистре будет период импульсов (расстояние между передними фронтами с обнулением),

а во втором длительность импульса (расстояние между фронтом и спадом).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...