C2000 3 21 июля, 2020 Опубликовано 21 июля, 2020 · Жалоба 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 нет доступа побайтно? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 235 21 июля, 2020 Опубликовано 21 июля, 2020 · Жалоба 4 минуты назад, C2000 сказал: Ну смотря что считать строгим таймингом +- 1-2 такта шины вряд ли будут критичными. И насчёт остальных каналов DMA: есть возможность настройки правильных приоритетов. Откуда взяли эти цифры "1-2 такта"? Имхо - намного больше. Как ни настраивай приоритеты, но если какой-то DMA-канал выполняет транзакцию, то новый канал не сможет начать своей работы, пока текущий не завершит свою. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
C2000 3 21 июля, 2020 Опубликовано 21 июля, 2020 · Жалоба 4 minutes ago, jcxz said: Откуда взяли эти цифры "1-2 такта"? Имхо - намного больше. Как ни настраивай приоритеты, но если какой-то DMA-канал выполняет транзакцию, то новый канал не сможет начать своей работы, пока текущий не завершит свою. Это еще почему? Откуда Вы вообще взяли такую информацию? Если конечно у Вас транзакция в режиме Burst настроена. Но кто мешает так не делать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 21 июля, 2020 Опубликовано 21 июля, 2020 · Жалоба 16 минут назад, jcxz сказал: PS: Ни о каких "строгих таймингах" в этом случае и речи быть не может. Ну разве что если только остановить ядро и выключить все другие DMA-каналы и прочие bus-мастеры. Но в этом случае теряется смысл использования DMA. По моим ощущениям, DMA-транзакция может занимать порядка 12 тактов, это при 168МГц порядка 0.071 мкс. Да, дребезжать фронты будут, но по-моему не критично. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
C2000 3 21 июля, 2020 Опубликовано 21 июля, 2020 · Жалоба По вашему если я в UART начал передавать 100 байт на скорости 1200, то DMA будет заблокирован пока все 100 байт не передадутся? 1 minute ago, adnega said: По моим ощущениям, DMA-транзакция может занимать порядка 12 тактов, это при 168МГц порядка 0.071 мкс. Да, дребезжать фронты будут, но по-моему не критично. Что значит по Вашим ощущениям? Откуда эти цифры? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 235 21 июля, 2020 Опубликовано 21 июля, 2020 · Жалоба 9 минут назад, C2000 сказал: Это еще почему? Откуда Вы вообще взяли такую информацию? Если конечно у Вас транзакция в режиме Burst настроена. Но кто мешает так не делать? Причём тут burst? DMA-канал получив DMA-запрос (который выиграл приоритет среди других DMA-запросов) должен выполнить: 1) чтение источника; 2) запись источника. Если во время выполнения этих операций появится другой DMA-запрос (к другому DMA-каналу), он будет ждать завершения работы текущего. Сколько бы он ни выполнялся тактов. Так как DMA-контроллеры обычно умеют обслуживать только один запрос за раз. К тому же - в МК ТС-а (STM32F091) DMA-контроллер не имеет FIFO. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Eddy_Em 1 21 июля, 2020 Опубликовано 21 июля, 2020 · Жалоба 1 hour ago, jcxz said: как на этом обеспечить "строгие тайминги" на выводах этих самых "адресных светодиодов"? Я вот не нашел в тексте упоминания, что же за светодиоды такие. Если это - WS2812B, то там никаких синхроимпульсов нет (а ТС вроде говорил о синхроимпульсах), да и погрешность таймингов — аж ±150нс! В общем загадки сплошные... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
C2000 3 21 июля, 2020 Опубликовано 21 июля, 2020 · Жалоба Ну и сколько тактов надо чтобы передать из одной ячейки памяти в другую? Я и написал +- пара тактов Потом арбитраж выйграет канал с большим приоритетом Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 235 21 июля, 2020 Опубликовано 21 июля, 2020 · Жалоба 10 минут назад, adnega сказал: По моим ощущениям, DMA-транзакция может занимать порядка 12 тактов, это при 168МГц порядка 0.071 мкс. Я об этом и говорю. Эт уже вполне реальная цифра. Но может быть и больше в некоторых случаях. Просто такие дребезги будут реже происходить. 10 минут назад, adnega сказал: Да, дребезжать фронты будут, но по-моему не критично. Ну он есть. В отличие от использования SPI, где его совсем нет (ну если не сичтать тепловой шум ;) 11 минут назад, C2000 сказал: По вашему если я в UART начал передавать 100 байт на скорости 1200, то DMA будет заблокирован пока все 100 байт не передадутся? Читайте внимательнее. Вы ничего не поняли... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
C2000 3 21 июля, 2020 Опубликовано 21 июля, 2020 · Жалоба Just now, jcxz said: Я об этом и говорю. Эт уже вполне реальная цифра. Но может быть и больше в некоторых случаях. Просто такие дребезги будут реже происходить. Ну он есть. В отличие от использования SPI, где его совсем нет (ну если не сичтать тепловой шум ;) Как может возникнуть 12 тактов, прошу объяснить с ссылкой на документацию. Это не придирки, просто хочется понять ход Вашей мысли. Ну и по поводу дребезга если он "ничтожен" по сравнению с частотой сигнала то можно считать что его нет. 2 minutes ago, jcxz said: Читайте внимательнее. Вы ничего не поняли... Ну так объясните как и в результате чего может возникнуть задержка в 12 тактов? Если Вы конечно сами понимаете о чем говорите. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 235 21 июля, 2020 Опубликовано 21 июля, 2020 · Жалоба 8 минут назад, C2000 сказал: Ну и сколько тактов надо чтобы передать из одной ячейки памяти в другую? Я и написал +- пара тактов Потом арбитраж выйграет канал с большим приоритетом Чувствуется что Вы никогда не работали реально с DMA на больших скоростях. Только теоретизируете. Знаете что такое например процедура Stacking-а в Cortex-M? И сколько она занимает тактов? В это время шина занята. А область ОЗУ в (STM32F091) всего одна. И что будет делать DMA-контроллер? А есть ведь ещё такая чудесная периферия кк CRC! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 3 21 июля, 2020 Опубликовано 21 июля, 2020 · Жалоба 1 minute ago, Eddy_Em said: Я вот не нашел в тексте упоминания, что же за светодиоды такие. Если это - WS2812B, то там никаких синхроимпульсов нет (а ТС вроде говорил о синхроимпульсах), да и погрешность таймингов — аж ±150нс! В общем загадки сплошные... От WS2812B думаю уже давно все отказались. Теперь на APA102 c SPI подобным интерфейсом все делают. Они гораздо более надежные и цветопередача лучше. У меня с ними работает по DMA на 10 МГц Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 235 21 июля, 2020 Опубликовано 21 июля, 2020 · Жалоба 9 минут назад, C2000 сказал: Потом арбитраж выйграет канал с большим приоритетом А если CPU? Вы кажется забыли что у нас есть ещё и CPU Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
C2000 3 21 июля, 2020 Опубликовано 21 июля, 2020 · Жалоба 3 minutes ago, jcxz said: Знаете что такое например процедура Stacking-а в Cortex-M? В Cortex-M0? Ну расскажите и дайте ссылку на документацию, из которой было бы что то понятно Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 3 21 июля, 2020 Опубликовано 21 июля, 2020 · Жалоба 2 minutes ago, jcxz said: А если CPU? Вы кажется забыли что у нас есть ещё и CPU А то что в SoC-ах есть отдельные шины для DMA ни о чем не говорит? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться