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

 
 
3 страниц V  < 1 2 3 >  
Reply to this topicStart new topic
> быстрый тайминг GPIO для LPC
ГУ-49А
сообщение Jan 7 2008, 14:44
Сообщение #16


Участник
*

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



Цитата(zhevak @ Jan 7 2008, 16:12) *
К сожалению, ни готового решения, ни совета я Вам дать не могу.
Выше люди уже предлагали использовать FIQ. Почему не проходит этот вариант?
...
Удачи!

Спасибо. Этот вариант "проходит", просто не является оптимальным по максимальной частоте вывода в порт по сравнению с его потенциальной альтернативой (интерлив кода). Моя задача скорее R&D'шная и не требует наискорейшей реализации. Поэтому я могу себе позволить "семь раз отмерить".

Цитата(GetSmart @ Jan 7 2008, 16:06) *
У LPC и SAM7 одинаковое ядро ARM7TDMI-S, но конвейер разный. Так что всё это будет конкретно привязано к конкретному процессору. Даже к конкретной его ревизии (ревизиям!). Так как никто не обещал, что улучшений в сторону ускорения работы процессора в новых ревизиях не предвидится.

Где в документации, в таком случае, искать такты для нужного конвейера нужной ревизии LPC2103? Я знаю только про общий армовский Instruction Set... Существующие счётчики тактов тоже далеко не точны, получается? Т.е. одна из сложностей задачи - нет чёткой информации о таймингах конкретных конвейеров?

Цитата(GetSmart @ Jan 7 2008, 16:06) *
Вы бы ещё пояснили подробности такого нестандартного вывода из процессора. Что за данные и в какое устройство перегоняются? Это связано с управлением светодиодами?

Данные идут в R-2R, т.е. такой себе дешевый тупой аналог DDS.
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jan 7 2008, 15:43
Сообщение #17


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(ГУ-49А)
Т.е. одна из сложностей задачи - нет чёткой информации о таймингах конкретных конвейеров?
О-да! В принципе это можно сделать ручками. В этом плане ARM7 лучше чем суперскалярные процы с кэшами. В них вообще предсказывать количество тактов дело неблагодарное. Я например уже исследовал скорости выполнения некоторых команд на LPC2132. Команды и их параметры делятся на классы и потом у каждого сочетания этих двух-трёх классов на реальном железе определяется кол-во тактов. А вот подозрения об ускорении новых ревизий у меня возникли когда давно я измерял скорость вывода в порт на LPC2138 rev- получил 8 тактов, потом ещё мерил на процах LPC2132 revC и получил 7 тактов. Возможно я ошибся, но все-таки никто ничего не гарантировал. Предполагаю только что конвейеры у одинаковых ревизий процов, появившихся более-менее в одно время должны быть одинаковыми.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jan 7 2008, 17:12
Сообщение #18


Гуру
******

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



Цитата(ГУ-49А @ Jan 7 2008, 12:25) *
Обратите внимание, что вопрос касался выдачи в порт по таймеру, причём на фоне другой задачи.

Обратите внимание, что количество тактов для входа в обработчик прерывания (в частности в FIC) документировано (контроллер прерываний используется от ARM Company, описание соответственно...). Процедура сброса контроллера прерывания и длительность процедуры возврата тоже не является секретом фирмы. Затраты на махание ножкой - тоже известны. Длительность прерываемых команд - зависит от того, какие лично Вы собираетесь использовать. Вопрос - чего Вам не хватает для ответа на вопрос?


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Alex03
сообщение Jan 8 2008, 08:20
Сообщение #19


Местный
***

Группа: Свой
Сообщений: 359
Регистрация: 9-12-05
Пользователь №: 12 034



Цитата(ГУ-49А @ Jan 7 2008, 19:44) *
Цитата(GetSmart @ Jan 7 2008, 19:06) *
У LPC и SAM7 одинаковое ядро ARM7TDMI-S, но конвейер разный. Так что всё это будет конкретно привязано к конкретному процессору. Даже к конкретной его ревизии (ревизиям!). Так как никто не обещал, что улучшений в сторону ускорения работы процессора в новых ревизиях не предвидится.
Где в документации, в таком случае, искать такты для нужного конвейера нужной ревизии LPC2103? Я знаю только про общий армовский Instruction Set... Существующие счётчики тактов тоже далеко не точны, получается? Т.е. одна из сложностей задачи - нет чёткой информации о таймингах конкретных конвейеров?

