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

 
 
> STM32F4, DMA GPIO event, нельзя начать транзакцию по событию от GPIO?
TigerSHARC
сообщение Sep 10 2014, 12:38
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 688
Регистрация: 4-09-09
Пользователь №: 52 195



Читаю TRM на STM32F4X9. Ужаснулся когда увидел отсутствие GPIO в "DMA request mappining". Как быть если надо по внешнему событию запускать транзакцию?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
adnega
сообщение Sep 10 2014, 12:45
Сообщение #2


Гуру
******

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



Цитата(TigerSHARC @ Sep 10 2014, 16:38) *
Читаю TRM на STM32F4X9. Ужаснулся когда увидел отсутствие GPIO в "DMA request mappining". Как быть если надо по внешнему событию запускать транзакцию?

Можно таймер задействовать.
Go to the top of the page
 
+Quote Post
TigerSHARC
сообщение Sep 10 2014, 12:47
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 688
Регистрация: 4-09-09
Пользователь №: 52 195



Цитата(adnega @ Sep 10 2014, 16:45) *
Можно таймер задействовать.

Я правильно понял: вход таймера использовать как вход внешнего события?
Go to the top of the page
 
+Quote Post
adnega
сообщение Sep 10 2014, 13:00
Сообщение #4


Гуру
******

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



Цитата(TigerSHARC @ Sep 10 2014, 16:47) *
Я правильно понял: вход таймера использовать как вход внешнего события?

А вы могли бы озвучить задачу полностью?
Зачем DMA? Почему не прерывание по EXTI?
С какой частотой планируются запросы? Какими данными будут оперировать DMA (кто источник, кто приемник данных)?
Go to the top of the page
 
+Quote Post
TigerSHARC
сообщение Sep 10 2014, 13:17
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 688
Регистрация: 4-09-09
Пользователь №: 52 195



Цитата(adnega @ Sep 10 2014, 17:00) *
А вы могли бы озвучить задачу полностью?
Зачем DMA? Почему не прерывание по EXTI?
С какой частотой планируются запросы? Какими данными будут оперировать DMA (кто источник, кто приемник данных)?

есть внешний АЦП. передает данные по SPI. О готовности данных сообщает отрицательным фронтом на ноге. На OMAP-L138 такое решается на раз (есть GPIO event mode)

Последовательность работы должна быть такая:
1)каждые 10мкс приходит отрицательный фронт на ногу
2) с приходом каждого фронта один канал DMA пишет в SPI_TX несколько байт
3) другой канал DMA натсроен на событие от SPI_RX и принимает столько данных сколько отправили в SPI_TX.

В SPI_TX отправляются dummy данные, так как это нужно лишь для приёма данных от SPI_TX
Go to the top of the page
 
+Quote Post
adnega
сообщение Sep 10 2014, 13:42
Сообщение #6


Гуру
******

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



Цитата(TigerSHARC @ Sep 10 2014, 17:17) *
есть внешний АЦП. передает данные по SPI. О готовности данных сообщает отрицательным фронтом на ноге. На OMAP-L138 такое решается на раз (есть GPIO event mode)

Последовательность работы должна быть такая:
1)каждые 10мкс приходит отрицательный фронт на ногу
2) с приходом каждого фронта один канал DMA пишет в SPI_TX несколько байт
3) другой канал DMA натсроен на событие от SPI_RX и принимает столько данных сколько отправили в SPI_TX.

В SPI_TX отправляются dummy данные, так как это нужно лишь для приёма данных от SPI_TX

Можно сделать через прерывание EXTI для ноги, на которую приходит сигнал готовности. В обработчике прерывания настраивать два канала DMA для SPI_TX и SPI_RX.

Можно попробовать сделать и полностью аппаратное решение на таймере. Сколько байт нужно принимать каждые 10мкс?
Go to the top of the page
 
+Quote Post
TigerSHARC
сообщение Sep 10 2014, 15:26
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 688
Регистрация: 4-09-09
Пользователь №: 52 195



Цитата(adnega @ Sep 10 2014, 17:42) *
Можно сделать через прерывание EXTI для ноги, на которую приходит сигнал готовности. В обработчике прерывания настраивать два канала DMA для SPI_TX и SPI_RX.

