|
быстрый тайминг GPIO для LPC |
|
|
|
Jan 6 2008, 20:16
|
Участник

Группа: Участник
Сообщений: 32
Регистрация: 26-11-07
Пользователь №: 32 699

|
Есть такая задача: реализовать быстрый синхронный 16-битный вывод в GPIO-порт для LPC2103 (через FIO). При этом ещё должна выполняться фоновая задача. Проблема в том, что вывод в порт необходимо делать стабильно, через равные интервалы времени, с как можно большей частотой. Скорость выполнения фоновой задачи при этом не принципиальна, но она не должна задерживать основной вывод в порт.
Первое и самое простое, что приходит на ум - использовать прерывание по таймеру для вывода в порт. Но очевидно, что максимума скорости так не добиться, хотя бы из-за избыточной работы по обслуживанию прерываний. По той же причине, видимо, не годятся и RTOS-надстройки.
Если же просто перемежать вызовы команд этих двух задач, то не понятно, как при этом обеспечить стабильный тайминг вывода в порт - ведь подсчёт тактов для пайплайна задача непростая... Есть ли какой-то инструментарий для подсчёта тактов выполнения команд на LPC? Чтобы можно было с учётом этого написать на асме код фоновой задачи так, чтобы вперемешку с ним выводить в порт данные строго каждые N тактов?
Какие ещё существуют способы решения данной задачи?
|
|
|
|
|
 |
Ответов
|
Jan 6 2008, 21:10
|
Участник

Группа: Участник
Сообщений: 32
Регистрация: 26-11-07
Пользователь №: 32 699

|
Цитата(zltigo @ Jan 6 2008, 22:45)  Конкретных способов решения абстрактной ("делать стабильно, через равные интервалы времени, с как можно большей частотой") задачи (с неназванными временами) не существует  Некоторые способы я перечислил. Меня устроит, если вывод в порт будет происходить, скажем, каждые 10 тактов. Если получится быстрее - отлично; если можно только медленнее - надо видеть, насколько. За каждый выигранный или проигранный такт я хочу побороться. Если самый лучший по скорости вывода способ будет напрямую зависеть от конкретных команд задачи (как в случае с вышеупомянутым методом интерлива кода), то, само-собой, кроме меня никто мою задачу решать не будет. Но в таком случае я хотел бы получить ответ на ранее заданный вопрос: Есть ли какой-то инструментарий для подсчёта тактов выполнения команд на LPC? Какова вообще методика расчёта таймингов, ведь кто-то наверняка уже это делал? Или всё-таки можно сделать по-другому? Цитата(zhevak @ Jan 6 2008, 22:50)  А вообще о каких скоростях вывода в порт идет речь? Т.е. Сколь раз в секунду требуется выкидывать данные. Речь идёт о попытке достижения теоретического максимума на данном железе и задаче. Т.е. порядок цифр - мегагерцы. Цитата(zhevak @ Jan 6 2008, 22:50)  Как-то давным давно у меня возникла подобная задача: что-то там делать в реальном времени. Я это "дело" навесил на обработчик прерываний от таймера. А что бы понять, сколько времени у меня реально занимает процесс, я не стал заморачиваться подсчетом тактов, а сделал по-простому. Повесить на таймер и измерять скорость осциллом - это начальный вариант для такой задачи, спасибо. Каких частот вам удалось достичь, скажем, для простого "дёргания ногой"? Как вы считаете, насколько можно превзойти этот метод?
|
|
|
|
|
Jan 6 2008, 21:46
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(ГУ-49А @ Jan 6 2008, 23:04)  вывод в порт будет происходить, скажем, каждые 10 тактов Задача для LPC2000 решения не имеет. Порядка 4 тактов только вывод через FastGPIO причем это тупая загрузка содержимого регистра по адресу содержащимуся в другом регистре. При этом нужно еще подтаскивать поток в 12 мегабайт в секунду  Ну и кто-то там еще про "фоновые задачи"  ..... Цитата Или всё-таки можно сделать по-другому? 12 МегаБайт в секунду это скорости совсем других контролеров + аппаратная поддержка для обеспечения синхронного порта. Цитата(ГУ-49А @ Jan 6 2008, 23:10)  Каких частот вам удалось достичь, скажем, для простого "дёргания ногой"? Ознакомьтесь с документацией - узнаете предел.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
Сообщений в этой теме
ГУ-49А быстрый тайминг GPIO для LPC Jan 6 2008, 20:16  rezident Цитата(ГУ-49А @ Jan 7 2008, 02:10) И... Jan 8 2008, 13:31 zhevak Цитата(ГУ-49А @ Jan 7 2008, 01:16) К... Jan 6 2008, 20:50 Rst7 ЦитатаСкоп был хороший (LeCroy) и позволял собират... Jan 6 2008, 21:01 GetSmart Думаю можно достичь скорости вывода до Fosc/25 (ме... Jan 7 2008, 09:43 ГУ-49А Цитата(zltigo @ Jan 6 2008, 23:46) Задача... Jan 7 2008, 10:25 zltigo Цитата(ГУ-49А @ Jan 7 2008, 12:25) О... Jan 7 2008, 17:12 zhevak Боюсь нарваться на скандал, но все же скажу, ибо и... Jan 7 2008, 12:46 ГУ-49А Цитата(zhevak @ Jan 7 2008, 14:46) Боюсь ... Jan 7 2008, 13:41  zhevak К сожалению, ни готового решения, ни совета я Вам ... Jan 7 2008, 14:12   ГУ-49А Цитата(zhevak @ Jan 7 2008, 16:12) К сожа... Jan 7 2008, 14:44    Alex03 Цитата(ГУ-49А @ Jan 7 2008, 19:44) Ц... Jan 8 2008, 08:20     ГУ-49А Цитата(Alex03 @ Jan 8 2008, 10:20) Дальше... Jan 8 2008, 10:52 GetSmart Цитата(ГУ-49А)Спасибо. Я готов переписать фон... Jan 7 2008, 13:37 ГУ-49А Цитата(GetSmart @ Jan 7 2008, 15:37) Я им... Jan 7 2008, 13:58 GetSmart ЦитатаИли, может, мне стоит написать такой инструм... Jan 7 2008, 13:53 GetSmart Вы бы ещё пояснили подробности такого нестандартно... Jan 7 2008, 14:06 GetSmart Цитата(ГУ-49А)Т.е. одна из сложностей задачи ... Jan 7 2008, 15:43 GetSmart Цитата(Alex03)одна и та же команда в внутреннюю RA... Jan 8 2008, 09:59 GetSmart ЦитатаВидимо, речь идёт о выводах MATx.y? К сожале... Jan 8 2008, 12:01 digital ЦитатаМожет я что-то пропустил в обсуждении, но я ... Jan 8 2008, 14:53 GetSmart Господа-товарищи!
Я тоже сначала подумал об SS... Jan 8 2008, 15:18 rezident Цитата(GetSmart @ Jan 8 2008, 20:18) макс... Jan 8 2008, 15:26 GetSmart Скорость вывода бита = 2 такта. Чтобы вывести 16 б... Jan 8 2008, 15:47 ГУ-49А Цитата(GetSmart @ Jan 8 2008, 17:47) Скор... Jan 8 2008, 19:13 GetSmart Цитата(GetSmart)Кстати, есть алгоритм, которым мож... Jan 8 2008, 18:29 GetSmart КодLDR R9,[R8] ; R8 = T0CR (иниц... Jan 8 2008, 19:57 alexander55 Вопрос к автору.
Что Вы хотите сделать ?
Варианты ... Jan 9 2008, 07:23  ГУ-49А Цитата(alexander55 @ Jan 9 2008, 09:23) В... Jan 9 2008, 18:16   alexander55 Цитата(ГУ-49А @ Jan 9 2008, 21:16) О... Jan 10 2008, 06:23 GetSmart Попытался применить код, который я тут запостил и ... Jan 13 2008, 11:41 GetSmart Попробывал применить этот алгоритм в своём генерат... Jan 21 2008, 07:23 Alex03 А если MAM=0? Jan 21 2008, 08:47 GetSmart Частота 5 МГц, PLL off, MAM=0, MAMTIM=1. Прерывани... Jan 21 2008, 10:12 GetSmart Частота 59 МГц, прерывание в RAMe, MAM = 2, MAMTIM... Jan 23 2008, 12:46 ГУ-49А Позвольте изложить некоторые результаты по открыто... Feb 18 2008, 22:42 GetSmart Конечно интересно! Думаю даже не мне одному Feb 19 2008, 04:31 alexander55 Цитата(GetSmart @ Feb 19 2008, 07:31) Кон... Feb 19 2008, 06:18 ГУ-49А Цитата(GetSmart @ Feb 19 2008, 06:31) Кон... Feb 19 2008, 09:47 GetSmart Очень даже неплохо получилось. Можно сказать что э... Feb 19 2008, 10:05 GetSmart Цитата(ГУ-49А)Что ж, давайте ещё раз напомню,... Feb 24 2008, 15:04 ГУ-49А Цитата(GetSmart @ Feb 24 2008, 17:04) Мож... Feb 24 2008, 16:02
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|