ИМХО вы не по делу "трогаете" конвейер(ы) ядра, думаю что во всех чипах на ARM7TDMI-S ядро одинаковое. Длительности исполнения команд ядром расписаны АРМ-ом, НО....
Дальше в дело вмешивается некий контроллер памяти (внешний для ядра), именно он может вставлять вэйтстейты, именно он может иметь возможность отложенной записи (некоторой глубины и/или разной по разным адресам), именно он может разбивать одно обращение к памяти на несколько (в случае невыровненных данных и/или менее разрядной памяти).

И в обшем случае невозможно определить время выполнения конкретной команды на конкретном камне не зная предистории выполнения других команд (тут влияет как состояние самого ядра, так и состояние внешней по отношению к ядру обвязке), не зная "а по какому адресу эта команда полезет в память" (одна и та же команда в внутреннюю RAM пишет за такт, а в порт в/в за N тактов, а в внешннюю RAM за M тактов), и т.д.

в ряде случаев псевдокод
Код
вывод слова в порт ввода вывода
вывод слова в порт ввода вывода

будет выполняться за тоже время что и
Код
вывод слова в порт ввода вывода
одна или несколько команд (типа пересылки регистр/регистр)
вывод слова в порт ввода вывода
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jan 8 2008, 09:59
Сообщение #20


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(Alex03)
одна и та же команда в внутреннюю RAM пишет за такт
За 2 такта.
Код
вывод слова в порт ввода вывода
одна или несколько команд (типа пересылки регистр/регистр)
вывод слова в порт ввода вывода
Это было бы в идеально сделанном проце, но в LPC это скорее всего не так. Кажется я это проверял. Однако всю малину могут испортить команды с неопределённым во время компиляции/конвертации количеством циклов. Вообще, подводных камней в конвертере будет много, но идея всё-равно интересная. Если б мне на работе это потребовалось сделать, я бы с удовольствием занялся.

Кстати, есть алгоритм, которым можно достичь супер-пиковой скорости вывода до Fosc/2. Однако в нём джиттер будет пипец как гадить. Однако и его можно полностью подавить. Короче, мисль человеческая безгранична smile.gif

Пока неизвестны характеристики выходного сигнала с R-2R ничего конкретного предложить не могу. Да и алгоритм супер секретный smile.gif


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
ГУ-49А
сообщение Jan 8 2008, 10:52
Сообщение #21


Участник
*

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



Цитата(Alex03 @ Jan 8 2008, 10:20) *
Дальше в дело вмешивается некий контроллер памяти (внешний для ядра), именно он может вставлять вэйтстейты, именно он может иметь возможность отложенной записи (некоторой глубины и/или разной по разным адресам), именно он может разбивать одно обращение к памяти на несколько (в случае невыровненных данных и/или менее разрядной памяти). ...

В конкретном случае с LPC2103 мы можем допустить, что подобным образом может "проказничать" MAM, ведь внешнего RAM'а нет, да и внутренний всего 1 банк в 8 кб? И тогда, отключив MAM, выполняя код из RAM и читая/записывая короткими словами, можно побороть эту проблему?

Цитата(GetSmart @ Jan 8 2008, 11:59) *
Кстати, есть алгоритм, которым можно достичь супер-пиковой скорости вывода до Fosc/2. Однако в нём джиттер будет пипец как гадить. Однако и его можно полностью подавить. Короче, мисль человеческая безгранична smile.gif

Видимо, речь идёт о выводах MATx.y? К сожалению, этот метод не подходит, нужен честный вывод с 12-битным квантованием. Что касается алгоритма вывода, то есть область памяти с данными, их-то и надо слать в порт (16-битный, нужны 12 бит). Всё просто, как видите, за исключением маниакального желания обогнать способ вывода по прерыванию таймера.
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jan 8 2008, 12:01
Сообщение #22


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата
Видимо, речь идёт о выводах MATx.y? К сожалению, этот метод не подходит, нужен честный вывод с 12-битным квантованием.
Ну вообще-то речь идёт о честном 30-битном квантовании, но нет так нет. Всё-равно никто его не знает, иначе уже сказали бы.
Цитата
В конкретном случае с LPC2103 мы можем допустить, что подобным образом может "проказничать" MAM, ведь внешнего RAM'а нет, да и внутренний всего 1 банк в 8 кб? И тогда, отключив MAM, выполняя код из RAM и читая/записывая короткими словами, можно побороть эту проблему?
Ну да, так чуть-чуть можно ускорить прогу т.к. после смены PC меньше тактов ожидания будет теряться, однако LPC хорош тем, что он даже из внутреннего флэша исполняет большинство команд за такт. Экономия будет только на переходах и на чтении констант из флэш. Наверное это действительно контроллер памяти и внутренних шин AHB и VPB вносят лишние циклы ожидания.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
rezident
сообщение Jan 8 2008, 13:31
Сообщение #23


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(ГУ-49А @ Jan 7 2008, 02:10) *
Или всё-таки можно сделать по-другому?
Может я что-то пропустил в обсуждении, но я бы реализовал такую задачу на стандартном порту SSC или SPI, дополнив ARM десериализатором на любой мелкой ПЛИС. При использовании буферизации потока (DMA) и синхронизации вывода (а SSC и SPI и так синхронные интерфейсы) джиттер будет минимальным. Ну и для фоновой задачи в 16-раз больше времени будет оставаться.
P.S. Извиняюсь, если не совсем в тему.
Go to the top of the page
 
