|
|
  |
STM32F407VET6 DMA Каналы и потоки, Присвоенме номера канала потоку |
|
|
|
Mar 22 2016, 06:57
|
Участник

Группа: Участник
Сообщений: 18
Регистрация: 17-06-14
Пользователь №: 81 969

|
в RM на стр 306, рисунок 32. Очень наглядна связь каналов и потоков.
Сообщение отредактировал Immortal_Buka - Mar 22 2016, 06:57
|
|
|
|
|
Mar 22 2016, 07:12
|
Местный
  
Группа: Участник
Сообщений: 244
Регистрация: 29-02-08
Пользователь №: 35 503

|
Цитата(scifi @ Mar 22 2016, 12:01)  Да нормально там всё, интуиция врёт. Только проверьте, что DMA1 подключен к тем шинам, которые вам нужны. Потому что DMA2 подключен практически ко всему, а вот про DMA1 этого сказать нельзя. Чуть подробнее про "нормально там все" пжлст. Мой случай возможен?
|
|
|
|
|
Mar 22 2016, 18:41
|
Местный
  
Группа: Участник
Сообщений: 244
Регистрация: 29-02-08
Пользователь №: 35 503

|
Цитата(scifi @ Mar 22 2016, 12:21)  Да, возможен. Поздравляю Вас, соврамши. Интуиция меня не подвела(лучше бы подвела) Два потока на один канал посадить нельзя. В работе остается конфигурация выпоненная последней(сочетание Stream/Channel) То есть запустить в режиме DMA более одного канала 32 битового таймера TIM5 или TIM2 невозможно. Жирный минус ST, увы.
Сообщение отредактировал nanorobot - Mar 22 2016, 18:52
|
|
|
|
|
Mar 22 2016, 19:06
|
Местный
  
Группа: Свой
Сообщений: 285
Регистрация: 5-11-05
Пользователь №: 10 491

|
Цитата(nanorobot @ Mar 22 2016, 21:41)  Жирный минус ST, увы. Прямо всем всем контроллерам ST? У 429-го вот на первый взгляд можно запускать по 4 канала каждого таймера. Они разнесены по разным потокам.
|
|
|
|
|
Mar 22 2016, 19:12
|
Местный
  
Группа: Участник
Сообщений: 244
Регистрация: 29-02-08
Пользователь №: 35 503

|
Цитата(SpyBot @ Mar 23 2016, 00:06)  Прямо всем всем контроллерам ST? У 429-го вот на первый взгляд можно запускать по 4 канала каждого таймера. Они разнесены по разным потокам. Речь идет о контроллере обозначенном в заголовке топика. Но вообще тут тоже по разным ПОТОКАМ, но в одинаковых КАНАЛАХ. Гибкость DMA от ST сильно проигрывает NXP
Сообщение отредактировал nanorobot - Mar 23 2016, 02:07
|
|
|
|
|
Mar 22 2016, 21:19
|
Местный
  
Группа: Свой
Сообщений: 285
Регистрация: 5-11-05
Пользователь №: 10 491

|
Цитата(nanorobot @ Mar 22 2016, 22:12)  по разным ПОТОКАМ, но в одинаковых КАНАЛАХ. Так один поток содержит 8 каналов. В разных потоках пусть и с одинаковым номером канала вполне дма будет работать.
|
|
|
|
|
Mar 23 2016, 00:06
|
Частый гость
 
Группа: Участник
Сообщений: 182
Регистрация: 16-10-15
Пользователь №: 88 894

|
Цитата(SpyBot @ Mar 23 2016, 04:19)  Так один поток содержит 8 каналов. В разных потоках пусть и с одинаковым номером канала вполне дма будет работать. DMA STM32F407 Ага, записать в один регистр (например DMA2_Stream0 -> CR) - два разных номера канала.
|
|
|
|
|
Mar 23 2016, 02:05
|
Местный
  
Группа: Участник
Сообщений: 244
Регистрация: 29-02-08
Пользователь №: 35 503

|
Цитата(SpyBot @ Mar 23 2016, 02:19)  Так один поток содержит 8 каналов. В разных потоках пусть и с одинаковым номером канала вполне дма будет работать. Это один канал МОЖЕТ иметь в качестве источника вызова ОДИН из восьми потоков. Хотя по принципу, по которому устроены регистры конфигурации, вполне возникает обратное впечатление. Но оно ложное. Проверено электроникой (с) Цитата(AVI-crak @ Mar 23 2016, 05:06)  DMA STM32F407 Ага, записать в один регистр (например DMA2_Stream0 -> CR) - два разных номера канала. Вообще то так оно и выглядит. Для кажого потока есть регистр CR, в каждом из которых можно задать одинаковый номер канала(речь только о чипах F4xx).Типа на один канал можно повесить до 8 потоков. Вот такая фегня от ST.
Сообщение отредактировал nanorobot - Mar 23 2016, 03:25
|
|
|
|
|
Mar 23 2016, 03:04
|
Частый гость
 
Группа: Участник
Сообщений: 182
Регистрация: 16-10-15
Пользователь №: 88 894

|
Цитата(nanorobot @ Mar 23 2016, 09:05)  Вот такая фегня от ST. Неужели так сложно расставить запятые? смысл сообщения меняется - казнить нельзя миловать. DMAx * DMAx_Stream * 8 = 16. И для таких случаев проще написать собственную библиотеку дма один раз, и больше не парится с кубиками и разными чипами.
|
|
|
|
|
Mar 23 2016, 03:52
|
Местный
  
Группа: Участник
Сообщений: 244
Регистрация: 29-02-08
Пользователь №: 35 503

|
Цитата(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. С утра, на свежую голову разобрался, нашел косяк в своем коде. Все действительно работает. Еще раз простите.
|
|
|
|
|
Mar 23 2016, 04:13
|
Участник

Группа: Участник
Сообщений: 38
Регистрация: 24-02-09
Из: Екатеринбург
Пользователь №: 45 296

|
Stream -- это поток. Channel -- это канал. Каждый поток настраивается независимо. Не знаю, как у F40x, а у ST32F429 в разных потоках можно использовать даже одно и то же событие для запуска транзакции (см. DMA2, Stream1:ch6, Stream3:ch6, Stream6:ch0 -- все они могут срабатывать по сигналу TIM1_CH1). Думаю, у F40x точно так же.
Илья
Сообщение отредактировал 501-q - Mar 23 2016, 04:15
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|