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

 
 
 
Reply to this topicStart new topic
> AT91SAM7 допустимая частота прерываний, обработать 500000 прерываний в секунду?
Serg_Sm
сообщение Oct 4 2007, 16:42
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 183
Регистрация: 10-10-06
Из: Смоленск
Пользователь №: 21 167



На AT91SAM7X-EK взял пример с таймерами и переделал его под частоту срабатываний прерываний в 500КГц т.е. режим прерывания по сравнению (MCK=48МГц, TIMER_CLOCK1 = 24МГц, TC_RC = 47).
Максимально упростил проект - после инициализации таймера пустой бесконечный цикл и в самом прерывании инвертирование выхода. На практике (осциллографом) получается частота изменений (из длительности "0" или "1") максимум 460КГц, в среднем менее 400КГц, причем длительности импульсов "0" и "1" неодинаковые и постоянно болтаются.

Контроллер не успевает обработать прерывания или ещё есть какие-нибудь подводные камни?
И вообще можно обработать такой поток и успеть перегнать по USB?
Go to the top of the page
 
+Quote Post
Николай Z
сообщение Oct 4 2007, 19:13
Сообщение #2


Местный
***

Группа: Участник*
Сообщений: 418
Регистрация: 20-08-07
Пользователь №: 29 930



Цитата(Serg_Sm @ Oct 4 2007, 20:42) *
На AT91SAM7X-EK взял пример с таймерами и переделал его под частоту срабатываний прерываний в 500КГц т.е. режим прерывания по сравнению (MCK=48МГц, TIMER_CLOCK1 = 24МГц, TC_RC = 47).
Максимально упростил проект - после инициализации таймера пустой бесконечный цикл и в самом прерывании инвертирование выхода. На практике (осциллографом) получается частота изменений (из длительности "0" или "1") максимум 460КГц, в среднем менее 400КГц, причем длительности импульсов "0" и "1" неодинаковые и постоянно болтаются.

Контроллер не успевает обработать прерывания или ещё есть какие-нибудь подводные камни?
И вообще можно обработать такой поток и успеть перегнать по USB?


Не знаю поможет ли Вам это или нет, но на плате MCBSTR-9 (процессор STR-912F) при тактовой частоте 96 Мгц минимальный пенриод срабатывания таймера получился порядка 7-10 мсек - правда я не старался сильно оптимизировать демонстрационную задачку работы с USB...
Go to the top of the page
 
+Quote Post
_dem
сообщение Oct 5 2007, 05:52
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 263
Регистрация: 2-02-07
Из: CN, Ukraine
Пользователь №: 24 970



А "обработать такой поток" - что за поток, от внешнего устройства ?
Если да, то как этот девайс подключается (может, можно какой периферийный интерфейс приспособить, SPI там или SSC) ?
Go to the top of the page
 
+Quote Post
Николай Z
сообщение Oct 5 2007, 06:02
Сообщение #4


Местный
***

Группа: Участник*
Сообщений: 418
Регистрация: 20-08-07
Пользователь №: 29 930



Цитата(Николай Z @ Oct 4 2007, 23:13) *
Не знаю поможет ли Вам это или нет, но на плате MCBSTR-9 (процессор STR-912F) при тактовой частоте 96 Мгц минимальный пенриод срабатывания таймера получился порядка 7-10 мсек - правда я не старался сильно оптимизировать демонстрационную задачку работы с USB...


Поправка - вместо USB надлежит читать URRT...
Глюк в моске был - када вчерась писал...
Go to the top of the page
 
+Quote Post
Serg_Sm
сообщение Oct 5 2007, 09:23
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 183
Регистрация: 10-10-06
Из: Смоленск
Пользователь №: 21 167



Поток данных от внешнего устройства - асинхронный и непрерывный 512КБит/с.
Алгоритм получения данных приблизительно такой: прерывание по изменению фронта, задержка (возможно вторым таймером) для подстройки под "середину" бита, затем считывание бита и запуск таймера с частотой 512КГц, а в прерывании по таймеру считывание остальных битов. Ну и переодическое повторение подстройки частоты, а в цикле передача данных по USB (по готовности).
Но похоже придется обходные пути искать, а ПЛИС цеплять очень не хочется.

