Jump to content

    
Apollo

Написание программы и одновременно наладка железа на STM32F091

Recommended Posts

2 часа назад, C2000 сказал:

Осциллограмму могу скинуть, только ведь скажите что я и ее подделал.

При чём тут осциллограмма? Что такое джиттер - знаете? Почитайте в википедии хотя-бы.

Тогда может поймёте, что на осциллограмме может быть много миллионов абсолютно одинаковых периодов, а потом один период - на N тактов отличающийся от них. И джиттер тут и будет определяться этим единственным периодом. Какие-бы длинные портянки осциллограмм Вы не видели до этого одного периода. И просто тупо глядя на осциллограмму, Вы этого джиттера никогда не увидите. Так как чтобы видеть, нужно: знать что искать и уметь искать. О чём я выше уже говорил.

Цитата

Ранее были сомнения по одновременной работе прерывания и DMA по этому их и реализовал, но согласен надо добавить еще одни канал DMA с более низким приоритетом, который будет непрерывно писать MemToMem. Позже сделаю.

Да уж.... :unknw:  AN2548 вы так и не прочитали. Или прочитали, но не поняли...

2 часа назад, adnega сказал:

В теории досконально не разбирался, но на практике 12 тактов наблюдал и побороть не смог.

В AN2548 ST показывает случай задержки обработки DMA-запроса на 18 тактов. Это в случае если все запросы идут только по AHB. Если задействуется APB, то обещают ещё больше.

Но ведь адептов-плоскоземельщиков это не убеждает. Они продолжают трындеть: "Я смотрю под ноги и вижу, что Земля плоская, всё это враки, что она - шарообразная".

46 минут назад, C2000 сказал:

Максимальный джиттер (доп. задержка которую нельзя заранее предсказать) 5 тактов = +-2.5, задержка самого канала DMA не в счёт она всегда одна и та же.

Значит ST врёт в своём AN2548?  :wink:

18 минут назад, C2000 сказал:

Я уже писал что когда человеку нахватает знаний и опыта и ему нечего сказать, он начинает заниматься болтовней, дабы отвлечь окружающих от своего слабоумия.

Очень самокритично...  :biggrin:

 

16 минут назад, adnega сказал:

Предлагаю этот вопрос закрыть, т.к. он всплыл от неуверенности работоспособности  связки GPIO+TIM+DMA. Связка работоспособна.

Вопрос был не в этом. Напоминаю с чего началось:

После чего набежала толпа плоскоземельщиков. Под лозунгом: "Если я этого не вижу, значит этого нет".

Share this post


Link to post
Share on other sites
20 minutes ago, jcxz said:

В AN2548 ST показывает случай задержки обработки DMA-запроса на 18 тактов. Это в случае если все запросы идут только по AHB. Если задействуется APB, то обещают ещё больше.

В каком случае джиттер будет 18 тактов? При обращении к APB доп. задержка тоже плавающая или детерминированная?

Задержка (та что фиксированная) на передачу данных по DMA не создает никаких проблем/джиттера!

Джиттер вызывается только задержкой обусловленной тем что до этого уже начал транзакцию другой канал и эта доп. задержка максимум 5 циклов.

Прочитайте все же предоставленный Вами документ еще раз. Кстати за него большое спасибо, очень полезно.

Share this post


Link to post
Share on other sites
20 минут назад, jcxz сказал:

Вопрос был не в этом. Напоминаю с чего началось:

Да, вы все верно подметили. Я для 168МГц прикинул задержки: порядка 72 нс при допуске 150 нс. Джиттер будет еще меньше.

Я когда первый раз столкнулся с задержками DMA, был настолько разочарован, что к DMA сейчас отношусь как к медленному аппаратному блоку,

единственное преимущество которого - делать что-то без участия CPU.

Share this post


Link to post
Share on other sites
35 minutes ago, jcxz said:

Тогда может поймёте, что на осциллограмме может быть много миллионов абсолютно одинаковых периодов, а потом один период - на N тактов отличающийся от них. И джиттер тут и будет определяться этим единственным периодом. Какие-бы длинные портянки осциллограмм Вы не видели до этого одного периода. И просто тупо глядя на осциллограмму, Вы этого джиттера никогда не увидите. Так как чтобы видеть, нужно: знать что искать и уметь искать. О чём я выше уже говорил.

Почему Вы считаете что вы самый умный в этом мире и только вам известны все истинны на этом свете?

И никто другой не знает как пользоваться осциллографом. Как замерять максимальные и минимальные периоды, время между фронтами двух сигналов.

Ну да эти знания доступны лишь избранным, к которым Вы себя причислили)))

3 minutes ago, adnega said:

Да, вы все верно подметили. Я для 168МГц прикинул задержки: порядка 72 нс при допуске 150 нс.