Можно попробовать сделать и полностью аппаратное решение на таймере. Сколько байт нужно принимать каждые 10мкс?


16 байт

Сейчас подумал:
1) пришло прерывание, нужно забрать 16 байт
2) для этого нужно эти 16 байт отправить

Вопрос: как DMA отправляет данные в SPI_TX, если нужно ещё какое-то время чтобы данные отправились. Т.е. как DMA получит уведомление что байт ушёл и можно копировать следующий байт (и так 16 раз) ? или вопрос надуманный, и это делается автоматически...?
Go to the top of the page
 
+Quote Post
jcxz
сообщение Sep 12 2014, 02:52
Сообщение #8


Гуру
******

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



Цитата(TigerSHARC @ Sep 10 2014, 21:26) *
Сейчас подумал:
1) пришло прерывание, нужно забрать 16 байт
2) для этого нужно эти 16 байт отправить
Вопрос: как DMA отправляет данные в SPI_TX, если нужно ещё какое-то время чтобы данные отправились. Т.е. как DMA получит уведомление что байт ушёл и можно копировать следующий байт (и так 16 раз) ? или вопрос надуманный, и это делается автоматически...?

Так как в STM32 в каналах SPI нет буферизации, то одним DMA здесь не обойтись.
Можно сделать примерно так:
Таймер1 получает внешний сигнал, пинает DMA-канал1, который конфигурит другой таймер2, который в свою очередь начинает выдавать события (16 штук) на пересылки DMA-канал2->SPI,
последним блоком (в STM32 есть DMA-передачи свЯзным списком типа L137/L138 или NXP LPC17xx?) DMA-канал2 конфигурит таймер2 (выключает его).
Всю эту кухню можно сделать работающей в пинг-понг (без перепрограммирования CPU на каждый цикл).
Если в DMA STM32 нет возможности передач связным списком, то функцию выключения таймера2 можно также возложить на таймер1+DMA-канал1
(в таймере1 делаем два события по совпадению: одно - сразу после старта, второе - через определённый промежуток времени, достаточный
для генерации таймером2 16 событий).

Если-бы в SPI STM32 было FIFO на 16*8бит, то можно было-бы обойтись одним DMA и таймером - сразу загонять в FIFO 16*8бит, а уже он, с установленной частотой выдавал бы их наружу.
Опять-же - на LPC17xx такое возможно (там есть требуемый объём FIFO) и на L137/L138 думаю тоже.
Go to the top of the page
 
+Quote Post
TigerSHARC
сообщение Sep 12 2014, 10:29
Сообщение #9


Знающий
****

Группа: Свой
Сообщений: 688
Регистрация: 4-09-09
Пользователь №: 52 195



Цитата(jcxz @ Sep 12 2014, 06:52) *
Так как в STM32 в каналах SPI нет буферизации, то одним DMA здесь не обойтись.
Можно сделать примерно так:
Таймер1 получает внешний сигнал, пинает DMA-канал1, который конфигурит другой таймер2, который в свою очередь начинает выдавать события (16 штук) на пересылки DMA-канал2->SPI,
последним блоком (в STM32 есть DMA-передачи свЯзным списком типа L137/L138 или NXP LPC17xx?) DMA-канал2 конфигурит таймер2 (выключает его).
Всю эту кухню можно сделать работающей в пинг-понг (без перепрограммирования CPU на каждый цикл).
Если в DMA STM32 нет возможности передач связным списком, то функцию выключения таймера2 можно также возложить на таймер1+DMA-канал1
(в таймере1 делаем два события по совпадению: одно - сразу после старта, второе - через определённый промежуток времени, достаточный
для генерации таймером2 16 событий).

Если-бы в SPI STM32 было FIFO на 16*8бит, то можно было-бы обойтись одним DMA и таймером - сразу загонять в FIFO 16*8бит, а уже он, с установленной частотой выдавал бы их наружу.
Опять-же - на LPC17xx такое возможно (там есть требуемый объём FIFO) и на L137/L138 думаю тоже.

это конечно тот ещё винигрет

Цитата(adnega @ Sep 12 2014, 14:11) *
+1.
Что-то ТС пропал, видимо, уже все сделал)

ТС тут. старт реализации задумки намечен не ранее чем через 2 недели.
пока курю даташит...