PS: Кстати даже родной USB пример данные с неплохой скоростью гоняет - на передаче из контроллера блоков по 8КБайт (запрос один пакет) получилось ~727КБайт/с. Правда больше ничего не делалось smile.gif
Go to the top of the page
 
+Quote Post
Vitaliy_ARM
сообщение Oct 5 2007, 14:37
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 509
Регистрация: 19-07-07
Из: г. Таганрог
Пользователь №: 29 246



Цитата(Serg_Sm @ Oct 5 2007, 13:23) *
Поток данных от внешнего устройства - асинхронный и непрерывный 512КБит/с.
Алгоритм получения данных приблизительно такой: прерывание по изменению фронта, задержка (возможно вторым таймером) для подстройки под "середину" бита, затем считывание бита и запуск таймера с частотой 512КГц, а в прерывании по таймеру считывание остальных битов. Ну и переодическое повторение подстройки частоты, а в цикле передача данных по USB (по готовности).
Но похоже придется обходные пути искать, а ПЛИС цеплять очень не хочется.

PS: Кстати даже родной USB пример данные с неплохой скоростью гоняет - на передаче из контроллера блоков по 8КБайт (запрос один пакет) получилось ~727КБайт/с. Правда больше ничего не делалось smile.gif


Лучше запустить на обработку какую-нибудь альтеру


--------------------
Умные речи подобны строкам, напечатанным курсивом. К. Прутков
Go to the top of the page
 
+Quote Post
_dem
сообщение Oct 8 2007, 06:54
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 263
Регистрация: 2-02-07
Из: CN, Ukraine
Пользователь №: 24 970



а нельзя попробовать прикрутить для этих целей USART c STOP BITS = 0 / NO PARITY + DMA ?

или SPI, сделав на одном внешнем элементе генератор "клока" для него ? Всяко эффективнее и точнее будет, чем пытаться софтово это делать - и ресурсы останутся для пересылки "наверх"

у вас позволительна потеря части данных на время подстройки ?

Сообщение отредактировал _dem - Oct 8 2007, 06:57
Go to the top of the page
 
+Quote Post
Serg_Sm
сообщение Oct 8 2007, 09:17
Сообщение #8


Частый гость
**

Группа: Свой
Сообщений: 183
Регистрация: 10-10-06
Из: Смоленск
Пользователь №: 21 167



Цитата(_dem @ Oct 8 2007, 10:54) *
а нельзя попробовать прикрутить для этих целей USART c STOP BITS = 0 / NO PARITY + DMA ?

или SPI, сделав на одном внешнем элементе генератор "клока" для него ? Всяко эффективнее и точнее будет, чем пытаться софтово это делать - и ресурсы останутся для пересылки "наверх"

у вас позволительна потеря части данных на время подстройки ?


Я сейчас пробую нечто подобное сделать - внешний сдвиговый регистр тактируемый от таймера 0, который (пере) запускается по внешнему прерыванию и прерывание от таймера 1 срабатывающее от 8 тактов таймера 0, в нем загружаются данные с регистра в память. В принципе контроллер такое тянет, проблема в одном - внешнее прерывание срабатывает через 1.4-1.6 микросекунды. Если время реакции уменьшить раза этак в два то должно работать.
Что касается USART - проблема будет в подстройке частоты, чую убежит/прибьется битик в поток smile.gif
Вот с SPI уже интереснее (сам об этом не подумал) - нужен только "клок" от таймера и без внешнего регистра.
К нему DMA прикручивается?

Потеря данных допустима только вначале - после поток прерываться не должен, а периодические подстройки делать все равно придется.

В FAQ прочитал, что реакция на прерывание будет быстрее в THUMB режиме, а как его установить? Если поставить в настройках проекта в IAR, то с такой прошивкой девайс не работает.
Как вообще уменьшить время реакции на прерывание?
Go to the top of the page
 
+Quote Post
_dem
сообщение Oct 8 2007, 09:59
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 263
Регистрация: 2-02-07
Из: CN, Ukraine
Пользователь №: 24 970



