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

 
 
> Эффективность DMA в SAM7, Выделено из "ARM много,..."
Proton
сообщение Sep 27 2008, 14:36
Сообщение #1


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

Группа: Свой
Сообщений: 185
Регистрация: 3-08-05
Из: Новосибирск
Пользователь №: 7 334



В своё время стоял перед выбором между SAM7 и LPC, решающим стало наличие DMA у SAM7. До этого работал с DSP и уже с трудом представляю как без него(DMA) обходиться.


--------------------
Всяк хорошая мысля к нам приходит опосля.
Go to the top of the page
 
+Quote Post
7 страниц V   1 2 3 > »   
Start new topic
Ответов (1 - 96)
zltigo
сообщение Sep 27 2008, 15:14
Сообщение #2


Гуру
******

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



Цитата(Proton @ Sep 27 2008, 16:36) *
решающим стало наличие DMA у SAM7.

почти нахрен не нужного при отсутствии у SAM7 кэшей, отдельных шин, банков памяти и неймановской архитектуре - пока DMA работает - процессор стоит. Практически голый маркетинговый ход для развода ....
У LPC DMA наряду с FIFO присутствует в более современных LPC214/23/24/17, где появилось две периферийных шины или матрица с отдельными банками памяти - вот тут уже DMA во всей красе эффективно работает в определенных условиях.
Цитата
До этого работал с DSP и уже с трудом представляю как без него(DMA) обходиться.

smile.gif ну очень необходимая для SAM7 приблуда - стоящее колом ядро не имеющее доступа ни к данным ни к командам во время работы DMA захватившего единственную шину. Когда, например, DMA в сходой ситуации используется например, MSP430 для снижения энергопотребления это понятно...
Оно, конечно, лучше такое DMA, чем совсем ничего, но в большинстве случаев на простеньких ARM7 уровня старых LPC21/22 и нынешних SAM7 банальное FIFO эффективнее работать позволяет.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 27 2008, 17:30
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(zltigo @ Sep 27 2008, 19:14) *
почти нахрен не нужного при отсутствии у SAM7 кэшей, отдельных шин, банков памяти и неймановской архитектуре - пока DMA работает - процессор стоит. Практически голый маркетинговый ход для развода ....


Цитата(vik0 @ Sep 27 2008, 19:22) *
DMA в любом завалящем DSP и в SAM7, это "две большие разницы". В SAM7 - это чистой воды маркетинг. sad.gif


Господа! Ну не может DMA, обслуживающий даже несколько потоков на пару десятков мегабит (что для ARM7 скорее исключение) "поставить колом" ядро. Не может.
Если не верите, то возьмите калькулятор и посчитайте потоки.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 27 2008, 17:40
Сообщение #4


Гуру
******

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



Цитата(aaarrr @ Sep 27 2008, 19:30) *
Ну не может DMA, обслуживающий даже несколько потоков на пару десятков мегабит (что для ARM7 скорее исключение) "поставить колом" ядро. Не может.

Я не говорил, что ядро SAM7 все время стоит колом - только во время работы DMA, как только закончит выполнять текущую команду. А уж сколько там DMA грузят это дело второе. Суть в том, что паралельно с ядром они у SAM7 не фурычат и соответственно радостного эффекта аля-пентиум, когда ядро работает с многомегабайтовыми и многоуровневыми кешами пока DMA льет чего-то в память нет. У современных LPC, а не 4-5 летней давности LPC210x/211x/22xx при наличии нескольких шин и банков DMA появилось и РЕАЛЬНО ЭФФЕКТИВНО РАБОТАЕТ. В отличии от любых SAM7. При этом у всех LPC есть хотя-бы четырех/восьми словная предвыборка команд из 128bit Flash. Предмета для обсуждения выбора по критерию DMA просто нет. Лет пять назад в эпоху LPC210x и LPC211x проблема выбора действительно в общем-то по некоторым вторичным параметрам стояла - сам до последнего момента выбирал с чего начать LPC2000/SAM7.. Теперь не стоит. Atmel на данный момент лидер в ARM9 c внешней шиной, но не в ARM7. Тему ARM7 закрыл NXP. Сейчас еще добьет их своими pin-to-pin совмстимыми LPC1700, в следующем году мелкие LPC1300 и.... и хоть и запоздало, глядя с моей колокольни smile.gif, в этом и следующем году развернет наступление на ARM9..


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 27 2008, 18:03
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(zltigo @ Sep 27 2008, 21:40) *
Я не говорил, что ядро SAM7 все время стоит колом - только во время работы DMA, как только закончит выполнять текущую команду. А уж сколько там DMA грузят это дело второе.

Нет, не второе. Или для Вас является критичным замедление выполнения программы на 0.5%?
PDC предназначен для обслуживания медленной периферии, и с этой задачей справляется отлично. Для скоростных - Ethernet, LCDC - есть свои DMA с FIFO.
Go to the top of the page
 
+Quote Post
injen-d
сообщение Sep 27 2008, 18:08
Сообщение #6


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

Группа: Свой
Сообщений: 91
Регистрация: 10-10-07
Из: Воронежа
Пользователь №: 31 250



Цитата
ну очень необходимая для SAM7 приблуда - стоящее колом ядро не имеющее доступа ни к данным ни к командам во время работы DMA захватившего единственную шину.


Цитата
DMA в любом завалящем DSP и в SAM7, это "две большие разницы". В SAM7 - это чистой воды маркетинг.


Абсолютно не согласен на счет бесполезности.
Мне, например, на данный момент необходимо принимать и передавать пакеты по UART'у со скоростью 500 кбит/с, максимальная длинна пакета 256 байт. По второму байту пакета определяю оставшееся кол-во байт в пакете и "заряжаю" на него DMA. при отправке все еще проще. Так вот, вопрос - 256 входов в прерывание для обработки одного пакета лучше чем 2 ? При передаче и того проще.
На этом фоне работают прерывания от PIO(примерно от 16 ног порта), PIT, TC1, SPI, UART1, и DMA сдесь как нельзя кстати.
Не, ну если передавать изредка по одному, два байта - вопросов нет - бесполезная штука. Если скорость обмена с выбранным модулем сопоставима со скоростью работы ядра, то так же эффективность DMA у SAM7 стремится к нулю из-за постоянного захвата шины. Но это два крайних варианта.
Ну да, есть у SAM7 недостатки, как и у других, и во многом он проигрывает более новым LPC,
но заявления по поводу полной бесполезности DMA у SAM7, на мой взгляд, чистая религия.


--------------------
- Бендер, ты же робот, зачем тебе пить пиво?
- Незачем! Я могу бросить в любой момент!
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 27 2008, 18:32
Сообщение #7


Гуру
******

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



Цитата(Dog Pawlowa @ Sep 27 2008, 19:53) *
Первое семейство намного дружественнее. Библиотеки от производителя.
Конечно, полно глюков в старых ревизиях, но вышли новые кристаллы. Это как у всех smile.gif

Да нет, не как у всех sad.gif - c STM32 работаю. Глюков чрезмерно много - в стиле ST sad.gif (традиция в ряду STR7/9xx)и само ядро V1 с багами, кривыми усеченными "библиотеками" латается отсутствие внятной документации sad.gif и неполность erratа... Но с точки зрения использования малоногих и шустрых (кому еще и малопотребляющих) чипов альтернатив им нет. Буду использовать, ибо LPC1300 уже не дождусь, а LPC210x не вытянут желаемого. Если и начинать с Cortex-M3, то уже почти доступны LPC1700. Там и ядро V2, и периферия от LPC23xx отлаженная и цену на ..дцать процентов меньше обещают.
А вот LPC24xx действительно вылизанная до блеска серия. Очень порадовала.

Цитата(injen-d @ Sep 27 2008, 20:08) *
Ну да, есть у SAM7 недостатки, как и у других, и во многом он проигрывает более новым LPC,

Во всем sad.gif
Цитата
но заявления по поводу полной бесполезности DMA у SAM7, на мой взгляд, чистая религия.

Если быть точным, то я писал:
Цитата
Оно, конечно, лучше такое DMA, чем совсем ничего, но в большинстве случаев на простеньких ARM7 уровня старых LPC21/22 и нынешних SAM7 банальное FIFO эффективнее работать позволяет.

Вы мне пытаетесь объяснить, что без DMA совсем труба? - согласен. Для помянутого тупого заглатывания по UART 256 байтовых пакетов формально DMA типа меньше ресурсов потребит, нежели 16байтовое FIFO у LPC, только вот что-то я никогда не писал алгоритмов по заглатыванию 256 байт всякой всячины и возможного мусора и последующем ДОЛГОМ в нем копании. Всякие байт ориентированные интерфейсы я лично всегда в потоке по байтам разбираю (FIFO пики сглаживает)- это быстрее, чем постфактум мусор повторно разгребать. Как только у LPC появились пакетные интерфейсы, у LPC появились и ГРАМОТНО огранизованные DMA в дополнение к FIFO. До этого они просто при наличии FIFO бесполезны для простых ARM7 практически всегда.

Цитата(aaarrr @ Sep 27 2008, 20:03) *
PDC предназначен для обслуживания медленной периферии, и с этой задачей справляется отлично.

Столь-же отлично, как и FIFO у младших LPC. Посему вопрос "ах как можно жить без DMA" просто не стоит. А при наличии у свежих LPC и того и другого, да и еще архитектурно правильно организованного и вообще не обсуждается smile.gif


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Sep 27 2008, 18:35
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(zltigo @ Sep 27 2008, 21:26) *
Всякие байт ориентированные интерфейсы я лично всегда в потоке по байтам разбираю - это быстрее, чем постфактум мусор повторно разгребать. Это эффективнее.

Этот подход не всегда соответствует библии в виде семи заповедей уровней. В некоторых стандартных протоколах требуется вначале проверить нижний уровень (например сеансовый) - соответственно принять весь пакет, и потом несколько раз пройтись по нему, проверяя по очереди разделители, поля, диапазоны и проч.
И только попробуй ответить ответить ошибкой на высший уровень, если есть ошибка в нижнем!


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 27 2008, 18:50
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(zltigo @ Sep 27 2008, 22:32) *
Во всем sad.gif

