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

 
 
> 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
Ответов
TigerSHARC
сообщение Sep 12 2014, 13:17
Сообщение #2


Знающий
****

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



тема распалась на два вопроса:

1) можно ли решить задачу используя два DMA и один таймер?
2) не понятно как именно осуществляется транзакция нескольких байт последовательно в SPI_TX через DMA. Я понимаю так: как только DMA получает сигнал о готовности данных (от таймера или от флага, установленного в обработчике прерывания GPIO) то, в соответствии с настройками, DMA отправляет последовательно 16-байт в SPI_TX. Не понятно как именно DMA узнает что байт улетел наружу и можно кидать следующий байт в SPI_TX. если ниак, то получается что DMA тупо перезапишет регистр 16-раз.
Go to the top of the page
 
+Quote Post
adnega
сообщение Sep 12 2014, 13:36
Сообщение #3


Гуру
******

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



Цитата
1) можно ли решить задачу используя два DMA и один таймер?

Можно с использованием EXTI. Т.е. прерывание по каждому сигналу готовности.

Цитата
2) не понятно как именно осуществляется транзакция нескольких байт последовательно в SPI_TX через DMA. Я понимаю так: как только DMA получает сигнал о готовности данных (от таймера или от флага, установленного в обработчике прерывания GPIO) то, в соответствии с настройками, DMA отправляет последовательно 16-байт в SPI_TX. Не понятно как именно DMA узнает что байт улетел наружу и можно кидать следующий байт в SPI_TX. если ниак, то получается что DMA тупо перезапишет регистр 16-раз.

О готовности данных он узнает по запросам на DMA-транзакцию. Например, SPI_TX. Не от таймера или флага GPIO, а именно от SPI_TX.
Однако, ничто не мешает копировать в SPI_DR по запросам от таймера или GPIO, но в этом случае программист должен гарантировать, что не будет перезаписи, а ранее записанные данные уже обработаны.

Вопрос в том, как заставить таймер сказать DMA, что можно начинать передавать данные в SPI_DR по запросам от SPI_TX?
Go to the top of the page
 
+Quote Post
TigerSHARC
сообщение Sep 12 2014, 14:06
Сообщение #4


Знающий
****

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



Цитата(adnega @ Sep 12 2014, 17:36) *
О готовности данных он узнает по запросам на DMA-транзакцию. Например, SPI_TX. Не от таймера или флага GPIO, а именно от SPI_TX.

запрос на транзакцию от SPI_TX для DMA может быть только по готовности данных в SPI_TX. Т.е. появился байт в SPI_TX - возникает событие для DMA.
У меня два DMA: один передает "тупые" данные, другой принимает валидные. Так вот первый должен как-то узнать о том что отправлять надо не сразу 16 байт один за другим, а только когда один отправился - -отправлять другой, при этом запрос на транзакцию он принимает от флага GPIO(или таймера). Вы предлагаете третий DMA завести, который будет принимать запрос от SPI_TX? но как это поможет первому DMA узнать когда нужно отправить слудующий байт из 16ти...

не понимаю логику... rolleyes.gif

P.S. или существует механизм(наличие флага?), позволяющий определить что SPI_TX пуст?
Go to the top of the page
 
+Quote Post
adnega
сообщение Sep 12 2014, 14:42
Сообщение #5


Гуру
******

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



Цитата(TigerSHARC @ Sep 12 2014, 18:06) *
запрос на транзакцию от SPI_TX для DMA может быть только по готовности данных в SPI_TX. Т.е. появился байт в SPI_TX - возникает событие для DMA.
У меня два DMA: один передает "тупые" данные, другой принимает валидные. Так вот первый должен как-то узнать о том что отправлять надо не сразу 16 байт один за другим, а только когда один отправился - -отправлять другой, при этом запрос на транзакцию он принимает от флага GPIO(или таймера). Вы предлагаете третий DMA завести, который будет принимать запрос от SPI_TX? но как это поможет первому DMA узнать когда нужно отправить слудующий байт из 16ти...

не понимаю логику... rolleyes.gif

P.S. или существует механизм(наличие флага?), позволяющий определить что SPI_TX пуст?

Допустим мы используем SPI1.
SPI1_TX можно найти на канале 3 в DMA2_Stream3, SPI1_RX можно найти на канале 3 в DMA2_Stream2.
Настраиваем DMA2_Stream3 на копирование данных из памяти, в которой лежит 0xFF, в SPI1->DR. Длина 16 транзакций.
Настраиваем DMA2_Stream2 на копирование данных из SPI1->DR в буфер приема. Длина 16 транзакций.
Устанавливаем в SPI1 TXDMAEN и RXDMAEN. В SPI будет отправлено 16 раз 0xFF и принято 16 байт в буфер приема.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- TigerSHARC   STM32F4, DMA GPIO event   Sep 10 2014, 12:38
- - adnega   Цитата(TigerSHARC @ Sep 10 2014, 16:38) Ч...   Sep 10 2014, 12:45
|- - TigerSHARC   Цитата(adnega @ Sep 10 2014, 16:45) Можно...   Sep 10 2014, 12:47
|- - adnega   Цитата(TigerSHARC @ Sep 10 2014, 16:47) Я...   Sep 10 2014, 13:00
|- - TigerSHARC   Цитата(adnega @ Sep 10 2014, 17:00) А вы ...   Sep 10 2014, 13:17
|- - adnega   Цитата(TigerSHARC @ Sep 10 2014, 17:17) е...   Sep 10 2014, 13:42
|- - TigerSHARC   Цитата(adnega @ Sep 10 2014, 17:42) Можно...   Sep 10 2014, 15:26
|- - adnega   Цитата(TigerSHARC @ Sep 10 2014, 19:26) В...   Sep 10 2014, 16:01
|- - jcxz   Цитата(TigerSHARC @ Sep 10 2014, 21:26) С...   Sep 12 2014, 02:52
|- - AHTOXA   Цитата(jcxz @ Sep 12 2014, 08:52) Так как...   Sep 12 2014, 10:09
||- - adnega   Цитата(AHTOXA @ Sep 12 2014, 14:09) Не бо...   Sep 12 2014, 10:11
|- - TigerSHARC   Цитата(jcxz @ Sep 12 2014, 06:52) Так как...   Sep 12 2014, 10:29
|- - 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   Цитата(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 - 14:07
Рейтинг@Mail.ru


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