В чем проблема скомпенсировать фиксированную часть задержки правильной настройкой синхроимпульса и оставить только джиттер?

Share this post


Link to post
Share on other sites
1 минуту назад, C2000 сказал:

Почему Вы считаете что вы самый умный в этом мире и только вам известны все истинны на этом свете?

Товарищи! В чем смысл выяснения отношений и переходов на личности? Все все поняли, всем все ясно.

Если ТС заложит F091, то по грабелькам, может, и пройдется - дык, опыт будет, и нам повод по-обсуждать.

Заложит жирный МК - будет только основным функционалом заниматься без углубления в дебри и побочные явления.

Меня бы F091 как исполнителя для данного ТЗ - отпугнул.

Share this post


Link to post
Share on other sites
1 hour ago, adnega said:

Товарищи! В чем смысл выяснения отношений и переходов на личности? Все все поняли, всем все ясно.

Если ТС заложит F091, то по грабелькам, может, и пройдется - дык, опыт будет, и нам повод по-обсуждать.

Заложит жирный МК - будет только основным функционалом заниматься без углубления в дебри и побочные явления.

Меня бы F091 как исполнителя для данного ТЗ - отпугнул.

Не, ему не жирный камень нужен, а переделать архитектруру.
На звук кодек, на LED-ы спец. периферию типа FlexIO.
 

Share this post


Link to post
Share on other sites
2 часа назад, C2000 сказал:

В каком случае джиттер будет 18 тактов? При обращении к APB доп. задержка тоже плавающая или детерминированная?

Теперь разжуём доходчиво, что написано в AN2548, раз уж сами не поняли.

Сначала прочитайте, что такое джиттер: https://ru.wikipedia.org/wiki/Джиттер#:~:text=jitter — дрожание) или фазовое дрожание,или частотные отклонения передаваемого сигнала.

Т.е. - обусловлен он тем, что задержка может быть, а может не быть. Если в момент поступления DMA-запроса шина свободна, то от DMA-запроса до завершения его обслуживания должно пройти (согласно 5.1.2) порядка ~5 AHB-тактов (это если обращения только к AHB, если APB - больше).

Это в лучшем случае. А худший случай приведён на Figure 4. Это когда наш DMA-запрос проигрывает арбитраж двум другим bus-master: CPU и DMA2. тогда его обслуживание завершится только через 2+3*3 такта от прихода DMA-запроса (2 AHB-такта - арбитраж + 2*3 AHB-такта - чужие минимальные доступы к шине + 3 такта - свой доступ к шине). И это в случае если все чужие доступы (DMA2 и CPU) простые - только по три такта. Как пишут:

"For example in simple case of minimum latency per each bus access, the time for which the bus is occupied equals three clock cycles."

Что как бы намекает на то, что они могут быть и более 3-х тактов. Это когда идёт обращение например или на APB-шину (работающую на малой частоте) или обращение к периферии типа CRC (затягивающей цикл обращения до завершения вычислений до 4 AHB-тактов) или к FLASH-памяти (имеющей латентность в несколько тактов). Также неясен момент: пакетные пересылки CPU<->RAM (типа стэкинга) могут ли прерываться DMA-контроллерами или нет? Во всём AN2548 я не нашёл явного указания на то, что процессорные передачи могут прерываться передачами DMA, хотя обратное - что процессор может прервать DMA-пересылку - об этом даже несколько раз сказано. Так что вполне возможно, что процессор может выполнять непрерывные пакетные обращения к ОЗУ более чем 3 цикла AHB (так как явно не указано обратное, то подразумеваем худший случай). Но даже и без этого - джиттер обеспечен.

Отсюда и возникает джиттер: когда один DMA-запрос обрабатывается 5 тактов (после 5 тактов от сигнала таймера на GPIO изменяется состояние), а следующий за ним - на пару десятков тактов больше. И никакой предсказуемости нет. Джиттер - он не из-за константных задержек возникает, а из-за случайных. Которые могут быть, а могут - нет.

Подумайте например, что будет (согласно Figure 4 AN2548) если DMA1 req CHANNEL0 - запрос вашего таймера (для пересылки ОЗУ->GPIO (AHB2)), а в 1-й фазе DMA2 выполняется пересылка FLASH(с кеш-промахом) -> GPIO (AHB2), а затем в следующей фазе CPU выполняется пересылка ОЗУ->CRC (AHB1), и только потом выполнится ваша передача ОЗУ->GPIO или FLASH->GPIO.

Цитата

Джиттер вызывается только задержкой обусловленной тем что до этого уже начал транзакцию другой канал и эта доп. задержка максимум 5 циклов.

Прочитайте все же предоставленный Вами документ еще раз. Кстати за него большое спасибо, очень полезно.