Не во всем: SSP проигрывает атмеловскому SSC. И UART'ы хуже.

Цитата(zltigo @ Sep 27 2008, 22:32) *
...только вот что-то я никогда не писал алгоритмов по заглатыванию 256 байт всякой всячины и возможного мусора и последующем ДОЛГОМ в нем копании. Всякие байт ориентированные интерфейсы я лично всегда в потоке по байтам разбираю - это быстрее, чем постфактум мусор повторно разгребать. Это эффективнее.

Это эффективнее только в случае отсутствия DMA. В противном случае я лучше спокойно разберу данные в нужное мне время, а не в прерывании.

Цитата(zltigo @ Sep 27 2008, 22:32) *
Столь-же отлично, как и FIFO у младших LPC. Посему вопрос "ах как можно жить без DMA" просто не стоит. А при наличии у свежих LPC и того и другого, да и еще архитектурно правильно организованного и вообще не обсуждается smile.gif

У меня вот регулярно в задачах нужно формировать и принимать ~20Мбит потоки через SPI и SSC. На младших LPC я бы просто удавился, вопрос об использовании старших сейчас пытаюсь для себя решить.
Go to the top of the page
 
+Quote Post
zhevak
сообщение Sep 27 2008, 19:07
Сообщение #10


Знающий
****

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



Цитата(zltigo @ Sep 28 2008, 00:32) *
Для помянутого тупого заглатывания по UART 256 байтовых пакетов формально DMA типа меньше ресурсов потребит, нежели 16байтовое FIFO у LPC, только вот что-то я никогда не писал алгоритмов по заглатыванию 256 байт всякой всячины и возможного мусора и последующем ДОЛГОМ в нем копании. Всякие байт ориентированные интерфейсы я лично всегда в потоке по байтам разбираю (FIFO пики сглаживает)- это быстрее, чем постфактум мусор повторно разгребать.


Извините за то, что увожу дискуссию в сторону. (Надеюсь, потом веренемся обратно.)
По высказанной методике у меня имеется вопрос к уважаемему zltigo. При всем своем почтении, я отнюдь никак не хочу загнать zltigo в угол. Тем более при народно. Тем более, что это бесполезно. Это чисто вопрос, без признаков какой-либо борьбы.


Описываю ситуацию.

Предположим, имеются два устройства, которые одно другому пересылают поток какой-то инфы. Поток достаточно большой. Допустим, пересылаем какой-то файл. (Хотя изначально, файл -- это и есть поток батов. Ну разве что еще поименованный и обремененный еще кое-какими аттрибутами. Не важно.)

Допустим, линия связи работает на пределе своих возможностей (Дальность умноженная на Скорость), и поэтому иногда случаются искажения при передаче инфы. Разумеется, для таких видов передач удобнее будет выбрать не по-байтовый режим пересылки, а блочный. Т.е. группируем байты в кучку (пакет), снабжаем CRC и пересылаем.

На другом конце мы не можем (по понятным причинам) начать обработку принятого пакета до тех пор, пока не убедимься в валидности пакета. Иначе говоря, прежде чем с пакетом работать, нам по любому придется его принимать целиком в память.

Вопрос.

- Означает ли описанная выше ситуация, что прием пакета -- это есть "заглатывание всякой всячины и возможного мусора" ?
- Пожалуйста, покажите, как бы Вы "всегда в потоке по байтам разбирали" и обрабатывали принятую информацию?
- Возможно, у Вас есть другое видение ситуации, которое я не улавливаю. Как бы Вы решили такую задачу?

(Если нужны пояснения или детали -- предоставлю.)


--------------------
Хочешь рассмешить Бога -- расскажи ему о своих планах!
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 27 2008, 19:12
Сообщение #11


Гуру
******

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



Цитата(aaarrr @ Sep 27 2008, 20:50) *
Не во всем: SSP проигрывает атмеловскому SSC.

А конкретизировать?
Цитата
И UART'ы хуже.

А да-да smile.gif любители простых RS485 решений жалуются... Как-то я тут уже подрооообно обсуждал это. В обще-то ничего страшного-то и не оказалось.
Цитата
Это эффективнее только в случае отсутствия DMA. В противном случае я лучше спокойно разберу данные в нужное мне время, а не в прерывании.

Спокойствие и время затраченное на обработку зависят от протокола. Во всех моих случах за десятки лет я удовлетворен FIFO, причем у одного из максимально много и долго мною используемых ранее контроллеров AM186CC и с DMA и с FIFO все в полном порядке - полная свобода выбора. Посему я совсем не не зазобравшись и не вкусив прелестей DMA все это пишу.
Цитата
..вопрос об использовании старших сейчас пытаюсь для себя решить.

"Присоединяйтесь барон" smile.gif начинал c LPC2114, LPC2294,.... Сейчас LPC2138/48, LPC2378, LPC2468...
Младшие LPC213x заменят вскоре на pin-to-pin Cortex-M3 V2 - попугаев поболе, прерывания шустрые, красотулечки типа атомизации последовательности команд. Цены... Не вопрос, короче!


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
vik0
сообщение Sep 27 2008, 19:13
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 381
Регистрация: 27-07-08
Из: теплые края
Пользователь №: 39 233



2 injen-d и iaaarrr:
Ок, насчет полной бесполезности я пожалуй таки [слегка] погарячился. Но, надеюсь, никто не будет спорить что польза от DMA в DSP в разы больше чем в SAM7. wink.gif
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 27 2008, 19:34
Сообщение #13


Гуру
******

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



Цитата(zhevak @ Sep 27 2008, 21:07) *
- Возможно, у Вас есть другое видение ситуации, которое я не улавливаю. Как бы Вы решили такую задачу?

Решаю постоянно - фреймы переменой длинны, протоколы SLIP-образные. Могу еще на лету подпаковывать немного....Забрасывание непонятно какой порции в память с последующем ползанием по памяти (где фрейм-то? Сумму считаем, ошибки постфактум разгребаем)крайне неэффективно. В потоке слегка буферизированным 16-32 байтовым FIFO ищется начало фрейма, считается контрольная сумма распаковывается, до получения конца фрейма кладется в нужный буфер. По получению конца фрейма контроль, принятие решение по сдвигу указателя и ждем фрейма.
Даже если начинаем рассуждать о вырожденных вариантах - фреймы фиксированной длинны, пропаданий/мусора почти нет, тем не менее, по действительно с минимальными затратами ресурсов оказавшимуся в памяти фрейму надо пробежаться, посчитать сумму это, простите, ВРЕМЯ (хорошо, если квитирование есть и канал ждет, а если нет - ой!). А уж если сбой какой, то тут уже и пляски с бубном - где начало, где конец, выбросить битый фрейм, переслать огрызок потенциально целого по месту, DMA препрограммировать нештатно.... Короче где экономия от того, что у меня с небольшими затратами в памяти что-то потенциально НЕПОНЯТНОЕ оказалось? Для идеальных паркетных условий - спору нет - раз DMA и в дамки. Только ведь идеальных условий нет практически никогда.
Цитата(zhevak @ Sep 27 2008, 21:07) *
...я отнюдь никак не хочу загнать zltigo в угол. Тем более при народно.

Я старый, битый и многоопытный smile.gif - туда, где в угол загнать могут не суюсь. Шутка smile.gif


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
singlskv
сообщение Sep 27 2008, 20:37
Сообщение #14


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(injen-d @ Sep 27 2008, 22:08) *
Абсолютно не согласен на счет бесполезности.
Мне, например, на данный момент необходимо принимать и передавать пакеты по UART'у со скоростью 500 кбит/с, максимальная длинна пакета 256 байт. По второму байту пакета определяю оставшееся кол-во байт в пакете и "заряжаю" на него DMA. при отправке все еще проще. Так вот, вопрос - 256 входов в прерывание для обработки одного пакета лучше чем 2 ? При передаче и того проще.
+1
Аналогично, у меня 3 uart одновременно на 115200 непрерывно + всякие рассчеты в float
при попытке переключить на прием без DMA(ну там с подсчетом CRC например) начинают
тереться пакеты.
Пакеты длинной до 256байт, FIFO например в 16 байт будет более эфективен ?


Цитата(zltigo @ Sep 27 2008, 23:34) *
А уж если сбой какой, то тут уже и пляски с бубном - где начало, где конец, выбросить битый фрейм, переслать огрызок потенциально целого по месту, DMA препрограммировать нештатно.... Короче где экономия от того, что у меня с небольшими затратами в памяти что-то потенциально НЕПОНЯТНОЕ оказалось? Для идеальных паркетных условий - спору нет - раз DMA и в дамки. Только ведь идеальных условий нет практически никогда.
А каков % таких нештатных ситуаций/битых пакетов ?
Если 0,01% то DMA неэфективен ?
А если 0,1% ?
А если 1% ?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 27 2008, 20:42
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Справедливости ради:

Цитата(singlskv @ Sep 28 2008, 00:32) *
при попытке переключить на прием без DMA(ну там с подсчетом CRC например)

...и без FIFO...
Цитата(singlskv @ Sep 28 2008, 00:32) *
начинают тереться пакеты.

Ничего удивительного.


Цитата(singlskv @ Sep 28 2008, 00:32) *
Пакеты длинной до 256байт, FIFO например в 16 байт будет более эфективен ?

UART - не самый удачный пример в данном случае. Вот скоростной SPI - другое дело.

Но лучше иметь и DMA и FIFO - тогда появляется возможность выбора.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 27 2008, 20:44
Сообщение #16


Гуру
******

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



Цитата(aaarrr @ Sep 27 2008, 22:31) *
с 100 Ethernet MAC

MAC-ом от LPC на данный момент доволен как слон smile.gif. Благодаря отдельной шине+16K банк+DMA большое количество мелких пакетов летают почти даром.
Цитата
быстрым SPI...