Цитата(AHTOXA @ Sep 12 2014, 14:09) *
Не болтайте ерундой, всё прекрасно делается только на DMA. Один канал на передачу, второй на приём.

наверное, в моём случае, не только на DMA, но и на одном таймере, так как "DMA GPIO event" нет.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- TigerSHARC   STM32F4, DMA GPIO event   Sep 10 2014, 12:38
|- - adnega   Цитата(TigerSHARC @ Sep 10 2014, 19:26) В...   Sep 10 2014, 16:01
|- - AHTOXA   Цитата(jcxz @ Sep 12 2014, 08:52) Так как...   Sep 12 2014, 10:09
||- - adnega   Цитата(AHTOXA @ Sep 12 2014, 14:09) Не бо...   Sep 12 2014, 10:11
|- - adnega   Цитата(TigerSHARC @ Sep 12 2014, 14:29) Т...   Sep 12 2014, 11:09
|- - AHTOXA   А я б не парился, и сделал запуск DMA-обмена с SPI...   Sep 12 2014, 11:28
|- - TigerSHARC   Цитата(AHTOXA @ Sep 12 2014, 15:28) А я б...   Sep 12 2014, 11:35
|- - AHTOXA   Цитата(TigerSHARC @ Sep 12 2014, 17:35) Э...   Sep 12 2014, 16:34
|- - adnega   Цитата(AHTOXA @ Sep 12 2014, 20:34) Ещё о...   Sep 12 2014, 16:45
|- - jcxz   Цитата(AHTOXA @ Sep 12 2014, 22:34) Насчё...   Sep 12 2014, 19:46
|- - adnega   Цитата(jcxz @ Sep 12 2014, 23:46) Вот это...   Sep 12 2014, 20:14
||- - jcxz   Цитата(adnega @ Sep 13 2014, 02:14) 1. DM...   Sep 13 2014, 08:24
||- - adnega   До сих пор не ясно нужно ли обрабатывать пришедшие...   Sep 13 2014, 08:57
||- - AHTOXA   Цитата(jcxz @ Sep 13 2014, 14:24) Вы сейч...   Sep 13 2014, 12:04
|- - AHTOXA   Цитата(jcxz @ Sep 13 2014, 01:46) Вот это...   Sep 13 2014, 06:35
- - Сергей Борщ   А там таймер не может запускать DMA по capture?   Sep 12 2014, 11:52
|- - adnega   Цитата(Сергей Борщ @ Sep 12 2014, 15:52) ...   Sep 12 2014, 12:14
- - Golikov A.   почему 16 раз? нельзя сказать чтобы ДМА забрало 16...   Sep 12 2014, 12:16
|- - adnega   Цитата(Golikov A. @ Sep 12 2014, 16:16) п...   Sep 12 2014, 13:10
- - TigerSHARC   тема распалась на два вопроса: 1) можно ли решить...   Sep 12 2014, 13:17
|- - adnega   Цитата1) можно ли решить задачу используя два DMA ...   Sep 12 2014, 13:36
|- - TigerSHARC   Цитата(adnega @ Sep 12 2014, 17:36) О гот...   Sep 12 2014, 14:06
|- - adnega   Цитата(TigerSHARC @ Sep 12 2014, 18:06) з...   Sep 12 2014, 14:42
|- - TigerSHARC   Цитата(adnega @ Sep 12 2014, 18:42) Допус...   Sep 12 2014, 14:46
|- - adnega   Цитата(TigerSHARC @ Sep 12 2014, 18:46) В...   Sep 12 2014, 15:11
- - Golikov A.   В LPC ДМА следит как за флагом готовности данных е...   Sep 12 2014, 13:30
- - TigerSHARC   В моей задаче нужно записывать данные в буфер. В м...   Sep 13 2014, 11:04
|- - adnega   Цитата(TigerSHARC @ Sep 13 2014, 15:04) В...   Sep 14 2014, 05:55
- - Golikov A.   АНТОХА вы иногда резковаты, иногда не по делу. jc...   Sep 13 2014, 17:08
- - jcxz   Цитата(Golikov A. @ Sep 13 2014, 23:08) j...   Sep 14 2014, 13:52


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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 10:23
Рейтинг@Mail.ru


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