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

вывод слова из озу по таймеру с помощью DMA

Здравствуйте.

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

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


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

Здравствуйте.

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

Делал вывод последовательности с помощью RAM(uint32) -> DMA -> GPIO(BSRR), процессор STM32F107 пишу 1MHz, работает.

запрос DMA формирует таймер.

Вашу задачу надо проверить, где-то на грани фола возможно получится.

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


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

Здравствуйте.

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

Можно.

Я делал так:

Генерировал массив отвечающий за установку/сброс битов и по таймеру через DMA производил запись в GPIOx->BSRR.

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


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

Добавлю, что копирование из RAM в GPIO через DMA с триггером от таймера укладывается в 5 тактов, а если DMA без триггера, просто M2M - 4 такта.

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


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

Возникла необходимость вывести битовый поток заданной длинны через лапку микросхемы stm32f4xx . длинна импульса бита 50ns(20МГц), просто заводя таймер на 50 нан и в прерывании запись в порт бита не успевает 168 / 20 = 8,9 таков таймера до следующего тика, а само прерывани не менее 12 тактов... нейспевает. какнить с помошью дма можно извернутся?
А чем SPI не канает?

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


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

А чем SPI не канает?

 

сасибо за идею.

заюзал SPI2 в режиме I2S - оп причине наличия у i2S своего собственного PLL что дает возможность тонко управлять битрейтом выходного потока. раскочегарил на максимум скорости - получилось

1, MCO(мастер клок - меандр) 132МГц

2, I2S_CK - меандр 32МГц

3, собственно выталкиваемые биты со чкоростью клока

 

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

 

все отлично работает, никакой загрузки проца. шина и матрица видимо шевелется а остальные ресурсы остаются в наших руках :)

спасибо за подсказку сам бы не допертил.

 

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


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

А теперь от этого таймера запускаете не прерывание, а DMA-канал, который стартует DMA-канал, передающий в I2S. И проц у вас вообще стоит - можете укладывать его спать :)

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


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

А теперь от этого таймера запускаете не прерывание, а DMA-канал, который стартует DMA-канал, передающий в I2S. И проц у вас вообще стоит - можете укладывать его спать :)

с этого места поподробней..... запрсы DMA выполняет I2S для выборки слов из буфера. а какая связь с таймера? просьба схему по развернутее описать.

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


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

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

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

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

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

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

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

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

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

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