SPI/SSP обычно себя ведут, вроде smile.gif, ибо у меня только AT45 на штатном SPI. SPI+аппаратная поддержка протокола для связи с внешними миром в FPGA уползла, а на FPGA хоть и на 8bit шине, по скорости тоже пожаловаться не могу. Хотя, конечно, внешнюю шину втихаря (в старых PDF диаграммы были - в новых выбросили) тормознули (зато работает smile.gif ) и теперь в ней все по тактам ядра.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
singlskv
сообщение Sep 27 2008, 20:50
Сообщение #17


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(aaarrr @ Sep 28 2008, 00:42) *
Справедливости ради:
...и без FIFO...
Ничего удивительного.
Конечно, но согласитесь что в данном случае ДМА лучший вариант чем FIFO.
Цитата
UART - не самый удачный пример в данном случае. Вот скоростной SPI - другое дело.

Цитата(aaarrr @ Sep 27 2008, 22:03) *
PDC предназначен для обслуживания медленной периферии, и с этой задачей справляется отлично.
Вот я чего-то недопонимаю, почему пример с uart в данном случае не лучший ?
Цитата
Но лучше иметь и DMA и FIFO - тогда появляется возможность выбора.
Кто б спорил, более того иногда можно совмещать эти 2 варианта.
Go to the top of the page
 
+Quote Post
zhevak
сообщение Sep 27 2008, 20:53
Сообщение #18


Знающий
****

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



Цитата(zltigo @ Sep 28 2008, 01:34) *
до получения конца фрейма кладется в нужный буфер.

Как Вы определяете конец фрейма?
1) по количеству байт или
2) признаком конца является какой-то особый байт

Если первое, то это работа чисто для ДМА. Зарядили ему количество, он тупр забирает их у периферии и кладет нерассматривая в памать. Но ведь Вы говорили, что
Цитата
байт ориентированные интерфейсы я лично всегда в потоке по байтам разбираю

Значит, получается -- второе. Т.е. в самом прерывании (от периферии) забираете принятый байт, оцениваете его на предмет маркера конца фрейма и кладете (или не кладете) его в память, подсчитываете CRC, занимаетесь задачами байт-стаффинга ... ну и т.д. Но ведь это-то как раз не эффективно получается. Или я что-то не понял.

Цитата
тем не менее, по действительно с минимальными затратами ресурсов оказавшимуся в памяти фрейму надо пробежаться, посчитать сумму это, простите, ВРЕМЯ (хорошо, если квитирование есть и канал ждет, а если нет - ой!).


Цитата
А уж если сбой какой, то тут уже и пляски с бубном - где начало, где конец, выбросить битый фрейм, переслать огрызок потенциально целого по месту, DMA препрограммировать нештатно....

Причем здесь бубен? Битый фрейм выкидываем без разговоров ("немножко мертвый" -- нет такого понятия!) и полностью -- никаких "огрызков".

Цитата
Короче где экономия от того, что у меня с небольшими затратами в памяти что-то потенциально НЕПОНЯТНОЕ оказалось?

Вы спрашиваете? Я Вам отвечу!
Экономия в том, что процессы получения и обработки становятся независимы друг от друга. Другими словами, процесс обработки мы можем выполнить тогда, когда высвободится процессор, в то же время, процесс получения потока в памать ресурсы проца вообще никак не занимает.

Правда тут есть накладные расходы, нужно иметь в памяти два буфера, которые работают по-переменно. (Но, как мне кажется, потери памяти не велики -- всего пол-кило байт!)

Как это выглядит. Принимаем заголовок пакета, где (помимо еще чего-нибудь) находится длина пакета.
Длину пакета засылаем в ДМА. И, собственно все! Ждем прерывания об окончании ДМА-операции. В это время решаем свои насущние задачи. Приходит прерывание от ДМА, переключаемся на второй буфер и ставим флаг готовности первого буфера. Выходим из прерывания. Где-то там в процессе бесконечного цикла должна быть проверка этого флага. Если флаг стоит, то вызываем функцию подсчета CRC и т.д. В это время могут возникать отдельные прерывания по приему байтов заголовка следующего пакета, которые не влияют на подсчет CRC и последущую обработку пакета.

Тут может быть имеет смысл признаться, что реальные устройства занимаются помимо описанных выше действий занимаются еще и другой работой: мониторят кнопочи, моргают светодиодиками, рисуют на экране... Вот про кнопочки -- это очень актуально. Если окажется, что система будет реагировать на нажатия с запаздыванием (если вообще сможет, гы-гы!), то такой девай вряд ли кому-то будет нужен.

Теоретически, интегральное время обработки всего и всех должно быть меньше, чем обшее время работы проца. В противном случае нужно выбирать другой более быстрый проц или решать задачу с привлечением нескольких камней. Одно дело математическое суммирование времен выполнения процессов без оглядки на то, что процессы несинхронны, и другое дело -- реальное рапределение занятости проца. Я говорю о том, когда процу "приспичит" делать одновременно сразу несколько дел: обработать пакет, нарисовать что-то на экране и успеть вякнуть на нажатие кнопки. Поэтому следует четко осознавать приоритеты задач, продолжительность выполнения задач и время, на какое можно отложить их выполнение (поставить в очередь).

Не скрою, мне тоже приходится решать уникальные трудные (== интересные) задачи. Боюсь, что поднятый мной вопрос об эффективности по-байтовой обработке потока очень многословен. На столько многословен, что обсуждение его в форуме становится практически невозможно. Поэтому, если нет возражений, то я снимаю его.


--------------------
Хочешь рассмешить Бога -- расскажи ему о своих планах!
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 27 2008, 20:56
Сообщение #19


Гуру
******

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



Цитата(singlskv @ Sep 27 2008, 22:37) *
Пакеты длинной до 256байт, FIFO например в 16 байт будет более эфективен ?

Фреймы до где-то 386 байт, два потока по 115K в качестве вспомогательных задач. FIFO 16. Никаких проблем и близко не наблюдается.
Цитата
А каков % таких нештатных ситуаций/битых пакетов ?

В моих условиях может быть до 100% - надо жить и когда вместо даннных вдруг полный мусор пошел. Дело ведь не в том, что нельзя найти часный случай, когда голое FIFO или голое DMA на ARM7 не будет на сколько-то там проценов эффективнее, а в том, что это для поростых ARM совершенно сопоставимые по эффективности решения, и говорить "ах, как жить без DMA" совершенно необъективно.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 27 2008, 20:59
Сообщение #20


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(zltigo @ Sep 28 2008, 00:44) *
MAC-ом от LPC на данный момент доволен как слон smile.gif. Благодаря отдельной шине+16K банк+DMA большое количество мелких пакетов летают почти даром.

К SAM'у тоже претензий нет. Немного раздражает только фиксированный размер приемных буферов - 128 байт.

Цитата(zltigo @ Sep 28 2008, 00:44) *
SPI/SSP обычно себя ведут, вроде smile.gif, ибо у меня только AT45 на штатном SPI. SPI+аппаратная поддержка протокола для связи с внешними миром в FPGA уползла, а на FPGA хоть и на 8bit шине, по скорости тоже пожаловаться не могу. Хотя, конечно, внешнюю шину втихаря (в старых PDF диаграммы были - в новых выбросили) тормознули (зато работает smile.gif ) и теперь в ней все по тактам ядра.

Мне на SPI придется 20Мбит выплевывать, возможно одновременно через два канала. Поэтому делитель SSP не вызвал восторга.

А внешние шины - это, похоже, вечная проблема Philips/NXP - на своих USB-контроллерах они их тоже замедляли потихоньку smile.gif
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 27 2008, 21:00
Сообщение #21


Гуру
******

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



Цитата(singlskv @ Sep 27 2008, 22:50) *
Кто б спорил, более того иногда можно совмещать эти 2 варианта.

Эти варианты ДОЛЖНЫ быть совмещены, ибо что будет делать периферия, если ей канал DMA мгновенно не дадут когда ей приспичит. В нормально организованной системе (все уже поняли о чем это я smile.gif ) должно быть и то и другое FIFO или FIFO+DMA. Голый DMA череват для сколь-нибудь скоростных вещей.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 27 2008, 21:05
Сообщение #22


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(singlskv @ Sep 28 2008, 00:50) *
Вот я чего-то недопонимаю, почему пример с uart в данном случае не лучший ?

Потому что он слишком медленный, и при наличии FIFO серьёзную нагрузку на процессор дать не может.

Цитата(zltigo @ Sep 28 2008, 01:00) *
Эти варианты ДОЛЖНЫ быть совмещены, ибо что будет делать периферия, если ей канал DMA мгновенно не дадут когда ей приспичит.

А кто же ему запретит-то? smile.gif И уж на одно слово FIFO присутствует всегда.
Go to the top of the page
 
+Quote Post
singlskv
сообщение Sep 27 2008, 21:11
Сообщение #23


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(zltigo @ Sep 28 2008, 00:56) *
В моих условиях может быть до 100% - надо жить и когда вместо даннных вдруг полный мусор пошел.
В таких условиях конечно FIFO+разбор пакетов на лету лучший вариант.
Я говорю о случаях когда и 0,1% пакетов уже очень плохо.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 27 2008, 21:23
Сообщение #24


Гуру
******

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



Цитата(zhevak @ Sep 27 2008, 22:53) *
Как Вы определяете конец фрейма?
1) по количеству байт или
2) признаком конца является какой-то особый байт

конечно второй вариант - я же говорил волшебное слово SLIP. По "количеству", волшебным заголовкам это менее универсально и надежно.
Цитата
Если первое, то это работа чисто для ДМА. Зарядили ему количество, он тупр забирает их у периферии и кладет нерассматривая в памать.

И даже в этом случае у Вас,например, банально в канале пропал байт во фрейме. Дальше сами расскажите, как будете вылезать из ситуевины?
Цитата
Причем здесь бубен? Битый фрейм выкидываем без разговоров ("немножко мертвый" -- нет такого понятия!) и полностью -- никаких "огрызков".

