Перейти к содержанию
    

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

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

Как может возникнуть 12 тактов, прошу объяснить с ссылкой на документацию. Это не придирки, просто хочется понять ход Вашей мысли.

Первая: Читайте описание Cortex-M и в частности - процедур stacking-а и unstacking-а.

Вторая (из мануала на STM32F091, описание модуля CRC):

crc-ahb.thumb.png.c7c2587c6726f4c9f65549691679a4ac.png

Уже только из этого можно сделать вывод что если CPU выполняет запись в регистр данных CRC и в этот момент он получает сигнал прерывания, то: 4 + 12 тактов занятости шины обеспечена (CPU как правило имеет бОльший приоритет доступа к шине чем DMA). А в реальности - ещё немного больше из-за арбитража и пр.

Цитата

Ну и по поводу дребезга если он "ничтожен" по сравнению с частотой сигнала то можно считать что его нет.

Ну да: У ТС-а частота шины SYSCLK = 16МГц, тут возникает задержка в ~16 тактов (а скорее даже больше) - это всего какая 1 мкс - ерунда!  :unknw:

15 минут назад, AlexandrY сказал:

А то что в SoC-ах есть отдельные шины для DMA ни о чем не говорит? 

STM32F091 - SoC? Причём тут они? Или Вы опять пытаетесь встрять с рекламой какого-то чудо-чипа? Который ещё и программируется совсем без си  :biggrin:

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

Ну расскажите и дайте ссылку на документацию, из которой было бы что то понятно

В гугле забанили? Гугл на запрос "Cortex-M stacking procedure" или "Cortex-M Exception Handling" выдаёт много полезного.

Также есть: https://developer.arm.com

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

7 minutes ago, jcxz said:

Вторая (из мануала на STM32F091, описание модуля CRC):

crc-ahb.thumb.png.c7c2587c6726f4c9f65549691679a4ac.png

 

Это означает что на это время блокируется работа DMA? 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Это означает что на это время блокируется работа DMA? 

Блокируется шина.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Just now, jcxz said:

Блокируется шина.

Это точно, Вы проверяли? Вроде бы написано что вычисляется за 4 такта, о блокировке ничего не сказано.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Это точно, Вы проверяли? Вроде бы написано что вычисляется за 4 такта, о блокировке ничего не сказано.

В мануале на этот МК не сказано, но в мануале на STM32F4 сказано:

crc-stalling.thumb.png.81b9269210c1d91c5acb2a3b3e532a47.png

И я сомневаюсь, что в более слабой архитектуре дела обстоят лучше. Скорее будет хуже.

 

Да и не CRC наиболее страшен. А что будет например если CPU завершает выполнение текущего ISR (выполняет unstaking), и только он это закончил - ему приходит новое прерывание и он выполняет stacking. А DMA-запрос приходит в момент начала unstaking-а. А ведь для полной отработаки DMA-запроса нужно сделать две операции: чтение памяти + запись в периферию. Т.е. - два цикла обращения к шине. А CPU - в приоритете. :unknw:

А если в это время ещё как раз работал другой DMA-канал. А может он даже гнал данные в CRC! :dash2:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

19 minutes ago, jcxz said:

... А ведь для полной отработаки DMA-запроса нужно сделать две операции: чтение памяти + запись в периферию. Т.е. - два цикла обращения к шине. А CPU - в приоритете. :unknw:

Опять голословное утверждение.

Выдержка из документации STM32F03:

The BusMatrix manages the access arbitration between the core system bus and the DMA master bus. The arbitration uses a Round Robin algorithm

 

25 minutes ago, jcxz said:

...А что будет например если CPU завершает выполнение текущего ISR (выполняет unstaking)...

Вы хотите сказать что сохранение контекста при входе в прерывание атомарная операция? Аргументируйте!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Опять голословное утверждение.

Выдержка из документации STM32F03:

The BusMatrix manages the access arbitration between the core system bus and the DMA master bus. The arbitration uses a Round Robin algorithm

И что? К чему это?

 

PS: Не понимаю - с чем спорите. :wacko2:  Так всё-таки - есть джиттер или нет? Ведь именно с этого начался весь сыр-бор - с моего утверждения, что "строгого тайминга" на связке таймер-DMA-GPIO никак не добиться. С чем Вы не согласились. 

