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

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

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

Знающий
   
Группа: Свой
Сообщений: 723
Регистрация: 29-08-05
Из: Березовский
Пользователь №: 8 065

|
Боюсь нарваться на скандал, но все же скажу, ибо истина дороже синяков. Уважаемый, если у Вас стали возникать такие вопросы (типа "повставлять NOPы для выравнивания скоростей"), то мне кажется Вы на ложном пути. Вам нужно либо взять проц по-быстрее, либо в корне пересмотреть парадигму построения вашей системы. При Вашем подходе малейшее отклонение в сторону дискредитирует Вашу систему. И Вы будете вынуждены начинать все сначала. На фоне рилтайм-процессов, у системы совсем нет запаса по выч. мощности. Опасная игра, однако! Если у Вас так жестко с реальным временем, то, будь я на Вашем месте, я бы наверно отказался бы от фоновых процессов совсем. Вынес бы их на другой микроконтроллер. (Не зная точно задачу, можно так-акого насоветовать!...  ) Хотя, я вот сейчас подумал, что наверное Вы сделали действие с точностью до наоборот: сначала прикупили железо, а сейчас думаете, как из него выжать по максимуму. От сюда и пошли Ваши проблемы.
--------------------
Хочешь рассмешить Бога -- расскажи ему о своих планах!
|
|
|
|
|
Jan 7 2008, 13:41
|
Участник

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

|
Цитата(zhevak @ Jan 7 2008, 14:46)  Боюсь нарваться на скандал, но все же скажу, ибо истина дороже синяков. ...сейчас думаете, как из него выжать по максимуму. От сюда и пошли Ваши проблемы. Вы совершенно правы. Речь идёт о том, чтобы решить эту задачу на уже существующем железе, и при том, что, очевидно, существуют более подходящие для этого аппаратные решения. Большинство концептуальных недостатков подобной реализации мне, увы, известны, и я благодарен вам за понимание тех трудностей, с которыми я столкнулся. И задачка эта, мне кажется, по-своему интересна, хоть и в таком извращённом виде. Если готового инструментария для подгонки тактов нет, то посоветуйте, хотя бы, хороший инструментарий для подсчёта тактов для команд написанной программы, без необходимости её компиляции и пошаговой прогонки. Или, может, мне стоит написать такой инструментарий самому?
|
|
|
|
|
Jan 7 2008, 14:12
|

Знающий
   
Группа: Свой
Сообщений: 723
Регистрация: 29-08-05
Из: Березовский
Пользователь №: 8 065

|
К сожалению, ни готового решения, ни совета я Вам дать не могу.
Выше люди уже предлагали использовать FIQ. Почему не проходит этот вариант?
Вы уже почти сутки пытаетесь теоретически определить способность системы решать Вашу задачу. Думаю, за сутки можно было одновременно и на форуме поговорить со спецами и накидать пилот-проектик для FIQ. Посмотреть осциллографом скорости, оценить джиттер. Т.е. опробовать идею. Джиттер (дрожжание) обязательно будет, т.к. в системе присутствуют модуль MAM, система не мгновенно отрабатывет прерывание, ... да, много, много всего может "случится между ложкой и ртом".
Да, поможет Вам практика! Сотня-другая циклов стирания-программирования не сильно износят ресурс микроконтроллера. Зато Вы четко будете ориентироваться в том, что Вы делаете, и в каком направлении Вам "пилить" дальше.
Удачи!
--------------------
Хочешь рассмешить Бога -- расскажи ему о своих планах!
|
|
|
|
Сообщений в этой теме
ГУ-49А быстрый тайминг GPIO для LPC Jan 6 2008, 20:16 zltigo Цитата(ГУ-49А @ Jan 6 2008, 22:16) К... Jan 6 2008, 20:45 ГУ-49А Цитата(zltigo @ Jan 6 2008, 22:45) Конкре... Jan 6 2008, 21:10  zltigo Цитата(ГУ-49А @ Jan 6 2008, 23:04) в... Jan 6 2008, 21:46  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   ГУ-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
|
|
|