Для определения битости фрейма нужно по нему всему пробежаться-прочитать-просуммировать, даже если он целый пришел. А если в конце вместо последнего байта начало следующего фрейма прибежало.... разборки начались, извлечение целого фрейма, восстановление синхронизации фреймов, скоее всего в Вашем простешем случае уже и потеря втрого фрейма... время, время, время... Я уже писал, что не вчера и не сразу умным родился, контроллеров разных и DMA и без пользовал для разных задач... В результае я начинаю рассматривать для байтовых (нефреймовых) интерфейсов прежде всего работу в FIFO, даже если есть выбор.
Далее, а буфер-то у нас какой? Кольцевой? А как с поддержкой кольцевых буферов? У всех DMA контроллеров с этим хорошо? У нориальных DSP - хорошо, а у SAM7 просто никак. Заодно и расход памяти минимум на две целых полочки для макимальных фреймов не радует совсем. Минималистичный, прямо скажем, DMA sad.gif

Цитата(aaarrr @ Sep 27 2008, 23:05) *
А кто же ему запретит-то? smile.gif И уж на одно слово FIFO присутствует всегда.

Другой, DMA, например, захватил шину. Разруливать по слову будем, и при этом рассуждать об эффективности DMA?
На одно слово, это не FIFO.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 27 2008, 21:36
Сообщение #25


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(zltigo @ Sep 28 2008, 01:23) *
Другой, DMA, например, захватил шину. Разруливать по слову будем, и при этом рассуждать об эффективности DMA?
На одно слово, это не FIFO.

Другой DMA (если это PDC) захватить шину может на время передачи одного слова, EMAC - на 4-х. Никаких затыков при таких условиях не будет.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 27 2008, 21:58
Сообщение #26


Гуру
******

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



Цитата(aaarrr @ Sep 27 2008, 23:36) *
Другой DMA (если это PDC) захватить шину может на время передачи одного слова, EMAC - на 4-х. Никаких затыков при таких условиях не будет.

Не об этом речь, а об ЭФФЕКТИВНОСТИ работы DMA в режиме захватил(сколько тактов), одно слово передал, освободил(сколько тактов)... Вылезли все, помнится, 18 каналов (ну крутой контроллер - 18 штук целых!) SAM7 с желанием поработать, через сколько тактов крайний разгрузится? На MAC/USB ведь FIFO поставили smile.gif А как Вы там будете 2x20Mbit из SPIев на голых DMA дерущихся за шину тянуть, это уже тоскливо становится.
Цитата(DpInRock @ Sep 27 2008, 23:56) *
Если нормально распорядиться.

Вы уже умеете "нормально распоряжаться", дабы никому не мешать? Или, полагаете, что это знание придет после оплаты 200USD за многослойку smile.gif? Про умелое обращение с ARM9 (кэши, MMU, SDRAM....) можно еще много больше поговорить smile.gif.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Sep 27 2008, 22:37
Сообщение #27


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



И чего нервничать? Человеку интересно совсем не то, что вы обсуждаете, то бишь флудите. См. заглавную статью топика.

А за умелое обращение не переживайте. Не только вы иностранные буковки выучили.

Все это не так сложно, Семен. Тем более, все это добро АРМ9 никто не заставляет использовать сразу.


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 27 2008, 22:46
Сообщение #28


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(zltigo @ Sep 28 2008, 01:58) *
Не об этом речь, а об ЭФФЕКТИВНОСТИ работы DMA в режиме захватил(сколько тактов), одно слово передал, освободил(сколько тактов)... Вылезли все, помнится, 18 каналов (ну крутой контроллер - 18 штук целых!) SAM7 с желанием поработать, через сколько тактов крайний разгрузится? На MAC/USB ведь FIFO поставили smile.gif А как Вы там будете 2x20Mbit из SPIев на голых DMA дерущихся за шину тянуть, это уже тоскливо становится.

Во-первых, все -дцать каналов одновременно не вылезут, ибо даже приложение такое придумать трудно.

Единственное, что известно от Atmel'а:
Цитата
• One Master Clock Cycle Needed for a Transfer from Memory to Peripheral
• Two Master Clock Cycles Needed for a Transfer from Peripheral to Memory


А 2x20Mbit с параллельно работающим EMAC я и сейчас тяну без особых проблем.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 27 2008, 23:01
Сообщение #29


Гуру
******

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



Цитата(DpInRock @ Sep 28 2008, 00:37) *
Человеку интересно совсем не то, что вы обсуждаете, то бишь флудите. См. заглавную статью топика.

Смешно sad.gif. Товарщ захотел сделать буквально на коленке плату уровня ARM7 - логично (не то, что на коленке, а то, что ARM7), самый, что ни наетсь сегодняшний mainstream. Рассуждаем о выборе производителя, ну подробно рассуждаем, углубленно, так сказать... А тут некто периодически встревает за многслойки за сотни баксов, ARM9, навеске на него всекой вячины типа LCD на "вырост". А сейчас еще и о флуде разговор завел. Не сочтите за наезд, но пыл умерьте, пожалуйста. Можете очередную тему создать типа "ARM9 для начинающих" и подробнейшим образом высказаться о путях и методах. С удовольствием поучаствую, или помолчу - как скажите....

Цитата(aaarrr @ Sep 28 2008, 00:46) *
Единственное, что известно от Atmel'а:

Это именно про "Low bus arbitration overhead"
плюс сама пересылка..
Итого не менее трех тактов на пословную пересылку из переферии + тормоза собственно периферийной шины...


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 27 2008, 23:19
Сообщение #30


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(zltigo @ Sep 28 2008, 03:01) *
Это именно про "Low bus arbitration overhead"
плюс сама пересылка..

Да нет, это всего (я смотрел описание IP Core, а не DS).

Цитата(zltigo @ Sep 28 2008, 03:01) *
Итого не менее трех тактов на пословную пересылку из переферии + тормоза собственно периферийной шины...

Все равно полоса внутренней шины многократно покрывает способности периферии, как ни крути.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 27 2008, 23:33
Сообщение #31


Гуру
******

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



Цитата(aaarrr @ Sep 28 2008, 01:19) *
Да нет, это всего (я смотрел описание IP Core, а не DS).

Чудес в 21 веке не бывает, ну не отрабатывает AHB и APB шина (с какой частотой SAM7 PIO машет?) и DMA арбитраж за 0 тактов...
Цитата
Все равно полоса внутренней шины многократно покрывает способности периферии, как ни крути.

Сугубо внутренняя локальная на которой память висит это одно, AMBA AHB это другое, периферийная APB это третье и еще тормознее. Все определяет слабейший и некая полоса занимается и вопрос в том, хватает-ли остатков пропускной способности ядру, дабы дорваться до памяти и выполнить нужную работу.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 28 2008, 11:11
Сообщение #32


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(zltigo @ Sep 28 2008, 03:33) *
Сугубо внутренняя локальная на которой память висит это одно, AMBA AHB это другое, периферийная APB это третье и еще тормознее. Все определяет слабейший и некая полоса занимается и вопрос в том, хватает-ли остатков пропускной способности ядру, дабы дорваться до памяти и выполнить нужную работу.

Остатков? У ядра 32бит * 55MHz = 1.76Гбит/с - сколько нужно вычесть UART'ов и SPI'ев, чтобы стало "не хватать"? Даже с учетом арбитража и тормозов периферийной шины, о которых мы ничего не знаем по большому счету?

Цитата(Cemen @ Sep 28 2008, 14:30) *
А я что?А я ничего smile.gif Так,DBGU - это плюс. А какие среды его поддерживают?

Никакие. Это просто обкоцанный UART.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 28 2008, 11:34
Сообщение #33


Гуру
******

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



Цитата(aaarrr @ Sep 28 2008, 13:11) *
и тормозов периферийной шины, о которых мы ничего не знаем по большому счету?

Ну встречал какртинку в SAM7 PDF на которой доступ к APB в два такта рисовался. Полагаю, что суммарная очень оптимистичная оценка по пересылке из периферии не менее 5 тактов. Если тот-же SPI байтовый, то на 20 мегабитах это 12,5 тактов из 55 уходит на пресылку. Уже очень заметная величина особенно еcли SPI две штуки да еще и MAC (там по невнятной ATmel картинки вроде мимо APB есть канал, но тем не менее) DMA пользует.



Цитата(aaarrr @ Sep 28 2008, 13:11) *
Никакие. Это просто обкоцанный UART.

Ну вот sad.gif всю малину обломали. Я ждал ответа от DpInRock. Такое красивое маркетинговое слово DBGU - ну прямо "чернила для шестого класса". У Вас есть "чернила для шестого класса"? нет sad.gif А у Atmel есть - "это плюс" smile.gif...


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 28 2008, 11:40
Сообщение #34


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(zltigo @ Sep 28 2008, 15:34) *
Ну встречал какртинку в PDF на которой доступ к APB в два такта рисовался.

Да, 2 такта. Тоже видел картинку, правда не у Атмела.

Цитата(zltigo @ Sep 28 2008, 15:34) *
Полагаю, что суммарная очень оптимистичная оценка по пересылке из периферии не менее 5 тактов. Если тот-же SPI байтовый, то на 20 мегабитах это 12,5 тактов из 55 уходит на пресылку. Уже очень заметная величина особенно еcли SPI две штуки да еще и MAC (там по невнятной ATmel картинки вроде мимо APB есть канал, но тем не менее) DMA пользует.

При 5-и тактах на слово и 20Мбит скорости будет занято 5.7% полосы шины. MAC висит на AHB.

Давайте-ка я тесты проведу, уже самому интересно стало.
Go to the top of the page
 
+Quote Post
vik0
сообщение Sep 28 2008, 11:55
Сообщение #35


Местный
***

Группа: Свой
Сообщений: 381
Регистрация: 27-07-08
Из: теплые края
Пользователь №: 39 233



Цитата(aaarrr @ Sep 28 2008, 14:40) *
Давайте-ка я тесты проведу, уже самому интересно стало.

Давайте. Интересно будет посмотреть на результаты. Серьезно.
Go to the top of the page
 
+Quote Post
singlskv
сообщение Sep 28 2008, 17:09
Сообщение #36


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(zltigo @ Sep 28 2008, 20:55) *
Кстати, еще о шине Flash ведь не оаботает на 55MHz/18ns - там еще пару waitstates - ой что с пропускной способностью становится....
А это-то как повлияет ?
Еще не готов, шину не захватывает...
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 28 2008, 17:14
Сообщение #37


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Итак, результаты тестов готовы smile.gif

Программа выполнялась из RAM, это простой цикл из кучи NOP'ов. Т.е. процессор только выбирал команды из памяти, не обращаесь к ней за чем-либо еще.
Затем был запущен 8-bit SPI-поток на частоте MCK - это самые худшие условия: PDC вычитывает и записывает слово каждые 8 тактов процессора.

Что получилось (время выполнения тестового куска в тактах):
Код
ошибка


Как можно видеть, шина действительно занимается на 1 такт для записи в периферию и на 2 - для чтения из неё.

Цитата(Cemen @ Sep 28 2008, 20:00) *
Мысли вслух- а с какой скоростью можно ножками шевелить,а?

3 такта MCLK на одну запись в порт. Т.е. частота дрыганья = MCLK/6.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 28 2008, 17:15
Сообщение #38


Гуру
******

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



Цитата(singlskv @ Sep 28 2008, 19:09) *
Еще не готов, шину не захватывает...

Причем тут захватывает? Пропускная полоса шины в разы падает при обращении к Flash.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 28 2008, 17:23
Сообщение #39


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



И еще более интересные результаты при работе из Flash (1WS):

Код
ошибка


0WS:
Код
ошибка


Так что в смысле шинной организации все не так просто, как может показаться на первый взгляд.

Бумажки, граждане, настоящие! (С)
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 28 2008, 17:23
Сообщение #40


Гуру
******

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



Цитата(aaarrr @ Sep 28 2008, 19:14) *
Итак, результаты тестов готовы smile.gif

Что за результаты без методики?
Цитата
Программа выполнялась из RAM, это простой цикл из кучи NOP'ов. Т.е. процессор только выбирал команды из памяти, не обращаесь к ней за чем-либо еще.

Прелестые условия - чтоб я так работал smile.gif
Цитата
Как можно видеть, шина действительно занимается на 1 такт для записи в периферию и на 2 - для чтения из неё.

Ну ну..
И чуть ниже про обращение к PIO висящем на той-же APB:
Цитата
3 такта MCLK на одну запись в порт. Т.е. частота дрыганья = MCLK/6.

Ну прямо чудо какое-то. Поскольку чудес не бывает, то методика "того"...


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
singlskv
сообщение Sep 28 2008, 17:25
Сообщение #41


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(zltigo @ Sep 28 2008, 21:15) *
Причем тут захватывает? Пропускная полоса шины в разы падает при обращении к Flash.
Пропускная полоса чего падает в разы ?
Мы вроде как говорили об обмене между SRAM и переферией по DMA ?
При чем здесь доступ к флеш ?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 28 2008, 17:28
Сообщение #42


Гуру
******

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



Цитата(singlskv @ Sep 28 2008, 19:25) *
Мы вроде как говорили об обмене между SRAM и переферией по DMA ?

Говорим о том сколько остается от пропускной способности шины.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 28 2008, 17:30
Сообщение #43


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(zltigo @ Sep 28 2008, 21:23) *
Что за результаты без методики?

Я в своей методике вполне уверен. Если имеете что предложить - предлагайте.

Цитата(zltigo @ Sep 28 2008, 21:23) *
Прелестые условия - чтоб я так работал smile.gif

Процессор честно считывает команды из памяти каждый такт, что не устраивает для измерений?

Цитата(zltigo @ Sep 28 2008, 21:23) *
Ну прямо чудо какое-то. Поскольку чудес не бывает, то методика "того"...

2 такта выполняется STR, еще один на доступ к шине.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 28 2008, 17:30
Сообщение #44


Гуру
******

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



Цитата(aaarrr @ Sep 28 2008, 19:23) *
0WS:

Прелестно, ну а давайте не играть в поддавки и на полных 55MHz.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 28 2008, 17:31
Сообщение #45


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(zltigo @ Sep 28 2008, 21:28) *
Говорим о том сколько остается от пропускной способности шины.

Похоже, что Flash сидит на отдельной шине.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 28 2008, 17:31
Сообщение #46


Гуру
******

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



Цитата(aaarrr @ Sep 28 2008, 19:30) *
Я в своей методике вполне уверен. Если имеете что предложить - предлагайте.

А я ее просто не вижу, посему уверенным быть ну никак не могу.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 28 2008, 17:31
Сообщение #47


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(zltigo @ Sep 28 2008, 21:30) *
Прелестно, ну а давайте не играть в поддавки и на полных 55MHz.

Для 1WS я результаты уже написал.
Go to the top of the page
 
+Quote Post
singlskv
сообщение Sep 28 2008, 17:32
Сообщение #48


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(zltigo @ Sep 28 2008, 21:28) *
Говорим о том сколько остается от пропускной способности шины.
То есть Вы согласны что ДМА лишнего не отожрет, и разговор только о
том что у SAM7 флеш не слишком быстрая(правда в разы..., это как-то слишком громко было
сказанно smile.gif )
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 28 2008, 17:33
Сообщение #49


Гуру
******

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



Цитата(aaarrr @ Sep 28 2008, 19:31) *
Похоже, что Flash сидит на отдельной шине.

А как-же c ARM7 Нойманом быть?


Цитата(singlskv @ Sep 28 2008, 19:32) *
То есть Вы согласны что ДМА лишнего не отожрет...

Разумеется нет.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 28 2008, 17:33
Сообщение #50


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



А какое дело DMA до Неймана?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 28 2008, 17:35
Сообщение #51


Гуру
******

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



Цитата(singlskv @ Sep 28 2008, 19:32) *
правда в разы..., это как-то слишком громко было
сказанно smile.gif )

Именно в разы +1 WS - в два раза +2WS в три раза...


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 28 2008, 17:36
Сообщение #52


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(zltigo @ Sep 28 2008, 21:31) *
А я ее просто не вижу, посему уверенным быть ну никак не могу.

Вам код выложить для проверки?

Цитата(zltigo @ Sep 28 2008, 21:35) *
Именно в разы +1 WS - в два раза +2WS в три раза...

2WS не используются никогда.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 28 2008, 17:40
Сообщение #53


Гуру
******

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



Цитата(aaarrr @ Sep 28 2008, 19:33) *
А какое дело DMA до Неймана?

Это я ведь о Вашем выводе "Похоже, что Flash сидит на отдельной шине."
Цитата(aaarrr @ Sep 28 2008, 19:36) *
Вам код выложить для проверки?

Проверить не начем, но почитать могу...
Цитата
2WS не используются никогда.

Возможно. У Atmel 36ns Flash??? Крутовато несколько, но не невозможно. При более ширпотребно-реальных 55ns в акурат 3WS.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
singlskv
сообщение Sep 28 2008, 17:44
Сообщение #54


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(zltigo @ Sep 28 2008, 21:35) *
Именно в разы +1 WS - в два раза +2WS в три раза...

Выкладывайте тест когда будет как минимум в 3 раза, протестирую...
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 28 2008, 17:45
Сообщение #55


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(zltigo @ Sep 28 2008, 21:40) *
Это я ведь о Вашем выводе "Похоже, что Flash сидит на отдельной шине."

Да, т.е. никто не мешает процессору читать Flash, в то время, как DMA окучивает RAM.

Цитата(zltigo @ Sep 28 2008, 21:40) *
Проверить не начем, но почитать могу...

CODE

u_int spi_buff[5000];

void test(void)
{
u_int b;
u_short a;

AT91C_BASE_PMC->PMC_PCER = (0x01 << AT91C_ID_TC0);

// Wave mode, MCK/8, UP mode with automatic trigger on RC Compare
AT91C_BASE_TCB->TCB_TC0.TC_CMR = AT91C_TC_CLKS_TIMER_DIV2_CLOCK | AT91C_TC_WAVESEL_UP | AT91C_TC_CPCSTOP | AT91C_TC_WAVE;
AT91C_BASE_TCB->TCB_TC0.TC_RC = 0xffff;
AT91C_BASE_TCB->TCB_TC0.TC_CCR = AT91C_TC_CLKEN;
AT91C_BASE_TCB->TCB_TC0.TC_CCR = AT91C_TC_SWTRG;

spi0_ini();
for(b = 0; b < 5000; b++)
spi_buff[b] = (0x07 << 0x10) | 0x55;
AT91C_BASE_SPI0->SPI_TPR = (u_int)spi_buff;
AT91C_BASE_SPI0->SPI_TCR = 5000;
AT91C_BASE_SPI0->SPI_RPR = (u_int)spi_buff;
AT91C_BASE_SPI0->SPI_RCR = 5000;

dprintf("bla-bla\r\n");

AT91C_BASE_SPI0->SPI_PTCR = AT91C_PDC_TXTEN | AT91C_PDC_RXTEN;

a = AT91C_BASE_TCB->TCB_TC0.TC_CV;
b = 0x100;
do
{
__asm
{
nop; nop; nop; nop; nop; nop; nop; nop;
nop; nop; nop; nop; nop; nop; nop; nop;
nop; nop; nop; nop; nop; nop; nop; nop;
nop; nop; nop; nop; nop; nop; nop; nop;
nop; nop; nop; nop; nop; nop; nop; nop;
nop; nop; nop; nop; nop; nop; nop; nop;
nop; nop; nop; nop; nop; nop; nop; nop;
nop; nop; nop; nop; nop; nop; nop; nop;
}
} while(--b );
a = AT91C_BASE_TCB->TCB_TC0.TC_CV - a;
dprintf("t=%d\r\n", a);

while(0x01);
}

void spi0_ini(void)
{
AT91C_BASE_SYS->PIOA_BSR = SPI0_CS1 | SPI0_CS2 | SPI0_CS3;
AT91C_BASE_SYS->PIOA_ASR = SPI0_CS0 | SPI0_MISO | SPI0_MOSI | SPI0_SPCK;
AT91C_BASE_SYS->PIOA_PDR = SPI0_CS1 | SPI0_CS2 | SPI0_CS3 | SPI0_CS0 | SPI0_MISO | SPI0_MOSI | SPI0_SPCK;

AT91C_BASE_PMC->PMC_PCER = (0x01 << AT91C_ID_SPI0);

AT91C_BASE_SPI0->SPI_CR = AT91C_SPI_SPIEN;
AT91C_BASE_SPI0->SPI_MR = AT91C_SPI_MODFDIS | AT91C_SPI_PS | AT91C_SPI_MSTR; // Master, Variable mode

AT91C_BASE_SPI0->SPI_CSR[0x03] = (0x01 << 0x08) | (0x00 << 0x04)
| AT91C_SPI_NCPHA | AT91C_SPI_CPOL; // Dummy: SPI Mode 2, MCK, 8 bits
}