Вот именно что сами и прочитайте. Где там указано, что "максимум 5 циклов"? Укажите точное место. И 5 циклов чего?

Share this post


Link to post
Share on other sites
5 hours ago, jcxz said:

Теперь разжуём доходчиво, что написано в AN2548, раз уж сами не поняли.

Сначала прочитайте, что такое джиттер: https://ru.wikipedia.org/wiki/Джиттер#:~:text=jitter — дрожание) или фазовое дрожание,или частотные отклонения передаваемого сигнала.

Т.е. - обусловлен он тем, что задержка может быть, а может не быть. Если в момент поступления DMA-запроса шина свободна, то от DMA-запроса до завершения его обслуживания должно пройти (согласно 5.1.2) порядка ~5 AHB-тактов (это если обращения только к AHB, если APB - больше).

Это в лучшем случае. А худший случай приведён на Figure 4. Это когда наш DMA-запрос проигрывает арбитраж двум другим bus-master: CPU и DMA2. тогда его обслуживание завершится только через 2+3*3 такта он прихода DMA-запроса. И это в случае если все чужие доступы (DMA2 и CPU) простые - только по три такта. Как пишут:

"For example in simple case of minimum latency per each bus access, the time for which the bus is occupied equals three clock cycles."

Что как бы намекает на то, что они могут быть и более 3-х тактов. Это когда идёт обращение например или на APB-шину (работающую на малой частоте) или обращение к периферии типа CRC (затягивающей цикл обращения до завершения вычислений до 4 AHB-тактов) или к FLASH-памяти (имеющей латентность в несколько тактов). Также неясен момент: пакетные пересылки CPU<->RAM (типа стэкинга) могут ли прерываться DMA-контроллерами или нет? Во всём AN2548 я не нашёл явного указания на то, что процессорные передачи могут прерываться передачами DMA, хотя обратное - что процессор может прервать DMA-пересылку - об этом даже несколько раз сказано. Так что вполне возможно, что процессор может выполнять непрерывные пакетные обращения к ОЗУ более чем 3 цикла AHB (так как явно не указано обратное, то подразумеваем худший случай). Но даже и без этого - джиттер обеспечен.

Отсюда и возникает джиттер: когда один DMA-запрос обрабатывается 5 тактов (после 5 тактов от сигнала таймера на GPIO изменяется состояние), а следующий за ним - на пару десятков тактов больше. И никакой предсказуемости нет. Джиттер - он не из-за константных задержек возникает, а из-за случайных. Которые могут быть, а могут - нет.

Подумайте например, что будет (согласно Figure 4 AN2548) если DMA1 req CHANNEL0 - запрос вашего таймера (для пересылки ОЗУ->GPIO (AHB2)), а в 1-й фазе DMA2 выполняется пересылка FLASH(с кеш-промахом) -> GPIO (AHB2), а затем в следующей фазе CPU выполняется пересылка ОЗУ->CRC (AHB1), и только потом выполнится ваша передача ОЗУ->GPIO или FLASH->GPIO.

Вот именно что сами и прочтайте. Где там указано что максимум 5 циклов? Укажите точное место. И 5 циклов чего?

1. DMA2 в STM32F030 нет

2. Не пересылайте через DMA из FLASH, так же как и не используйте другие каналы в режиме burst (да ограничения есть, никто не говорил что сломать работу модуля нельзя)

3. Прерывания на работу DMA не влияют, как раз это было проверено в тестовой прошивке.

4. Поясните пожалуйста что за 2 +3*3 откуда эти цифры?

Share this post


Link to post
Share on other sites
22 минуты назад, C2000 сказал:

1. DMA2 в M0 нет

Это открытие! :biggrin:  Скажу даже больше: В M0 нет не только DMA2, но и DMA1!  :biggrin: Как и в M3/M4/M7.

А вот в STM32F091 уже есть и DMA1 и DMA2.

Цитата

2. Не пересылайте через DMA из FLASH, так же как и не используйте другие каналы в режиме burst (да ограничения есть, никто не говорил что сломать работу модуля нельзя)

Хм... Что ещё барин запретить изволит? :russian_ru:

А если в ОЗУ места маловато, как быть?

Цитата

3. Прерывания на работу DMA не влияют, как раз это было проверено в тестовой прошивке.

ну-ну...

Цитата

4. Поясните пожалуйста что за 2 +3*3 откуда эти цифры?

Из формулы данной в 5.1.1 и из Figure_4 и подписи к ней (где указано "in simple case of minimum latency per each bus access, the time for which the bus is occupied equals three clock cycles"). Именно, что "in simple case", в других case может быть и больше. Но даже в simple case будет 2+3*3 на обслуживание "DMA1 req CHANNEL 0".

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.