Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: вывод слова из озу по таймеру с помощью DMA
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
klen
Здравствуйте.
Возникла необходимость вывести битовый поток заданной длинны через лапку микросхемы stm32f4xx . длинна импульса бита 50ns(20МГц), просто заводя таймер на 50 нан и в прерывании запись в порт бита не успевает 168 / 20 = 8,9 таков таймера до следующего тика, а само прерывани не менее 12 тактов... нейспевает. какнить с помошью дма можно извернутся?
e-serg
Цитата(klen @ Feb 10 2013, 18:12) *
Здравствуйте.
Возникла необходимость вывести битовый поток заданной длинны через лапку микросхемы stm32f4xx . длинна импульса бита 50ns(20МГц), просто заводя таймер на 50 нан и в прерывании запись в порт бита не успевает 168 / 20 = 8,9 таков таймера до следующего тика, а само прерывани не менее 12 тактов... нейспевает. какнить с помошью дма можно извернутся?

Делал вывод последовательности с помощью RAM(uint32) -> DMA -> GPIO(BSRR), процессор STM32F107 пишу 1MHz, работает.
запрос DMA формирует таймер.
Вашу задачу надо проверить, где-то на грани фола возможно получится.
adnega
Цитата(klen @ Feb 10 2013, 13:12) *
Здравствуйте.
Возникла необходимость вывести битовый поток заданной длинны через лапку микросхемы stm32f4xx . длинна импульса бита 50ns(20МГц), просто заводя таймер на 50 нан и в прерывании запись в порт бита не успевает 168 / 20 = 8,9 таков таймера до следующего тика, а само прерывани не менее 12 тактов... нейспевает. какнить с помошью дма можно извернутся?

Можно.
Я делал так:
Генерировал массив отвечающий за установку/сброс битов и по таймеру через DMA производил запись в GPIOx->BSRR.
Flexz
Добавлю, что копирование из RAM в GPIO через DMA с триггером от таймера укладывается в 5 тактов, а если DMA без триггера, просто M2M - 4 такта.
jcxz
Цитата(klen @ Feb 10 2013, 15:12) *
Возникла необходимость вывести битовый поток заданной длинны через лапку микросхемы stm32f4xx . длинна импульса бита 50ns(20МГц), просто заводя таймер на 50 нан и в прерывании запись в порт бита не успевает 168 / 20 = 8,9 таков таймера до следующего тика, а само прерывани не менее 12 тактов... нейспевает. какнить с помошью дма можно извернутся?
А чем SPI не канает?
klen
Цитата(jcxz @ Feb 11 2013, 05:41) *
А чем SPI не канает?


сасибо за идею.
заюзал SPI2 в режиме I2S - оп причине наличия у i2S своего собственного PLL что дает возможность тонко управлять битрейтом выходного потока. раскочегарил на максимум скорости - получилось
1, MCO(мастер клок - меандр) 132МГц
2, I2S_CK - меандр 32МГц
3, собственно выталкиваемые биты со чкоростью клока

сехе обычная - ОЗУ -> DMA-> SPI, выдается пачка импульсов(в моем случае это 128 бит M-последовательность ) из озушного буфера одинарной DMA транзакцией. а милисикундный период мачек таймером. в прерывании по переполнению запускается DMA.

все отлично работает, никакой загрузки проца. шина и матрица видимо шевелется а остальные ресурсы остаются в наших руках sm.gif
спасибо за подсказку сам бы не допертил.
jcxz
А теперь от этого таймера запускаете не прерывание, а DMA-канал, который стартует DMA-канал, передающий в I2S. И проц у вас вообще стоит - можете укладывать его спать sm.gif
klen
Цитата(jcxz @ Feb 13 2013, 10:39) *
А теперь от этого таймера запускаете не прерывание, а DMA-канал, который стартует DMA-канал, передающий в I2S. И проц у вас вообще стоит - можете укладывать его спать sm.gif

с этого места поподробней..... запрсы DMA выполняет I2S для выборки слов из буфера. а какая связь с таймера? просьба схему по развернутее описать.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.