Считаете, что DMA мгновенно телепортирует данные из приёмника в источник мимо всех шин и прочих мешающих сущностей? :biggrin:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

30 minutes ago, jcxz said:

В мануале на этот МК не сказано, но в мануале на STM32F4 сказано:

crc-stalling.thumb.png.81b9269210c1d91c5acb2a3b3e532a47.png

Так это про запись следующих данных для расчёта CRC:biggrin:

Причем тут шина и DMA

3 minutes ago, jcxz said:

И что? К чему это?

К тому что у CPU нет никакого приоритета перед DMA

И изначально речь о существенном или нет влиянии джиттера на передачу данных через DMA

А так он конечно есть причем всегда и везде, речь лишь о том в какой степени он мешает (или нет) работе.

Все в этом мире оценивается относительно и нет ничего идеального

И хочется все же разъяснить что там с этим  стекинг-анстекинг что в нем такого ужасного и страшного? честно слово интересно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Так это про запись следующих данных для расчёта CRC:biggrin:

Причем тут шина и DMA

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

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

К тому что у CPU нет никакого приоритета перед DMA

Во-первых: фраза про "round robin" - вообще никак не говорит о приоритетах. Где явное указание на приоритет? Round robin может выполняться с учётом приоритета некоторых участников.

Во-вторых: нигде не указано, что арбитраж будет выполняться на каждом такте шины. Почему не предположить, что "round robin" будет выполняться каждый N-й такт? есть конкретная ссылка?

В-третьих: Смотрите внимательнее на указанный случай: Имеем случай - выход из ISR и сразу вход. Ранее (до всего этого) DMA выиграл "round robin" и теперь приоритет у CPU, но в начале unstacking-а не было ещё DMA-запроса (он появился на такт позднее), поэтому розыгрыш арбитража не проводился (и всё осталось по-старому), в при процедуре stacking-а выиграл CPU, так как у него приоритет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ладно, спор бессмыслен без реализации в железе. Можно тут долго друг другу что то доказывать, но только топик стартеру похоже это вообще не нужно :blum3:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Ладно, спор бессмыслен без реализации в железе. Можно тут долго друг другу что то доказывать, но только топик стартеру похоже это вообще не нужно :blum3:

Спор быссмысленен уже потому, что Вы не имели реального опыта работы с Cortex-M.

А вот я уже неоднократно сталкивался с тем, что DMA-запросы не обрабатываются мгновенно. Как и другие участники здесь. О чём и писал.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 minutes ago, jcxz said:

Спор быссмысленен уже потому, что Вы не имели реального опыта работы с Cortex-M.

И снова голословное утверждение

Это кстати тоже хороший повод прекратить дискуссию.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

От WS2812B думаю уже давно все отказались.
Теперь на APA102 c SPI подобным интерфейсом все делают. Они  гораздо более надежные и цветопередача лучше. 
У меня с ними работает по DMA на 10 МГц

 

Этим APA102 уже столько лет, а от WS2812 до сих пор не отказываются. К тому же, из SPI совсем несложно сделать нужный сигнал:

 

bad-409.gif.6d704cfc548fac6194dfdb4d591bf56e.gif

 

Триггер SN74LVC1G175, диодная сборка BAT54A, BAS40-06 и т.п.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 hours ago, jcxz said:

И что будет делать DMA-контроллер?

Вот никогда не задумывался... У меня всегда есть активные DMA: отсылка данных по USART, измерение нескольких каналов АЦП, работа с SPI и т.п.

И ни разу не замечал проблем. Внешне кажется, что все каналы DMA одновременно работают и друг другу не мешают! Главное - не сажать разную нагрузку на один канал, тогда действительно фигня будет: сможет работать лишь кто-то один.

А если есть два DMA, да еще и по куче каналов на каждом, то это просто шикарно!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 минут назад, Eddy_Em сказал:

Вот никогда не задумывался... У меня всегда есть активные DMA: отсылка данных по USART, измерение нескольких каналов АЦП, работа с SPI и т.п.

А теперь попробуйте вывести сигнал на GPIO. И посмотреть на его джиттер. 

8 минут назад, Eddy_Em сказал:

И ни разу не замечал проблем.

Потому что у всех перечисленных есть FIFO. Того или иного размера. Потому и работает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

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

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...