Цитата(zltigo @ Sep 28 2008, 21:40) *
Возможно. У Atmel 36ns Flash??? Крутовато несколько, но не невозможно. При более ширпотребно-реальных 55ns в акурат 3WS.

В документации написано:
Цитата
Single Cycle Access at Up to 30 MHz in Worst Case Conditions
Go to the top of the page
 
+Quote Post
singlskv
сообщение Sep 28 2008, 17:56
Сообщение #56


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(zltigo @ Sep 28 2008, 21:40) *
Возможно. У Atmel 36ns Flash??? Крутовато несколько, но не невозможно. При более ширпотребно-реальных 55ns в акурат 3WS.
zltigo я уже приводил пример в другой ветке когда доступ к флеш
у Renesas 12,5ns , сейчас у них уже 10ns, так что 36ns не есть что-то особенное,
на самом деле там вобще скорее всего ~30ns по максимуму, по крайней мере
у меня на SAM7A3 и на 65Мгц все работает(была ошибка в задании PLL smile.gif, предыдущего
программера smile.gif )
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 28 2008, 18:01
Сообщение #57


Гуру
******

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



Цитата(singlskv @ Sep 28 2008, 19:44) *
Выкладывайте тест когда будет как минимум в 3 раза, протестирую...

Тестировать незачем. Это физическая сущность smile.gif. Нужны WS - стоим и ждем.
Цитата
В документации написано:
Single Cycle Access at Up to 30 MHz in Worst Case Conditions

Радует! LPC только за счет своей 128битности вытягивает скорость. Только интерсно тогда отчего они на числе 55MHz остановились?
Цитата
CODE...

Я тестику реализма прибавлю самую малость. Проверите?



Цитата(singlskv @ Sep 28 2008, 19:56) *
zltigo я уже приводил пример в другой ветке когда доступ к флеш
у Renesas 12,5ns , сейчас у них уже 10ns, так что 36ns не есть что-то особенное,

Верю, верю, просто SAM7 совершенно массовый дешевый контролер, а массовая Flash нынче отнюдь не 10-12-30ns.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 28 2008, 18:03
Сообщение #58


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(zltigo @ Sep 28 2008, 22:01) *
Радует! LPC только за счет своей 128битности вытягивает скорость. Только интерсно тогда отчего они на числе 55MHz остановились?

Мне тоже не понятно. Где-то случился затык, и отнюдь не во флеш. Предыдущие ARM7 у них были и на 66MHz.

Цитата(zltigo @ Sep 28 2008, 22:01) *
Я тестику реализма прибавлю самую малость. Проверите?

Пожалуйста.
Go to the top of the page
 
+Quote Post
singlskv
сообщение Sep 28 2008, 18:19
Сообщение #59


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(zltigo @ Sep 28 2008, 22:01) *
Верю, верю, просто SAM7 совершенно массовый дешевый контролер, а массовая Flash нынче отнюдь не 10-12-30ns.
Дык вроде как и Xmega у Atmel теперь ~30ns доступ к флеш...
30Мгц для доступа к флеш у Atmel уже давно...
И вот меня это совсем не удивляет, возможно за это они и берут свой "лишний" бакс к цене...
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 28 2008, 18:31
Сообщение #60


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(zltigo @ Sep 28 2008, 22:28) *
Легко. Посмотрю на дальнейшее развитие и разделю тему.

ИМХО, имеет смысл отделить бенчмарки и кинуть в раздел ARM. Тема сама по себе интересная получается.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 28 2008, 18:37
Сообщение #61


Гуру
******

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



Цитата(aaarrr @ Sep 28 2008, 20:03) *
Пожалуйста.

Как скучно оказывается всухую писать sad.gif . Просьба для начала заменить nop-овский цикл на такое:
Код
volatile u_int b = 0x800;
volatile u_int c = 0;
volatile u_int d = 0;
    do
    {
        c = AT91C_BASE_TCB->TCB_TC0.TC_CV;
        d += c;
        
    } while(--b );
    a = AT91C_BASE_TCB->TCB_TC0.TC_CV - a;
    dprintf("t=%d\r\n", a);
    d = d;

Интересен Flash, 55MHz, ARM mode.


Цитата(aaarrr @ Sep 28 2008, 20:31) *
Тема сама по себе интересная получается.

Естественно!


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 28 2008, 18:52
Сообщение #62


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(zltigo @ Sep 28 2008, 22:37) *
Как скучно оказывается всухую писать sad.gif . Просьба для начала заменить nop-овский цикл на такое:
Интересен Flash, 55MHz, ARM mode.

Сделано.

Flash 1WS:
Код
ошибка


RAM 0WS:
Код
ошибка


Числа - это количество тактов на выполнение (выход * 8).
Время симулятора для случая RAM 0WS PDC Idle: 16382
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 28 2008, 19:20
Сообщение #63


Гуру
******

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



Цитата(aaarrr @ Sep 28 2008, 20:52) *
Сделано.

Очень интересный результат! Похоже сегмент шины с Flash как-то изолируем, что позволяет по хозяйски распоряжаться неизбежным 50% простоем ядра при доступе к Flash для доступа DMA к RAM.
А 30MHz и 0WS из Flash еще пожалуйста!


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 28 2008, 19:30
Сообщение #64


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Результат еще интереснее. Как я уже писал, очень похоже, что шина Flash отделена.

Flash 0WS:
Код
ошибка


Незначительное ускорение не случайное, повторяется стабильно.

Расхождение результатов с симулятором связано с обращением к периферийному регистру, но не очень понятно, почему возникает именно такое замедление.
Go to the top of the page
 
+Quote Post
singlskv
сообщение Sep 28 2008, 19:41
Сообщение #65


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(zltigo @ Sep 28 2008, 23:20) *
Очень интересный результат! Похоже сегмент шины с Flash как-то изолируем, что позволяет по хозяйски распоряжаться неизбежным 50% простоем ядра при доступе к Flash для доступа DMA к RAM.
А 30MHz и 0WS из Flash еще пожалуйста!
То есть 3 раза это уже фантазия ?(ну это про разы...)



Цитата(aaarrr @ Sep 28 2008, 23:30) *
Результат еще интереснее. Как я уже писал, очень похоже, что шина Flash отделена.
Мне вобще кажется что это почти всегда на современных мк.
Нет никагого смысла располагать флеш на той же шине...
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 28 2008, 19:48
Сообщение #66


Гуру
******

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



Цитата(aaarrr @ Sep 28 2008, 21:30) *
Результат еще интереснее. Как я уже писал, очень похоже, что шина Flash отделена.

Странее! Не покидает мысль, что что-то не то. А разделить буфера приема передачи и организовать в тесте хоть какую-то рекцию(обработку) на окончание цикла работы DMA? И вообще, при исполнении IDLE из RAM на 55MHz получаем скорость РАВНУЮ до такта! скорости исполнения из FLASH на 30MHz. Что это c тестом?
Цитата(singlskv @ Sep 28 2008, 21:41) *
Нет никагого смысла располагать флеш на той же шине...

Это понятно, что слова Нейман/Гарвард почти пустой звук по нынешнмм временам, но предполагал, что это все-же пока не для достаточно простых ARM7 ядер.
Цитата(singlskv @ Sep 28 2008, 21:41) *
То есть 3 раза это уже фантазия ?(ну это про разы...)

50% это замедление в ДВА раза при ОДНОМ WS.Чего непонятного? Никаких фантазий.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 28 2008, 19:59
Сообщение #67


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(zltigo @ Sep 28 2008, 23:46) *
Странее! Не покидает мысль, что что-то не то. А разделить буфера приема передачи и организовать в тесте хоть какую-то рекцию(обработку) на окончание цикла работы DMA?

Тогда нужно время теста укорачивать, у меня нет столько свободной памяти. Попробую.
Могу еще проконтролировать время окончания цикла DMA.


Цитата(zltigo @ Sep 28 2008, 23:48) *
И вообще, при исполнении IDLE из RAM на 55MHz получаем скорость РАВНУЮ до такта! скорости исполнения из FLASH на 30MHz. Что это c тестом?

Я и считаю такты. А они одинаковые, хоть на 30, хоть на 55MHz.


С более скоростым доступом к периферии со стороны DMA все понятно - процессор имеет доступ через медленную APB, в то время как DMA подключен с одной стороны к ASB, а с другой напрямую к периферийным модулям.
Go to the top of the page
 
+Quote Post
singlskv
сообщение Sep 28 2008, 20:00
Сообщение #68


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(zltigo @ Sep 28 2008, 23:48) *
Это понятно, что слова Нейман/Гарвард почти пустой звук по нынешнмм временам, но предполагал, что это все-же пока не для достаточно простых ARM7 ядер.
50% это замедление в ДВА раза при ОДНОМ WS.Чего непонятного? Никаих фантазий.
в 2 раза в худшем случае - согласен ! (в реальности, когда еще иногда
встречаются регистр-регистр, намного лучше...)
Цитата
Это понятно, что слова Нейман/Гарвард почти пустой звук по нынешнмм временам, но предполагал, что это все-же пока не для достаточно простых ARM7 ядер.
Дык видать основная борьба и проходит в данный момент по этому флангу...(у производителей)
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 28 2008, 20:09
Сообщение #69


Гуру
******

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



Цитата(aaarrr @ Sep 28 2008, 21:59) *
Я и считаю такты.

Тьфу, привычка по другому организовывать тесты sad.gif
Цитата
...а с другой напрямую к периферийным модулям.

