реклама на сайте
подробности

 
 
> вывод слова из озу по таймеру с помощью DMA, stm32f4xx
klen
сообщение Feb 10 2013, 09:12
Сообщение #1


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



Здравствуйте.
Возникла необходимость вывести битовый поток заданной длинны через лапку микросхемы stm32f4xx . длинна импульса бита 50ns(20МГц), просто заводя таймер на 50 нан и в прерывании запись в порт бита не успевает 168 / 20 = 8,9 таков таймера до следующего тика, а само прерывани не менее 12 тактов... нейспевает. какнить с помошью дма можно извернутся?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 7)
e-serg
сообщение Feb 10 2013, 09:32
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 97
Регистрация: 24-07-08
Из: Иркутск
Пользователь №: 39 180



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

Делал вывод последовательности с помощью RAM(uint32) -> DMA -> GPIO(BSRR), процессор STM32F107 пишу 1MHz, работает.
запрос DMA формирует таймер.
Вашу задачу надо проверить, где-то на грани фола возможно получится.
Go to the top of the page
 
+Quote Post
adnega
сообщение Feb 10 2013, 09:50
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



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

Можно.
Я делал так:
Генерировал массив отвечающий за установку/сброс битов и по таймеру через DMA производил запись в GPIOx->BSRR.
Go to the top of the page
 
+Quote Post
Flexz
сообщение Feb 10 2013, 11:05
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 252
Регистрация: 9-10-08
Из: Московская обл.
Пользователь №: 40 797



Добавлю, что копирование из RAM в GPIO через DMA с триггером от таймера укладывается в 5 тактов, а если DMA без триггера, просто M2M - 4 такта.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Feb 11 2013, 01:41
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(klen @ Feb 10 2013, 15:12) *
Возникла необходимость вывести битовый поток заданной длинны через лапку микросхемы stm32f4xx . длинна импульса бита 50ns(20МГц), просто заводя таймер на 50 нан и в прерывании запись в порт бита не успевает 168 / 20 = 8,9 таков таймера до следующего тика, а само прерывани не менее 12 тактов... нейспевает. какнить с помошью дма можно извернутся?
А чем SPI не канает?
Go to the top of the page
 
+Quote Post
klen
сообщение Feb 12 2013, 17:42
Сообщение #6


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



Цитата(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
спасибо за подсказку сам бы не допертил.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Feb 13 2013, 06:39
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



А теперь от этого таймера запускаете не прерывание, а DMA-канал, который стартует DMA-канал, передающий в I2S. И проц у вас вообще стоит - можете укладывать его спать sm.gif
Go to the top of the page
 
+Quote Post
klen
сообщение Feb 14 2013, 08:01
Сообщение #8


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



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

с этого места поподробней..... запрсы DMA выполняет I2S для выборки слов из буфера. а какая связь с таймера? просьба схему по развернутее описать.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 13:07
Рейтинг@Mail.ru


Страница сгенерированна за 0.01411 секунд с 7
ELECTRONIX ©2004-2016