"...внешний сдвиговый регистр тактируемый от таймера 0..."
А какова загрузка контроллера при этом ?

К SPI DMA прикручивается.

"В FAQ прочитал, что реакция на прерывание будет быстрее в THUMB режиме, а как его установить? Если поставить в настройках проекта в IAR, то с такой прошивкой девайс не работает."

Какой у вас проект ( используется ли ОС, что взято за основу ИАР-ского проекта ) ?

Ускорить реакцию на прерывание можно, использовав FIQ
Go to the top of the page
 
+Quote Post
defunct
сообщение Oct 8 2007, 11:45
Сообщение #10


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Serg_Sm @ Oct 5 2007, 12:23) *
Что касается USART - проблема будет в подстройке частоты, чую убежит/прибьется битик в поток
Вот с SPI уже интереснее (сам об этом не подумал) - нужен только "клок" от таймера и без внешнего регистра. К нему DMA прикручивается?

прикручивается, но опять же, тут просто напрашивается решение на ПЛИСке.
Плисина принимает поток в fifo, и сигналит процу если fifo не пустой, проц забирает по стандартному SPI.
Go to the top of the page
 
+Quote Post
Serg_Sm
сообщение Oct 8 2007, 11:59
Сообщение #11


Частый гость
**

Группа: Свой
Сообщений: 183
Регистрация: 10-10-06
Из: Смоленск
Пользователь №: 21 167



Цитата(_dem @ Oct 8 2007, 13:59) *
"...внешний сдвиговый регистр тактируемый от таймера 0..."
А какова загрузка контроллера при этом ?

К SPI DMA прикручивается.

"В FAQ прочитал, что реакция на прерывание будет быстрее в THUMB режиме, а как его установить? Если поставить в настройках проекта в IAR, то с такой прошивкой девайс не работает."

Какой у вас проект ( используется ли ОС, что взято за основу ИАР-ского проекта ) ?

Ускорить реакцию на прерывание можно, использовав FIQ


Что значит загрузка контроллера? Практически получается считать данные, передать по USB и подкорректировать частоту приема внешним прерыванием. Но настоящей проверки пока не делал.
Попробую переделать под SPI (внешнего регистра все равно в наличии нет) и прогнать на реальных данных. Подстройка частоты делается нормально и с такой заторможенной реакцией на прерывание, а вот поступающие данные надо проверять.
Основа проекта - BasicUSB от Atmel + добавлены обработчики прерываний, ОС естественно нет.
Даже c FIQ как я понял существенно ускорить реакцию на прерывание не получится (из FAQ).
Не посоветуете пример с SPI и DMA? (DMA в контроллерах еще не доводилось использовать).

to defunct: насчет ПЛИС это понятно, но требуется решение подешевле и попроще.
Go to the top of the page
 
+Quote Post
_dem
сообщение Oct 8 2007, 14:25
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 263
Регистрация: 2-02-07
Из: CN, Ukraine
Пользователь №: 24 970



пример поищите в форуме, очень неоднократно обсасывалось - практически у каждого, кто запускает SPI на этом чипе, возникает масса вопросов. Если все же не найдете, отпишитесь - завтра выкушу из проекта и поделюсь, сегодня уже просто не успею
Go to the top of the page
 
+Quote Post
Serg_Sm
сообщение Oct 23 2007, 12:09
Сообщение #13


Частый гость
**

Группа: Свой
Сообщений: 183
Регистрация: 10-10-06
Из: Смоленск
Пользователь №: 21 167



Если кому интересно, то я доделал данный проект. Правда с прерываниями не получилось - очень тормознутая система (по некоторым замерам до 12 микросекунд). Но оказалось, что средств контроллера вполне хватает, чтобы реализовать прием 512К (возможно и 2М вытянет) потока.
Коротко о реализации: данные принимаются по SPI с использованием PDC, а вот тактирует SPI внутренний таймер в режиме WAVESEL, со сбросом по внешнему событию (для подстройки такта). Ну и передача по USB на хост в главном цикле. В итоге только одно прерывание на перепрограммирование DMA контроллера.

Так что ПЛИС не понадобилась smile.gif
Go to the top of the page
 
+Quote Post

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

 


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


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