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

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

14 minutes ago, jcxz said:

PS: Ни о каких "строгих таймингах" в этом случае и речи быть не может. Ну разве что если только остановить ядро и выключить все другие DMA-каналы и прочие bus-мастеры. Но в этом случае теряется смысл использования DMA.

Ну смотря что считать строгим таймингом +- 1-2 такта шины вряд ли будут критичными. И насчёт остальных каналов DMA: есть возможность настройки правильных приоритетов.

1 hour ago, adnega said:

Настраиваем 3 канала совпадения (можно и два, если очень захотеть).

Первый записывает через DMA лог "1" во все нужные пины GPIOx->BSRR (это может быть UP-событие).

Второй канал через 0.35 мкс записывает значение в GPIOx->BSRR из специального массива M[0].

Третий канал через 0.9 мкс записывает значение в GPIOx->BSRR из специального массива M[1].

Задача подготовить два 32-(можно и 16-)битных массива M[0] и M[1], по одному элементу на каждый бит.

Т.е. размер в элементах равен 24 * N, где N-число светодиодов в линий.

Но так можно до 16 линий одновременно рулить.

Если памяти жалко, то можно попробовать в кольцевом DMA готовить данные на лету.

А что напрямую в порт нельзя писать, только через SET/RESET? Единственное остальные выводы порта не должны использоваться как GPIO_OUT

И что мешает настроить 8 битные массивы? К регистрам GPIO нет доступа побайтно?

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


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

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

Ну смотря что считать строгим таймингом +- 1-2 такта шины вряд ли будут критичными. И насчёт остальных каналов DMA: есть возможность настройки правильных приоритетов.

Откуда взяли эти цифры "1-2 такта"? Имхо - намного больше.

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

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


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

4 minutes ago, jcxz said:

Откуда взяли эти цифры "1-2 такта"? Имхо - намного больше.

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

Это еще почему? Откуда Вы вообще взяли такую информацию? Если конечно у Вас транзакция в режиме Burst настроена. Но кто мешает так не делать?

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


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

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

PS: Ни о каких "строгих таймингах" в этом случае и речи быть не может. Ну разве что если только остановить ядро и выключить все другие DMA-каналы и прочие bus-мастеры. Но в этом случае теряется смысл использования DMA.

По моим ощущениям, DMA-транзакция может занимать порядка 12 тактов, это при 168МГц порядка 0.071 мкс.

Да, дребезжать фронты будут, но по-моему не критично.

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


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

По вашему если я в UART начал передавать 100 байт на скорости 1200, то DMA будет заблокирован пока все 100 байт не передадутся?:biggrin:

1 minute ago, adnega said:

По моим ощущениям, DMA-транзакция может занимать порядка 12 тактов, это при 168МГц порядка 0.071 мкс.

Да, дребезжать фронты будут, но по-моему не критично.

Что значит по Вашим ощущениям? Откуда эти цифры?

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


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

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

Это еще почему? Откуда Вы вообще взяли такую информацию? Если конечно у Вас транзакция в режиме Burst настроена. Но кто мешает так не делать?

Причём тут burst? DMA-канал получив DMA-запрос (который выиграл приоритет среди других DMA-запросов) должен выполнить: 1) чтение источника; 2) запись источника. Если во время выполнения этих операций появится другой DMA-запрос (к другому DMA-каналу), он будет ждать завершения работы текущего. Сколько бы он ни выполнялся тактов. Так как DMA-контроллеры обычно умеют обслуживать только один запрос за раз. К тому же - в МК ТС-а (STM32F091) DMA-контроллер не имеет FIFO.

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


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

1 hour ago, jcxz said:

как на этом обеспечить "строгие тайминги" на выводах этих самых "адресных светодиодов"?

Я вот не нашел в тексте упоминания, что же за светодиоды такие. Если это - WS2812B, то там никаких синхроимпульсов нет (а ТС вроде говорил о синхроимпульсах), да и погрешность таймингов — аж ±150нс!

В общем загадки сплошные...

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


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

Ну и сколько тактов надо чтобы передать из одной ячейки памяти в другую? Я и написал +- пара тактов

Потом арбитраж выйграет канал с большим приоритетом

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


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

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

По моим ощущениям, DMA-транзакция может занимать порядка 12 тактов, это при 168МГц порядка 0.071 мкс.

Я об этом и говорю. Эт уже вполне реальная цифра. Но может быть и больше в некоторых случаях. Просто такие дребезги будут реже происходить.

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

Да, дребезжать фронты будут, но по-моему не критично.

Ну он есть. В отличие от использования SPI, где его совсем нет (ну если не сичтать тепловой шум ;)

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

По вашему если я в UART начал передавать 100 байт на скорости 1200, то DMA будет заблокирован пока все 100 байт не передадутся?:biggrin:

Читайте внимательнее. Вы ничего не поняли...

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


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

Just now, jcxz said:

Я об этом и говорю. Эт уже вполне реальная цифра. Но может быть и больше в некоторых случаях. Просто такие дребезги будут реже происходить.

Ну он есть. В отличие от использования SPI, где его совсем нет (ну если не сичтать тепловой шум ;)

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

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

2 minutes ago, jcxz said:

Читайте внимательнее. Вы ничего не поняли...

Ну так объясните как и в результате чего может возникнуть задержка в 12 тактов? Если Вы конечно сами понимаете о чем говорите.

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


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

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

Ну и сколько тактов надо чтобы передать из одной ячейки памяти в другую? Я и написал +- пара тактов

Потом арбитраж выйграет канал с большим приоритетом

Чувствуется что Вы никогда не работали реально с DMA на больших скоростях. Только теоретизируете.

Знаете что такое например процедура Stacking-а в Cortex-M? И сколько она занимает тактов? В это время шина занята. А область ОЗУ в (STM32F091) всего одна. И что будет делать DMA-контроллер? :unknw:

А есть ведь ещё такая чудесная периферия кк CRC! :wink2:

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


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

1 minute ago, Eddy_Em said:

Я вот не нашел в тексте упоминания, что же за светодиоды такие. Если это - WS2812B, то там никаких синхроимпульсов нет (а ТС вроде говорил о синхроимпульсах), да и погрешность таймингов — аж ±150нс!

В общем загадки сплошные...

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

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


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

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

Потом арбитраж выйграет канал с большим приоритетом

А если CPU? Вы кажется забыли что у нас есть ещё и CPU  :biggrin:

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


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

3 minutes ago, jcxz said:

Знаете что такое например процедура Stacking-а в Cortex-M? 

В Cortex-M0?

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

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


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

2 minutes ago, jcxz said:

А если CPU? Вы кажется забыли что у нас есть ещё и CPU  :biggrin:

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

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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