Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: STM32F407VET6 DMA Каналы и потоки
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
nanorobot
Из описания регистров DMA STM32F407 можно предположить что для двух рвзных потоков можно назначить один и тот же канал( мне требуется одновременная работа DMA для TIM5_CH1 и TIM5_CH2 - то есть сочетание Stream2/DMA1_Channel6
и Stream4/DMA1_Channel6. Поскольку определены конфигурационные регистры для Stream, в которых нужно задать небходимый Channel, такой фокус представляется заманчиво возможным. Но интуиция подсказывает, что это не так. Или в 407
есть нечто инновационное с ДМА, по сравнению с младшими семействами? В RM0090 не обнаружил упоминаний о том, что в двух разных DMA_SxCR можно/нельзя указать одинаковый номер канала.
Immortal_Buka
в RM на стр 306, рисунок 32.
Очень наглядна связь каналов и потоков.
scifi
Цитата(nanorobot @ Mar 22 2016, 09:04) *
Поскольку определены конфигурационные регистры для Stream, в которых нужно задать небходимый Channel, такой фокус представляется заманчиво возможным. Но интуиция подсказывает, что это не так.

Да нормально там всё, интуиция врёт.
Только проверьте, что DMA1 подключен к тем шинам, которые вам нужны. Потому что DMA2 подключен практически ко всему, а вот про DMA1 этого сказать нельзя.
nanorobot
Цитата(scifi @ Mar 22 2016, 12:01) *
Да нормально там всё, интуиция врёт.
Только проверьте, что DMA1 подключен к тем шинам, которые вам нужны. Потому что DMA2 подключен практически ко всему, а вот про DMA1 этого сказать нельзя.



Чуть подробнее про "нормально там все" пжлст. Мой случай возможен?
scifi
Цитата(nanorobot @ Mar 22 2016, 10:12) *
Чуть подробнее про "нормально там все" пжлст. Мой случай возможен?

Да, возможен.
nanorobot
Цитата(scifi @ Mar 22 2016, 12:21) *
Да, возможен.



Поздравляю Вас, соврамши. Интуиция меня не подвела(лучше бы подвела) Два потока на один канал посадить нельзя.
В работе остается конфигурация выпоненная последней(сочетание Stream/Channel)
То есть запустить в режиме DMA более одного канала 32 битового таймера TIM5 или TIM2 невозможно. Жирный минус ST, увы.
SpyBot
Цитата(nanorobot @ Mar 22 2016, 21:41) *
Жирный минус ST, увы.

Прямо всем всем контроллерам ST?
У 429-го вот на первый взгляд можно запускать по 4 канала каждого таймера. Они разнесены по разным потокам.
nanorobot
Цитата(SpyBot @ Mar 23 2016, 00:06) *
Прямо всем всем контроллерам ST?
У 429-го вот на первый взгляд можно запускать по 4 канала каждого таймера. Они разнесены по разным потокам.



Речь идет о контроллере обозначенном в заголовке топика. Но вообще тут тоже по разным ПОТОКАМ, но в одинаковых КАНАЛАХ. Гибкость DMA от ST сильно проигрывает NXP
SpyBot
Цитата(nanorobot @ Mar 22 2016, 22:12) *
по разным ПОТОКАМ, но в одинаковых КАНАЛАХ.

Так один поток содержит 8 каналов. В разных потоках пусть и с одинаковым номером канала вполне дма будет работать.
AVI-crak
Цитата(SpyBot @ Mar 23 2016, 04:19) *
Так один поток содержит 8 каналов. В разных потоках пусть и с одинаковым номером канала вполне дма будет работать.

DMA STM32F407
Ага, записать в один регистр (например DMA2_Stream0 -> CR) - два разных номера канала.
nanorobot
Цитата(SpyBot @ Mar 23 2016, 02:19) *
Так один поток содержит 8 каналов. В разных потоках пусть и с одинаковым номером канала вполне дма будет работать.


Это один канал МОЖЕТ иметь в качестве источника вызова ОДИН из восьми потоков. Хотя по принципу, по которому устроены регистры конфигурации, вполне возникает обратное впечатление. Но оно ложное. Проверено электроникой (с)

Цитата(AVI-crak @ Mar 23 2016, 05:06) *
DMA STM32F407
Ага, записать в один регистр (например DMA2_Stream0 -> CR) - два разных номера канала.

Вообще то так оно и выглядит. Для кажого потока есть регистр CR, в каждом из которых можно задать одинаковый номер канала(речь только о чипах F4xx).Типа на один канал можно повесить до 8 потоков. Вот такая фегня от ST.
AVI-crak
Цитата(nanorobot @ Mar 23 2016, 09:05) *
Вот такая фегня от ST.

Неужели так сложно расставить запятые? смысл сообщения меняется - казнить нельзя миловать.
DMAx * DMAx_Stream * 8 = 16.
И для таких случаев проще написать собственную библиотеку дма один раз, и больше не парится с кубиками и разными чипами.
nanorobot
Цитата(AVI-crak @ Mar 23 2016, 08:04) *
Неужели так сложно расставить запятые? смысл сообщения меняется - казнить нельзя миловать.
DMAx * DMAx_Stream * 8 = 16.
И для таких случаев проще написать собственную библиотеку дма один раз, и больше не парится с кубиками и разными чипами.



Насчет запятых принимается, хотя в данном случве смысл полюбому однозначен . Чтобы не паритЬся с кубиками, и не писать собственных библиотек использую ChibiOs и ее HAL. Но это, к сожалению, не избавляет меня от небходимости понимать что и как друг с другом завязано.

Цитата(nanorobot @ Mar 22 2016, 23:41) *
Поздравляю Вас, соврамши. Интуиция меня не подвела(лучше бы подвела) Два потока на один канал посадить нельзя.
В работе остается конфигурация выпоненная последней(сочетание Stream/Channel)
То есть запустить в режиме DMA более одного канала 32 битового таймера TIM5 или TIM2 невозможно. Жирный минус ST, увы.


Приношу свои самые глубокие, самые иcкренние извинения маэстро SciFi и глубокоуважаемой фирме STMicroelectronics. С утра, на свежую голову разобрался, нашел косяк в своем коде. Все действительно работает. Еще раз простите.
501-q
Stream -- это поток. Channel -- это канал. Каждый поток настраивается независимо. Не знаю, как у F40x, а у ST32F429 в разных потоках можно использовать даже одно и то же событие для запуска транзакции (см. DMA2, Stream1:ch6, Stream3:ch6, Stream6:ch0 -- все они могут срабатывать по сигналу TIM1_CH1). Думаю, у F40x точно так же.

Илья
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.