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

 
 
> приоритеты DMA запросов lpc1768, Кто кого?
AndruLud
сообщение Mar 7 2012, 18:36
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 26
Регистрация: 18-07-11
Пользователь №: 66 290



Привет всем! Ситуация следующая: 2 канала DMA lpc1768 сконфигурированы для предачи данных "память-память" и "память-перефирия" соответственно. Запрос на передачу генерит один и тот же таймер. Какой из каналов DMA начнет передачу первым? В мануале описана лишь ситуация, когда по одному каналу передача уже идет, а запрос поступает к другому каналу. Там же есть рекомендации использовать для передачи "память-память" каналы с более низким приоритетом, иначе другие каналы не запустятся.

С уважением.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
AndruLud
сообщение Mar 12 2012, 18:38
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 26
Регистрация: 18-07-11
Пользователь №: 66 290



Согласен с Вами, что запросы DMA и пересылки - разные вещи, но их несвязанность на логическом уровне для меня не очевидна. Смущает следующая фраза из мануала (с.605), описывающая назначение бита, определяющего вроде как переферийный источник запроса: "Source peripheral. This value selects the DMA source request peripheral. This field is ignored if the source of the transfer is from memory...." Если бы не последнее предложение, то все прозрачно. Почему, согласно последнему предложению, контроллеру DMA становится все равно, откуда приходит запрос, если передача по DMA будет вестись из памяти?
Go to the top of the page
 
+Quote Post
jcxz
сообщение Mar 13 2012, 16:48
Сообщение #3


Гуру
******

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



Да вроде там всё понятно: если передача память->периферия, то поле SrcPeripheral игнорится (старт передачи происходит по инициативе периферии), если передача память<-периферия, то поле DstPeripheral игнорится (то же), передачи память->память очевидно можно стартовать только вручную выставив запрос старта через DMACSoftBReq/DMACSoftSReq (оба поля DstPeripheral и SrcPeripheral игнорятся), насчёт случая периферия->периферия - не знаю, да и сомневаюсь в его нужности.
Думаю - если Вы выставите режим память->память, то не сможете такую передачу запустить от сигнала DMA-запроса периферии, а только вручную через DMACSoftBReq/DMACSoftSReq хотя утверждать не стану, ибо сам никогда не использовал память->память.
Так что поле TransferType определяет какое из полей DstPeripheral или SrcPeripheral используется для определения источника DMA-запроса.
(Возможно что в случае "периферия->периферия" используются оба - по одному чтение во внутренний буфер DMAC, по другому - запись в периферию из буфера. Никогда не использовал этот тип передачи).
В алгоритме предложенном мной выше, режим будет память->периферия всегда, а источник запросов - ваш таймер в DstPeripheral, SrcPeripheral - игнор.

Посмотрите мануал на LPC178x - там DMACCxConfig еще больше усложнился wink.gif
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 20th July 2025 - 15:29
Рейтинг@Mail.ru


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