Как-бы да, в действительности каналы DMA у SAM7 не общего назначения разделяемые ресурсы, а исключительно интимные узлы периферии.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
singlskv
сообщение Sep 28 2008, 20:18
Сообщение #70


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(zltigo @ Sep 29 2008, 00:09) *
Как-бы да, в действительности каналы DMA у SAM7 не общего назначения разделяемые ресурсы, а исключительно интимные узлы периферии.
А у SAM9 или AVR32 они что, что-то совсем обособленное ?
конечно они нифига не разделяймые ресурсы, а очень было надо ?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 28 2008, 20:30
Сообщение #71


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(zltigo @ Sep 28 2008, 23:48) *
Не покидает мысль, что что-то не то.

Вы правы, что-то не то при работе из flash. Разбираюсь сейчас.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 28 2008, 20:33
Сообщение #72


Гуру
******

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



Цитата(singlskv @ Sep 28 2008, 22:18) *
...конечно они нифига не разделяймые ресурсы, а очень было надо ?

На Atmel свет клином не сошелся smile.gif. Cуществуют оба варианта Dedicated/General, обычно вместе. Кроме жестких и относительно простых каналов DMA заточенных под переферийное железо, используются и "общего назначения" более сложные DMA с наворотами, например, типа организации обслуживания кольцевых буферов, burst, fifo, big/little endian трансляцией... Они подключаются к периферийным устройствам по необходимости, в том числе и не к у устройствам, а для пересылки память-память. И между устройствами.
Надо.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
singlskv
сообщение Sep 28 2008, 20:40
Сообщение #73


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(zltigo @ Sep 29 2008, 00:33) *
в том числе и не к у устройствам, а для пересылки память-память.
Надо.
Согласен, про память-память не подумал, просто для ARM7 это вроде как не актуально...
Для АРМ9 итд. может быть действительно актуально...
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 28 2008, 20:46
Сообщение #74


Гуру
******

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



Цитата(singlskv @ Sep 28 2008, 22:40) *
Согласен, про память-память не подумал, просто для ARM7 это вроде как не актуально...

Актуально, у ARM7 LPC23/24 кроме локальной еще 2 AHB шины со своми банками памяти.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
singlskv
сообщение Sep 28 2008, 20:54
Сообщение #75


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(zltigo @ Sep 29 2008, 00:46) *
Актуально, у LPC23/24 кроме локальной еще 2 AHB шины со своми банками памяти.
Не знаю толком этих семейств, но это("еще 2 AHB шины со своми банками памяти")
уже не очень похоже на ARM7, подходы совсем другие,
вероятно нечто промежуточное между ARM7 и ARM9.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 28 2008, 21:01
Сообщение #76


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Друзья мои, я опечален ©

Во-первых, из-за ошибки в скрипте линкера у меня клинило DMA при работе из Flash;
а во-вторых, SPI как-то криво работает на частоте MCK/1 sad.gif
Поток SPI пришлось сократить в 2 раза.

RAM 0WS
Код
PDC Idle:  9224
PDC TX:    9832
PDC TX+RX: 11472


FLASH 0WS
Код
PDC Idle:  9216
PDC TX:    9840
PDC TX+RX: 11472


FLASH 1WS
Код
PDC Idle:  15368
PDC TX:    16392
PDC TX+RX: 16400


Тем не менее, можно видеть, что не так уж все и плохо sad.gif

Дополнительно попробовал запустить 2xMCK/2 SPI. Не тянет уже.

RAM 0WS
Код
PDC Idle:  9224
PDC TX:    10928
PDC TX+RX: 12136 (DMA передача не уложилась по времени - 141%)


FLASH 0WS
Код
PDC Idle:  9216
PDC TX:    10928
PDC TX+RX: 12136 (DMA передача не уложилась по времени - 141%)


FLASH 1WS
Код
PDC Idle:  15368
PDC TX:    16392
PDC TX+RX: 19120 (DMA передача не уложилась по времени - 149%)


Такие вот пирожки с котятами.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 28 2008, 21:37
Сообщение #77


Гуру
******

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



Цитата(singlskv @ Sep 28 2008, 22:54) *
уже не очень похоже на ARM7, подходы совсем другие,

Отнюдь, какая разница на одну или две шины дешифрировать адресное пространство - ядро знать не знает. Все достаточно архитектурно просто. В приложении простенькая картинка.

Цитата(aaarrr @ Sep 28 2008, 23:01) *
Такие вот пирожки с котятами.

Тем неменее внесена определенная ясность, и это уже хорошо, ибо даже если не все радужно, то praemonitus praemunitus!
Эскизы прикрепленных изображений
Прикрепленное изображение
 


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 28 2008, 21:41
Сообщение #78


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Итого:
С одной стороны нас никто не обманывает, и запись/чтение периферии через DMA занимает 1/2 такта соответственно, ядро не тормозится.
Но с другой стороны, от шины получилось отгрызть без последствий только 1/8 полосы (что не так уж и плохо - 27.5Мбайт/с).
Очень неприятен момент с торможением DMA-передачи, лучше бы вставало ядро.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 28 2008, 21:44
Сообщение #79


Гуру
******

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



Цитата(aaarrr @ Sep 28 2008, 23:41) *
ядро

существенно
Цитата
не тормозится.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 28 2008, 21:47
Сообщение #80


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(zltigo @ Sep 29 2008, 01:37) *
Тем неменее внесена определенная ясность, и это уже хорошо, ибо даже если не все радужно, то praemonitus praemunitus!

Ну да, не все радужно, конечно smile.gif Но пользоваться вполне можно. Тем более, что перелопатить такой поток, на котором встал DMA, процессор все равно не сможет.

Цитата(zltigo @ Sep 29 2008, 01:44) *
существенно

По мне так лучше бы оно вставало совсем - у меня процессор стоит в качестве дешевой замены FPGA, думать ему особо не приходится smile.gif
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 28 2008, 22:04
Сообщение #81


Гуру
******

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



Цитата(aaarrr @ Sep 28 2008, 23:47) *
Тем более, что перелопатить такой поток, на котором встал DMA, процессор все равно не сможет.

Ну и последний эксперимент увеличить число DMA каналов с 4x до 6-8, какой предел пропускной способности одного канала?
Цитата
Тем более, что перелопатить такой поток, на котором встал DMA, процессор все равно не сможет.

Ну насколько я понял, у Вас, как и у меня, одна из задач пропускать поток частично и мимо контроллера, просто используя его MAC? У меня это, правда, задача вспомогательно-опциональная, но и потоки потоньше - 64Kbit, хотя их побольше - до 16.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 28 2008, 22:18
Сообщение #82


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(zltigo @ Sep 29 2008, 02:04) *
Ну и последний эксперимент увеличить число DMA каналов с 4x до 6-8, какой предел пропускной способности одного канала?

Попробуем, но уже не сегодня.

Цитата(zltigo @ Sep 29 2008, 02:04) *
Ну насколько я понял, у Вас, как и у меня, одна из задач пропускать поток частично и мимо контроллера, просто используя его MAC? У меня это, правда, задача вспомогательно-опциональная, но и потоки потоньше - 64Kbit, хотя их побольше - до 16.

Не совсем так. У меня постоянно передаются один или два потока по 20Мбит/с, но данные для них меняются только при смене фрейма раз в 13мс. Процессору за это время нужно перепаковать и откорректировать (через LUT) данные, полученные из Ethernet'а, и его производительности хватает почти в любом случае.
Go to the top of the page
 
+Quote Post
Shuuura
сообщение Sep 29 2008, 11:31
Сообщение #83


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

Группа: Свой
Сообщений: 80
Регистрация: 23-08-05
Пользователь №: 7 902



Цитата(zltigo @ Sep 27 2008, 22:32) *
Да нет, не как у всех sad.gif - c STM32 работаю. Глюков чрезмерно много - в стиле ST sad.gif (традиция в ряду STR7/9xx)и само ядро V1 с багами, кривыми усеченными "библиотеками" латается отсутствие внятной документации sad.gif и неполность erratа... Но с точки зрения использования малоногих и шустрых (кому еще и малопотребляющих) чипов альтернатив им нет. Буду использовать, ибо LPC1300 уже не дождусь, а LPC210x не вытянут желаемого. Если и начинать с Cortex-M3, то уже почти доступны LPC1700. Там и ядро V2, и периферия от LPC23xx отлаженная и цену на ..дцать процентов меньше обещают.


Можно поподробнее про глюки STM32? А то уж слишком красиво на новый проект ложатся. Кардинальные отличия между версиями Cortex-M3 есть?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 29 2008, 11:49
Сообщение #84


Гуру
******

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



Цитата(Shuuura @ Sep 29 2008, 13:31) *
Можно поподробнее про глюки STM32?

Errata для начала. Дальше - дальше хуже sad.gif часто натыкался просто на невозможность использовать чего-либо удобным способом, хотя по логике вещей вроде и не должно было-бы быть проблем. Может это и не баги, а неописаные ограничения sad.gif.
Вместо документации, блин, "библиотеки". Если свобода творчества в пределах ограниченных "библиотеками" устравивает, то наверное и проблем особых вообще не будет.
Цитата
А то уж слишком красиво на новый проект ложатся.

Пользуйте, как-нибудь обойдете.
Цитата
Кардинальные отличия между версиями Cortex-M3 есть?

Есть sad.gif Где-то 5 багов в ядре постепенно от подверсии к подверсии исправлявниеся, но все известное исправленно во второй версии (но это будет только в LPC + несколько новых команд). Компиляторы латают.
По Corteх есть отдельная ветка - продолжите там.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
defunct
сообщение Sep 29 2008, 16:12
Сообщение #85


кекс
******

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



Цитата(zltigo @ Sep 27 2008, 21:32) *
Вы мне пытаетесь объяснить, что без DMA совсем труба? - согласен. Для помянутого тупого заглатывания по UART 256 байтовых пакетов формально DMA типа меньше ресурсов потребит, нежели 16байтовое FIFO у LPC, только вот что-то я никогда не писал алгоритмов по заглатыванию 256 байт всякой всячины и возможного мусора и последующем ДОЛГОМ в нем копании.

Насчет заглатывания UART'a - поддерживаю. Байт-ориентед удобнее побайтово принимать и разгребать.

