|
|
  |
SAM3U и 32 битный таймер, можно ли реализовать? |
|
|
|
Jun 8 2011, 21:42
|

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

|
Последнее время привык использовать в приложениях аппаратный 32 битный счётчик с разрешением в 1 микросекунду. На его базе очень удобно реализовать таймеры с выдержкой от единиц микросекунд до нескольких минут. На STM32F1xx приходилось использовать в цепочке два 16 битных таймера, благо есть возможность выстраивания друг за другом. На LPC17хх вообще без проблем - нативный 32 битный таймер в наличии. Вот теперь прицениваюсь к Сэмам. И что же наблюдаю? Имеем очередное чудо инженерной (плисоводской?) мысли в виде отсутствия каких либо прескалеров и навороченного блока таймеров. В мануале написано, что у нас аж 9 каналов 16 битных таймеров, тогда как регистров в наличии только на 3 Первая непонятка. Потом смотрю, вроде есть возможность заводить выход одного счётчика на вход другого, ага! Идея такая: первый таймер играет роль делителя частоты ядра в 96 МГц до 1 МГц (прескалер) -> второй выполняет роль младших 16 бит -> и третий старших - в итоге получаем 32 бита. Но для этого надо, чтобы после срабатывания функции сравнения и сброса счётчика в 0 выдавался импульс на следующее звено в цепочке, для его инкремента. Однако в мануале указана только возможность установить в 1, сбросить в 0 или переключить состояние выхода таймера. Про короткий импульс нет ни слова  Неужели всё это нагромождение таймеров не способно работать как один 32 битный свободный счётчик?  ЗЫ: ага, вроде придумал - ведь на каждый таймер мы имеем три compare регистра - А, В и С. Тогда, к примеру, в регистр А заносим значение 0xFFFF, а в регистр C - 0x0, и устанавливаем функции для А - установить выход в 1, а для С - сбросить в 0. И получаем короткий импульс при переполнении счётчика! Что скажете, уважаемые?
|
|
|
|
|
Jun 8 2011, 21:53
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(sonycman @ Jun 9 2011, 01:42)  В мануале написано, что у нас аж 9 каналов 16 битных таймеров, тогда как регистров в наличии только на 3 Первая непонятка. В мануале их 3, откуда взялось 9? Цитата(sonycman @ Jun 9 2011, 01:42)  Потом смотрю, вроде есть возможность заводить выход одного счётчика на вход другого, ага! Идея такая: первый таймер играет роль делителя частоты ядра в 96 МГц до 1 МГц (прескалер) -> второй выполняет роль младших 16 бит -> и третий старших - в итоге получаем 32 бита. Эх, и не жалко таймеров? Цитата(sonycman @ Jun 9 2011, 01:42)  Но для этого надо, чтобы после срабатывания функции сравнения и сброса счётчика в 0 выдавался импульс на следующее звено в цепочке, для его инкремента. Однако в мануале указана только возможность установить в 1, сбросить в 0 или переключить состояние выхода таймера. Про короткий импульс нет ни слова  Еще в мануале упоминаются три регистра сравнения, по каждому из которых можно что-нибудь с TIOx сделать.
|
|
|
|
|
Jun 8 2011, 22:19
|

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

|
Цитата(aaarrr @ Jun 9 2011, 01:53)  В мануале их 3, откуда взялось 9? Отсюда
Там по тексту ещё в одном месте про 9 каналов сказано. Три - это уже совсем мало. Цитата(aaarrr @ Jun 9 2011, 01:53)  Эх, и не жалко таймеров? Можете предложить другой способ получения 32 бит? Это Атмелу надо было думать, прежде чем выпускать современный контроллер с жалкими тремя 16 битными огрызками  Прескалер-то выбросили, явно намекают на использование вместо него одного из таймеров. Цитата(aaarrr @ Jun 9 2011, 01:53)  Еще в мануале упоминаются три регистра сравнения, по каждому из которых можно что-нибудь с TIOx сделать. Это я уже допёр
|
|
|
|
|
Jun 8 2011, 22:34
|
Гуру
     
Группа: Свой
Сообщений: 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 битными огрызками  Прескалер-то выбросили, явно намекают на использование вместо него одного из таймеров. Да, могли бы расширить до 32-х. Прескалера никогда и не было. Вообще, TC практически идентичен тому, что был 10 лет назад на M40800 (ну, квадратурный декодер недавно добавили). Тогда он мне представлялся довольно навороченным
|
|
|
|
|
Jun 8 2011, 23:25
|

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

|
Цитата(aaarrr @ Jun 9 2011, 02:34)  Я, если честно, слабо представляю, зачем вообще может понадобиться на уровне софта таймер с разрешением 1 мкс. Разве что в качестве performance timer'а. Для меня весьма удобно иметь класс таймеров с широкими возможностями, с обработкой практически любых желаемых временных промежутков. Всего то надо один 32 битный аппаратный таймер для этого. Цитата Вообще, TC практически идентичен тому, что был 10 лет назад на M40800 (ну, квадратурный декодер недавно добавили). Тогда он мне представлялся довольно навороченным  Да мне тоже он показался навороченным, пока разобрался, что к чему, аж голова затрещала Просто до этого не имел дела с Атмеловскими таймерами. Что интересно - на борту ведь имеются два 32 битных счётчика - RTT и RTC, и не всегда они задействованы, а точнее - вообще почти никогда. Если бы была возможность тактировать их не только от Slow Clock...
|
|
|
|
|
Jun 9 2011, 07:35
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(DmitryM @ Jun 9 2011, 09:29)  Чем не устраивает PIT??? Тем, что его там нет, наверное. Цитата(scifi @ Jun 9 2011, 09:37)  Обрабатывать переполнения 16-битного таймера программно, дополняя до 32 бит. Кстати, да. Событие редкое, раз в 65.536мс можно и отвлечься ненадолго.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|