Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: STM32 несколько периферийных устройств на DMA
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
uriy
Использую UART TX DMA.
Хочу добавить DMA на ADC.
В ref man очень странное предложение:
Цитата
The 7 requests from the peripherals (TIMx[1,2,3,4], ADC1, SPI1, SPI/I2S2, I2Cx[1,2] and
USARTx[1,2,3]) are simply logically ORed before entering the DMA1, this means that only
one request must be enabled at a time
. Refer to Figure 50: DMA1 request mapping.

Как это понимать? Я не смогу использовать больше одного канала DMA?
Что они имеют ввиду?
AHTOXA
Имеют в виду, что для одного канала можно только один источник. А каналы можно использовать хоть все одновременно.
uriy
т.е. они вот это место имеют ввиду. Не по человечи написали
Нажмите для просмотра прикрепленного файла
Golikov A.
7 запросов от периферии соединены через "ИЛИ" до входа на ДМА1, это означает что только один запрос должен быть включен одновременно. По моему весьма нормально описали именно то место, правда другую ветку, где 7 запросовsm.gif, а не ту что обведена.
А ограничение это неприятно включили ADC1 и потеряли таймер2_канал3...
AHTOXA
Цитата(uriy @ Apr 16 2015, 11:47) *
т.е. они вот это место имеют ввиду. Не по человечи написали

Да, коряво описано. Но по факту - так.
В более поздних реализациях DMA ввели регистр выбора подключённого к каналу периферийного модуля.
HHIMERA
Цитата(Golikov A. @ Apr 16 2015, 10:07) *
это означает что только один запрос должен быть включен одновременно.

А проверить не судьба... или проще толпой в прострации бродить???
За все линейки не буду говорить... но на F050, 051 два события на один канал влёгкую... одновременно...
Там главное не то чтобы они не были включены одновременно... а чтобы события были заведомо разнесены по времени... чтобы не перекрывались...
Golikov A.
Че проверить то? Это и ежу понятно что если у вас стоит ИЛИ по событиям то схема не может различить какой из 2 включенных вызывало это событие, потому и говорят что должно в одно время быть включено только 1 событие, чтобы была определенность.

Если у вас 2 события разнесены по времени, то гораздо правильнее и ДМА перенастраивать чтобы было включено то одно что вы сейчас ожидаете, а не 2 сразу и надеяться что все прокатит... Ведь кроме источников событий у них еще разные адреса приема и записи, если их меняете, то чего и битик источника не поменять? Или любим искать почему АЦП не верно меряет когда таймер включен?
HHIMERA
Цитата(Golikov A. @ Apr 17 2015, 08:03) *
Это и ежу понятно что если у вас стоит ИЛИ по событиям то схема не может различить какой из 2 включенных вызывало это событие, потому и говорят что должно в одно время быть включено только 1 событие, чтобы была определенность.

Не надо трактовать референс по своему... Фраза "только один запрос должен быть включен одновременно" не верна по сути... Если есть необходимость... можно и три, четыре запроса включить одновременно на один канал... например от таймера, если позволяет железо и это соответствует задаче... А адреса приема и записи могут и не меняться... и перенастройки может не быть... и канал ДМА вообще может работать в циклическом режиме... Т.е. для понимания происходящего нужно рассматривать все варианты... а не только UART и ADC...
Golikov A.
Цитата
this means that only one request must be enabled at a time

ну скажите тогда ваш правильный перевод...

заодно привидите пример, пожалуйста, что у вас ДМА может делать по одним и тем же адреса, можно и циклическим при наступлении событий скажем 2 канала
1. Пришел символ по UART
2. Отправлен символ по SPI
3. таймер достиг максимального значения

Понятно дело что обязанность быть включенным одному канала связана не с ограничением прибора, а с ограничением здравого смысла...


HHIMERA
Цитата(Golikov A. @ Apr 17 2015, 10:57) *
ограничением здравого смысла...

Здравый смысл не должен иметь ограничений... иначе это уже не здравый смысл, а с ограничениями...
Я вам привёл реальный пример... который успешно применяется... таймера... Включение двух запросов (трёх, четырёх) на один канал позволяет экономить каналы ДМА (они не безграничны) на некоторых задачах... при работе с портом, например... Поэтому ваша настойчивая попытка троллинга мне не интересна...
Golikov A.
чего то я пропустил реальный пример, можете повторить еще раз.

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