А вот такая задачка: оцифровка с последущим анализом (FFT) и воспроизведение звука с минимальным джиттером между семплами, скажем так Fd= 44.1kHz, mono. С SAM'овским DMA задача решается на ура без интервенции процессора, получаем сразу подготовленные для FFT выборки требуемого размера. Жрет на SAM'е эта задачка процентов 10 ресурсов проца. Будет ли такая же эффективность на LPC без DMA? И вообще можно ли ее решить на LPC, если учесть что эта задача - не самоцель, а есть еще и другие функции выполяемые МК (FIQ то только один)?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 29 2008, 17:01
Сообщение #86


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(defunct @ Sep 29 2008, 20:12) *
Будет ли такая же эффективность на LPC без DMA?

Дык на новых LPC есть DMA.


Посмотрел Atmel'овские статейки. Очень мило пишут про PDC, типа:
Цитата
The device easily supports 25 Mbps SPI or TWI transfers, and still has 96% of it resources available to execute embedded control functions.

Всюду они эти 25Мбит суют. А TWI приплетен вообще непонятно каким боком, ибо к PDC подключения не имеет, а 25Мбит передавать не может по определению.

Easily, блин. А за easily сразу кирдык mad.gif
Go to the top of the page
 
+Quote Post
defunct
сообщение Sep 29 2008, 19:03
Сообщение #87


кекс
******

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



Цитата(aaarrr @ Sep 29 2008, 20:01) *
Дык на новых LPC есть DMA.

Это в новых, а в тех что нет? Задачка в защиту "полной непотребности" SAM7 DMA.

Цитата(aaarrr @ Sep 29 2008, 20:01) *
А TWI приплетен вообще непонятно каким боком, ибо к PDC подключения не имеет, а 25Мбит передавать не может по определению.

опечатка вестимо. доки пишут иногда люди далекие от все этого.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 29 2008, 19:15
Сообщение #88


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(defunct @ Sep 29 2008, 23:03) *
Это в новых, а в тех что нет?

Вместо старого NXP лучше взять новый NXP, а не старый Atmel. О чем спорить-то?

Цитата(defunct @ Sep 29 2008, 23:03) *
Задачка в защиту "полной непотребности" SAM7 DMA.

Ну, о полной непотребности говорить уже не приходится. Хотя некоторая непотребность/недодокументированность есть.

Цитата(defunct @ Sep 29 2008, 23:03) *
опечатка вестимо. доки пишут иногда люди далекие от все этого.

Это из статьи. Опечатка забавная - вспомнили самый глючный модуль, которому этого PDC весьма, кстати, не хватает.
Go to the top of the page
 
+Quote Post
VslavX
сообщение Sep 30 2008, 08:08
Сообщение #89


embarrassed systems engineer
*****

Группа: Свой
Сообщений: 1 083
Регистрация: 24-10-05
Из: Осокорки
Пользователь №: 10 038



Цитата
джиттером между семплами, скажем так Fd= 44.1kHz, mono. С SAM'овским DMA задача решается на ура без интервенции процессора, получаем сразу подготовленные для FFT выборки требуемого размера. Жрет на

+1 - использую я PDC для АЦП на SAM7 - _очень_ удобно. На LPC пришлось для тех же целей все "ручками" делать.
+1 - еще PDC использую для SPI - у меня второй абонент более 4мбит не жрет, так что ни о какой блокировке шины речи не идет.
-1 - для MMC/SD по SPI PDC не очень хорошо подходит - удобнее побайтно, параллельно считая CRC
-1 - еще пытался использовать PDC для USARTа (протоколы на RS-485) - не понравилось, код распух, хотя ресурсов немного меньше от процессора отожралось. В итоге вернулся к "побайтовому" разбору - SAM-овский UART очень рулит - не понадобился допонительный таймер.
P.S. А вообще потихоньку переходим с SAM7A3/S/X/SE на LPC214x/23x8/24x8 - быстрее, честные RTC, номенклатура больше (есть 144-ногие). И по большому счету - уже пофиг LPC или SAM - HAL-ы под наши задачи понаписаны на оба семейства, все максимально абстрагировано получается. Как "партия" (рыночная коньюнктура) прикажет - такой проц и заложим smile.gif, нефиг из LPC или SAM религию устраивать.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 30 2008, 11:15
Сообщение #90


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(VslavX @ Sep 30 2008, 12:08) *
-1 - еще пытался использовать PDC для USARTа (протоколы на RS-485) - не понравилось, код распух, хотя ресурсов немного меньше от процессора отожралось. В итоге вернулся к "побайтовому" разбору - SAM-овский UART очень рулит - не понадобился допонительный таймер.

А необходимость мгновенной реакции на прерывание не напрягает? ИМХО, для UART'а как раз он очень удобен.
Go to the top of the page
 
+Quote Post
Dron_Gus
сообщение Sep 30 2008, 11:45
Сообщение #91


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 9-01-05
Из: Санкт-Петербург
Пользователь №: 1 861



Раз уж пошел оффтопик полный. Предлагаю высказаться по поводу реализации DMA (да и FIFO) в STR912FAW**. На мой скромный взгляд, очень качественно и гибко. Это, конечно, уже ARM9...


--------------------
Если сверху смотреть, то сбоку кажется, что снизу ничего не видно.
Go to the top of the page
 
+Quote Post
VslavX
сообщение Sep 30 2008, 12:32
Сообщение #92


embarrassed systems engineer
*****

Группа: Свой
Сообщений: 1 083
Регистрация: 24-10-05
Из: Осокорки
Пользователь №: 10 038



Цитата(aaarrr @ Sep 30 2008, 14:15) *
А необходимость мгновенной реакции на прерывание не напрягает? ИМХО, для UART'а как раз он очень удобен.

"Мгновенность" критична только на приеме. У меня максималка 115200 -~100мкс (пользую два стопа почти всегда) примерно в запасе есть, чтобы забрать байт. В 99.9999% байты успешно забираются, а если какие-то проблемы - это все решается протоколом на канальном уровне - ретрансмитты и прочее.
Без таких "решающих" протоколов вылазить на RS-485 бессмысленно, ну и заодно они "решат" проблему если кто-то "не успел".
Вообще я иногда тестирую свои системы на realtime - как правило время реакции на прерывание - не хуже 15-20мкс на TNKernel на 48МГц SAM7. На LPC-ях пока не гонял, должно быть еще веселее.
И даже взял моду "сложные" прерывания (типа USB, EMAC) обрабатывать в отдельном высокоприоритетном потоке - время переключения считанные мкс, а структура программы становится линейной и упрощается чуть ли не в разы, на синхронизацию доступа к регистрам оборудования можно вообще забить.
Go to the top of the page
 
+Quote Post
defunct
сообщение Sep 30 2008, 13:23
Сообщение #93


кекс
******

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



Цитата(aaarrr @ Sep 30 2008, 14:15) *
ИМХО, для UART'а как раз он очень удобен.

+1 для TX бесспорно.
для RX куда приятнее побайтово, будь-то пакетный протокол или консоль с упр. символами.

Цитата
А необходимость мгновенной реакции на прерывание не напрягает?

А зачем мгновенная реакция? Проц 55Mhz, частота прерываний uart'a at max - 11.52kHz (на 115200).

Цитата(aaarrr @ Sep 29 2008, 22:15) *
Вместо старого NXP лучше взять новый NXP, а не старый Atmel. О чем спорить-то?

В таком ключе пожалуй не о чем ;>

А вместо старого SAM'a, стоит ли брать новый NXP?
Go to the top of the page
 
+Quote Post
VslavX
сообщение Sep 30 2008, 13:53
Сообщение #94


embarrassed systems engineer
*****

Группа: Свой
Сообщений: 1 083
Регистрация: 24-10-05
Из: Осокорки
Пользователь №: 10 038



Цитата(defunct @ Sep 30 2008, 16:23) *
+1 для TX бесспорно.

Не-а, для сколько-нибудь сложных протоколов для TX тоже приятнее побайтово - не надо заводить отдельный буфер, копировать туда куски разных полей, потом вычислять сумму пакета за один проход.
А "побайтово" - генерируешь многие куски пакета "на лету" и вычисление суммы "размазывается" по времени. Реализация "моего" протокола без PDC мне больше понравилась. Хотя - "случаи - они разные бывают".
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 30 2008, 14:10
Сообщение #95


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(defunct @ Sep 30 2008, 17:23) *
А зачем мгновенная реакция? Проц 55Mhz, частота прерываний uart'a at max - 11.52kHz (на 115200).

Ну, в основном их заводят на 48MHz. И UART бывает не только на 115200, особенно если это RS-485.

Цитата(defunct @ Sep 30 2008, 17:23) *
А вместо старого SAM'a, стоит ли брать новый NXP?

ИМХО, стоит.
Go to the top of the page
 
+Quote Post
defunct
сообщение Sep 30 2008, 16:14
Сообщение #96


кекс
******

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



Цитата(VslavX @ Sep 30 2008, 16:53) *
Не-а, для сколько-нибудь сложных протоколов для TX тоже приятнее побайтово - не надо заводить отдельный буфер, копировать туда куски разных полей, потом вычислять сумму пакета за один проход.

У меня обычно любой протокол сводится к
xx_SendPacket( U8 *pData, int size);
Просто и дубово, считать CS удобнее.
Заводить отдельный буфер не надо, можно использовать буфер принятого пакета для формирования отправляемого.

Цитата(aaarrr @ Sep 30 2008, 17:10) *
И UART бывает не только на 115200, особенно если это RS-485.

Угу, бывает и 9600 особенно 485.
Насчет же скоростей выше 115200, есть и более подходящие для этого интерфейсы (eth/usb)
Go to the top of the page
 
+Quote Post
zltigo
сообщение Sep 30 2008, 16:52
Сообщение #97


Гуру
******

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



Цитата(defunct @ Sep 30 2008, 15:23) *
А вместо старого SAM'a, стоит ли брать новый NXP?

Без вариантов. На самом старом семействе типа LPC211x/22xx/210x там выбор может быть очень труден, для LPC213x/4x - ну только если чего-то типа I2S требуется, или совсем в масть что-то ложится. А на LPC23xx/24xx просто без вариантов. Тем более,что новые семейства дешевле и старых, и SAM7. http://mt-system.ru/index.php?store_search=lpc2&id=5


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 06:04
Рейтинг@Mail.ru


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