+Quote Post
digital
сообщение Jan 8 2008, 14:53
Сообщение #24


Местный
***

Группа: Свой
Сообщений: 229
Регистрация: 3-02-06
Из: Санкт-Петербург
Пользователь №: 13 974



Цитата
Может я что-то пропустил в обсуждении, но я бы реализовал такую задачу на стандартном порту SSC или SPI, дополнив ARM десериализатором на любой мелкой ПЛИС.

Можно воспользоваться готовой микросхемой parallel<>SPI например MCP23S17 (Microchip) 16бит скорость 10мбит/сек
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jan 8 2008, 15:18
Сообщение #25


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Господа-товарищи!
Я тоже сначала подумал об SSP, но даже если он был бы в LPC2103, то максимально возможная скорость вывода на нём равна Fosc/32, что меньше чем в простейшей проге с использованием FIQ, хотя и без джиттера. Да ещё и схема снаружи нужна.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
rezident
сообщение Jan 8 2008, 15:26
Сообщение #26


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(GetSmart @ Jan 8 2008, 20:18) *
максимально возможная скорость вывода на нём равна Fosc/32
В любом режиме или только в режиме мастера с тактированием изнутри кристалла?
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jan 8 2008, 15:47
Сообщение #27


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Скорость вывода бита = 2 такта. Чтобы вывести 16 бит потратится 32 такта. Это в самом-самом идеальном случае. У меня под рукой нет мануала на LPC2103. Короче, если бы в 2103-ем был SSP как в 213х-ом.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jan 8 2008, 18:29
Сообщение #28


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(GetSmart)
Кстати, есть алгоритм, которым можно достичь супер-пиковой скорости вывода до Fosc/2. Однако в нём джиттер будет пипец как гадить. Однако и его можно полностью подавить. Короче, мисль человеческая безгранична smile.gif

Пока неизвестны характеристики выходного сигнала с R-2R ничего конкретного предложить не могу. Да и алгоритм супер секретный smile.gif
Попытался накидать прогу. Оказывается для данного применения мой алгоритм не подходит. Жаль. Он может увеличить амплитудное разрешение, а не временное.

Могу только предложить алгоритм полного избавления от джиттера во время FIQ в ущерб скорости вывода. Возможно скорость упадёт до Fosc/32.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
ГУ-49А
сообщение Jan 8 2008, 19:13
Сообщение #29


Участник
*

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



Цитата(GetSmart @ Jan 8 2008, 17:47) *
Скорость вывода бита = 2 такта. Чтобы вывести 16 бит потратится 32 такта. Это в самом-самом идеальном случае. У меня под рукой нет мануала на LPC2103. Короче, если бы в 2103-ем был SSP как в 213х-ом.

В 2103-м на SSP тоже нельзя добиться нужной скорости, это точно. К тому же, есть неприятная errata на этот случай, можно нарваться: "Initial data bits/clocks of the SSP transmission are shorter than subsequent pulses at higher frequencies. ... At high SSP frequencies, it is found that the first four pulses are shorter than the subsequent pulses.".

Цитата(GetSmart @ Jan 8 2008, 20:29) *
Могу только предложить алгоритм полного избавления от джиттера во время FIQ в ущерб скорости вывода. Возможно скорость упадёт до Fosc/32.

С интересом выслушаю ваши предложения...
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jan 8 2008, 19:57
Сообщение #30


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Код
LDR  R9,[R8]  ; R8 = T0CR (инициализируется во время LowLevelInit)
AND  R9,R9,#7 ; с небольшим риском эту команду можно убрать
ADD  R15,R15,R9
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
Я точно не анализировал, но может быть этот алгоритм уменьшит скорость в два раза.

кол-во NOPов тоже нужно подобрать получше. Вобщем я обрисовал только идею. Возможно этот пример нужно немного доработать.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post

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

 


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


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