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

 
 
 
Reply to this topicStart new topic
> 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
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
aaarrr
сообщение Jun 8 2011, 22:34
Сообщение #4


Гуру
******

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



Цитата(sonycman @ Jun 9 2011, 02:19) *
Отсюда
Там по тексту ещё в одном месте про 9 каналов сказано.
Три - это уже совсем мало.

Выдали желаемое за действительное. На самом деле их три, разумеется. И не сказать, что этого мало.

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

Я, если честно, слабо представляю, зачем вообще может понадобиться на уровне софта таймер с разрешением 1 мкс. Разве что в качестве performance timer'а.
Можно использовать входную частоту MCK/128, если забить на привязку 1 тик = 1 мкс.

Цитата(sonycman @ Jun 9 2011, 02:19) *
Это Атмелу надо было думать, прежде чем выпускать современный контроллер с жалкими тремя 16 битными огрызками sm.gif
Прескалер-то выбросили, явно намекают на использование вместо него одного из таймеров.

Да, могли бы расширить до 32-х. Прескалера никогда и не было.

Вообще, TC практически идентичен тому, что был 10 лет назад на M40800 (ну, квадратурный декодер недавно добавили).
Тогда он мне представлялся довольно навороченным sm.gif
Go to the top of the page
 
+Quote Post
sonycman
сообщение Jun 8 2011, 23:25
Сообщение #5


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

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



Цитата(aaarrr @ Jun 9 2011, 02:34) *
Я, если честно, слабо представляю, зачем вообще может понадобиться на уровне софта таймер с разрешением 1 мкс. Разве что в качестве performance timer'а.

Для меня весьма удобно иметь класс таймеров с широкими возможностями, с обработкой практически любых желаемых временных промежутков.
Всего то надо один 32 битный аппаратный таймер для этого.

Цитата
Вообще, TC практически идентичен тому, что был 10 лет назад на M40800 (ну, квадратурный декодер недавно добавили).
Тогда он мне представлялся довольно навороченным sm.gif

Да мне тоже он показался навороченным, пока разобрался, что к чему, аж голова затрещала biggrin.gif
Просто до этого не имел дела с Атмеловскими таймерами.

Что интересно - на борту ведь имеются два 32 битных счётчика - RTT и RTC, и не всегда они задействованы, а точнее - вообще почти никогда.
Если бы была возможность тактировать их не только от Slow Clock... sad.gif
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jun 8 2011, 23:38
Сообщение #6


Гуру
******

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



Цитата(sonycman @ Jun 9 2011, 03:25) *
Что интересно - на борту ведь имеются два 32 битных счётчика - RTT и RTC, и не всегда они задействованы, а точнее - вообще почти никогда.
Если бы была возможность тактировать их не только от Slow Clock... sad.gif

Традиции-с. RTT - вообще весьма невнятная вещь, использовать можно только как источник alarm'а. Но упорно перетаскивают его из кристалла в кристалл.
Go to the top of the page
 
+Quote Post
DmitryM
сообщение Jun 9 2011, 05:29
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 583
Регистрация: 7-06-06
Из: Таганрог
Пользователь №: 17 840



Цитата(sonycman @ Jun 9 2011, 03:25) *
Для меня весьма удобно иметь класс таймеров с широкими возможностями, с обработкой практически любых желаемых временных промежутков.
Всего то надо один 32 битный аппаратный таймер для этого.

Чем не устраивает PIT??? Частота MCLK, предделитель есть, настройте на 1мкс.
Go to the top of the page
 
+Quote Post
scifi
сообщение Jun 9 2011, 05:37
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 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
aaarrr
сообщение Jun 9 2011, 07:35
Сообщение #9


Гуру
******

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



Цитата(DmitryM @ Jun 9 2011, 09:29) *
Чем не устраивает PIT???

Тем, что его там нет, наверное.

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

Кстати, да. Событие редкое, раз в 65.536мс можно и отвлечься ненадолго.
Go to the top of the page
 
+Quote Post
sonycman
сообщение Jun 9 2011, 08:28
Сообщение #10


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

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



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

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

Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jun 9 2011, 08:38
Сообщение #11


Гуру
******

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



Цитата(sonycman @ Jun 9 2011, 12:28) *
Но тут столько же минусов, сколько и плюсов - экономим всего один таймер, зато получаем лишнее прерывание.

Это, знаете ли, как посмотреть: экономим целый таймер и получаем редкое и короткое прерывание. Три - это уже совсем мало, не так ли? wink.gif
Go to the top of the page
 
+Quote Post

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

 


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


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