реклама на сайте
подробности

 
 
> SAM3U и 32 битный таймер, можно ли реализовать?
sonycman
сообщение Jun 8 2011, 21:42
Сообщение #1


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Последнее время привык использовать в приложениях аппаратный 32 битный счётчик с разрешением в 1 микросекунду.
На его базе очень удобно реализовать таймеры с выдержкой от единиц микросекунд до нескольких минут.

На STM32F1xx приходилось использовать в цепочке два 16 битных таймера, благо есть возможность выстраивания друг за другом.
На LPC17хх вообще без проблем - нативный 32 битный таймер в наличии.
Вот теперь прицениваюсь к Сэмам.

И что же наблюдаю? Имеем очередное чудо инженерной (плисоводской?) мысли в виде отсутствия каких либо прескалеров и навороченного блока таймеров.

В мануале написано, что у нас аж 9 каналов 16 битных таймеров, тогда как регистров в наличии только на 3 smile3046.gif
Первая непонятка.
Потом смотрю, вроде есть возможность заводить выход одного счётчика на вход другого, ага!
Идея такая: первый таймер играет роль делителя частоты ядра в 96 МГц до 1 МГц (прескалер) -> второй выполняет роль младших 16 бит -> и третий старших - в итоге получаем 32 бита.

Но для этого надо, чтобы после срабатывания функции сравнения и сброса счётчика в 0 выдавался импульс на следующее звено в цепочке, для его инкремента.
Однако в мануале указана только возможность установить в 1, сбросить в 0 или переключить состояние выхода таймера.
Про короткий импульс нет ни слова sad.gif

Неужели всё это нагромождение таймеров не способно работать как один 32 битный свободный счётчик? crying.gif

ЗЫ: ага, вроде придумал - ведь на каждый таймер мы имеем три compare регистра - А, В и С.
Тогда, к примеру, в регистр А заносим значение 0xFFFF, а в регистр C - 0x0, и устанавливаем функции для А - установить выход в 1, а для С - сбросить в 0.
И получаем короткий импульс при переполнении счётчика!

Что скажете, уважаемые?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
aaarrr
сообщение Jun 8 2011, 21:53
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(sonycman @ Jun 9 2011, 01:42) *
В мануале написано, что у нас аж 9 каналов 16 битных таймеров, тогда как регистров в наличии только на 3 smile3046.gif
Первая непонятка.

В мануале их 3, откуда взялось 9?

Цитата(sonycman @ Jun 9 2011, 01:42) *
Потом смотрю, вроде есть возможность заводить выход одного счётчика на вход другого, ага!
Идея такая: первый таймер играет роль делителя частоты ядра в 96 МГц до 1 МГц (прескалер) -> второй выполняет роль младших 16 бит -> и третий старших - в итоге получаем 32 бита.

Эх, и не жалко таймеров?

Цитата(sonycman @ Jun 9 2011, 01:42) *
Но для этого надо, чтобы после срабатывания функции сравнения и сброса счётчика в 0 выдавался импульс на следующее звено в цепочке, для его инкремента.
Однако в мануале указана только возможность установить в 1, сбросить в 0 или переключить состояние выхода таймера.
Про короткий импульс нет ни слова sad.gif

Еще в мануале упоминаются три регистра сравнения, по каждому из которых можно что-нибудь с TIOx сделать.
Go to the top of the page
 
+Quote Post
sonycman
сообщение Jun 8 2011, 22:19
Сообщение #3


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(aaarrr @ Jun 9 2011, 01:53) *
В мануале их 3, откуда взялось 9?

Отсюда
Прикрепленное изображение

Там по тексту ещё в одном месте про 9 каналов сказано.
Три - это уже совсем мало.

Цитата(aaarrr @ Jun 9 2011, 01:53) *
Эх, и не жалко таймеров?

Можете предложить другой способ получения 32 бит?
Это Атмелу надо было думать, прежде чем выпускать современный контроллер с жалкими тремя 16 битными огрызками sm.gif
Прескалер-то выбросили, явно намекают на использование вместо него одного из таймеров.

Цитата(aaarrr @ Jun 9 2011, 01:53) *
Еще в мануале упоминаются три регистра сравнения, по каждому из которых можно что-нибудь с TIOx сделать.

Это я уже допёр sm.gif
Go to the top of the page
 
+Quote Post
scifi
сообщение Jun 9 2011, 05:37
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(sonycman @ Jun 9 2011, 02:19) *
Можете предложить другой способ получения 32 бит?

Я могу.
Обрабатывать переполнения 16-битного таймера программно, дополняя до 32 бит.
Go to the top of the page
 
+Quote Post
sonycman
сообщение Jun 9 2011, 08:28
Сообщение #5


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(scifi @ Jun 9 2011, 09:37) *
Я могу.
Обрабатывать переполнения 16-битного таймера программно, дополняя до 32 бит.

Можно и так, да.
Но тут столько же минусов, сколько и плюсов - экономим всего один таймер, зато получаем лишнее прерывание.

Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th July 2025 - 20:00
Рейтинг@Mail.ru


Страница сгенерированна за 0.01403 секунд с 7
ELECTRONIX ©2004-2016