Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: TI AM1808
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
doom13
Приветствую!
Начинаю разбираться с контроллером EDMA3 и есть вопросы (пока теория).
Вопрос 1.
В чём отличие DMA канала и QDMA канала и кто они такие (можно очень подробно)?
Основное ли это отличие:
Цитата
DMA channel - A channel that can be triggered by external, manual, and chained events. All DMA channels exist in the EDMA3CC.
QDMA channel - One of the 8 channels that can be triggered when writing to the trigger word (TRWORD) of a PaRAM set.

, или есть что-то ещё?
Вопрос 2.
Зачем в EDMA3_CC 128 128 parameter RAM (PaRAM) entries, если DMA каналов 32 + 8 QDMA, а согласно DMA Channel to PaRAM Mapping
Цитата
The mapping between the DMA channel numbers and the PaRAM sets is a fixed, one-to-one mapping
???
Для DMA каналов можно использовать первые 32 PaRAM, всё остальное для 8 QDMA каналов???
SM
Про размер памяти - там же цепочки задавать можно, на один канал вовсе не один набор параметров, а сколько надо, и закольцевать можно.

про QDMA - (по аналогии с C6xxx) - QDMA предназначен для быстрых внутренних пересылок данных, а EDMA - для общения с периферией. QDMA стартует сразу. А EDMA с задержкой, пока event пройдет.
jcxz
Цитата(doom13 @ Sep 12 2014, 19:59) *
В чём отличие DMA канала и QDMA канала и кто они такие (можно очень подробно)?

Мне хватило обычных DMA-каналов на все нужды и зачем нужны QDMA я так и не понял (и не особо разбирался wink.gif

Цитата(doom13 @ Sep 12 2014, 19:59) *
Зачем в EDMA3_CC 128 128 parameter RAM (PaRAM) entries, если DMA каналов 32 + 8 QDMA, а согласно DMA Channel to PaRAM Mapping???

Первые 32 - физические каналы. Остальные - теневые каналы.
Т.е. - если вам нужна транзакция связным списком (или пинг-понг и т.п.), то физический канал программируете
на передачу первой порции данных, делаете в нём ссылку на первый теневой канал, в котором прописаны параметры для след. порции данных.
Далее - в первом теневом можете сделать ссылку на второй теневой, в котором параметры для 3-го блока. И так далее.
Или в одном из теневых каналов можно зациклить передачу на первый теневой канал.
Теневой канал - это набор значений регистров конфигурации DMA канала, которые грузятся в ссылающийся на него физический канал,
когда в физическом заканчивается очередной блок передачи.
Примерно так.

PS: Да, если что - моя информация из опыта с OMAP L137. Но думаю подходит.
doom13
Спасибо, с PaRAM, вроде, стало понятно. Если работает канал DMA с номером N, то он всегда начинает обслуживать передачу с параметрами описанными в PaRAM с номером N, а далее либо по цепочке, либо пинг-понг, либо опять же PaRAM с этим номером при новой передаче. PaRAM с номером канала который не используется можно, как понял, использовать для других каналов (пинг-понг, связный список).

С QDMA-каналом пока остаются вопросы. Может можно и без них обойтись, но хотелось бы понять в каких случаях использовать QDMA предпочтительнее?
А что значит QDMA стартует сразу? Т.е. заполнили соответствующий PaRAM и оно погнало, а DMА типо будет ждать что кто-то
скажет "го"? Но ведь для DMA тоже можно запуск делать через запись регистра, т.е. практически тоже самое и настроить на перемещение данных из разных участков On-Chip memory.
А QDMA - это от "quad"?
jcxz
Цитата(doom13 @ Sep 15 2014, 15:08) *
Спасибо, с PaRAM, вроде, стало понятно. Если работает канал DMA с номером N, то он всегда начинает обслуживать передачу с параметрами описанными в PaRAM с номером N, а далее либо по цепочке, либо пинг-понг, либо опять же PaRAM с этим номером при новой передаче. PaRAM с номером канала который не используется можно, как понял, использовать для других каналов (пинг-понг, связный список).

Не совсем точно.
Первые 32 - это физические каналы. Т.е. - собственно сами каналы.
И насколько я помню (хотя может ошибаюсь?) Вы не можете их использовать для хранения данных о следующих блоках пересылки.
Следующие блоки всегда хранятся в теневых каналах. Теневые каналы - это собственно просто регион памяти (массив ParamSET), который может использовать EDMA3 для подгрузки данных о новых блоках передачи.
Когда в физ. канале исчерпывается блок и в нём есть ссылка на один их теневых каналов, то данные о блоке загружаются из этого теневого канала в физический и начинают там выполняться.
И так далее по цепочке блоков.
В физическом канале счётчики декрементируются, адреса изменяются, а в теневом - нет.
doom13
Т.е. работает, как на рисунке, в качестве LINK нельзя указывать адреса первых 32-х (в моём случае) каналов. Они железно приспособлены для задания параметров первой передачи. Так?
SM
Цитата(doom13 @ Sep 15 2014, 13:08) *
А QDMA - это от "quad"?

Нет, это "Quick" - используйте его для безусловных (не синхронизируемых извне) пересылок память-память - обычный memcpy, грубо говоря.
doom13
Цитата(SM @ Sep 15 2014, 16:22) *
Нет, это "Quick" - используйте его для безусловных (не синхронизируемых извне) пересылок память-память - обычный memcpy, грубо говоря.

Ясно, как понимаю, этот "Quick" заключается только в том, что не надо устанавливать бит запуска в EVENT SET REGISTER.
SM
Цитата(doom13 @ Sep 15 2014, 17:34) *
Ясно, как понимаю, этот "Quick" заключается только в том, что не надо устанавливать бит запуска в EVENT SET REGISTER.

Задержка не в том, что надо устанавливать этот бит, а, собственно, в пачке тактов на прохождение этого евента через арбитраж до собственно запуска самой передачи.
doom13
Читаю далее. И вот что-то не могу понять, что такое shadow regions и что с ними делать? Написано что для каждого контроллера канала их 4 и ещё много всего, но что-то понимание того, что же это такое не приходит. Если можно, поясните, спасибо.
SM
Это копии основного набора регистров, но ограниченные по доступу, в каждом из регионов можно задать список каналов, которые через него доступны, права доступа, и т.п. фигню, предназначенную для целей защиты доступа. Вам это вряд-ли надо вообще, это нужно для целей безопасности в многозадачных и многопользовательских окружениях.
jcxz
Цитата(doom13 @ Sep 15 2014, 17:47) *
Т.е. работает, как на рисунке, в качестве LINK нельзя указывать адреса первых 32-х (в моём случае) каналов. Они железно приспособлены для задания параметров первой передачи. Так?

Ну да, насколько помню - инфа о след. блоках может грузиться только из памяти (теневых каналов), а из физических - не может.
SM
Цитата(jcxz @ Sep 16 2014, 20:13) *
Ну да, насколько помню - инфа о след. блоках может грузиться только из памяти (теневых каналов), а из физических - не может.

А я вот не помню каких либо ограничений на использование PARAM для LINK-ов. Да и в доке написано:

Any PaRAM set in the PaRAM can be used as a link/reload parameter set.

Есть только мелкое ограничение, касающееся, что если набор параметров ассоциирован с евентом, то он может использоваться для линка, если этот евент запрещен.
doom13
Цитата(SM @ Sep 16 2014, 20:31) *
А я вот не помню каких либо ограничений на использование PARAM для LINK-ов. Да и в доке написано:

Any PaRAM set in the PaRAM can be used as a link/reload parameter set.

Есть только мелкое ограничение, касающееся, что если набор параметров ассоциирован с евентом, то он может использоваться для линка, если этот евент запрещен.

Нашёл такое в доке, получается - любой PaRAM можно использовать в качестве линка. Но, наверное, первые 32 лучше не использовать, если только не хватает остальных.
jcxz
Возможно у меня были какие-то проблемы с этим, возможно теневые наборы не грузились из физических PaRAM. Не помню уж.
Да и зачем их использовать если целый вагон теневых?
doom13
Почему в CCS (v 5.5.0) в окне Registers отсутствуют регистры для EDMACC0ARM?
SM
Вы бы лучше это спросили у TI, тут точно никто не знает sm.gif. Это все описывается кучей XML-файлов в папке targetdb.
doom13
Цитата(SM @ Sep 18 2014, 17:35) *
Вы бы лучше это спросили у TI, тут точно никто не знает sm.gif. Это все описывается кучей XML-файлов в папке targetdb.

У TI уже попробовал спрашивать про проблему с подключением, пока пытались спихнуть всё на кривой софт, то ещё что-то там отвечали, потом вообще проигнорили sad.gif
Non-linear
Цитата(doom13 @ Sep 17 2014, 10:52) *
Нашёл такое в доке, получается - любой PaRAM можно использовать в качестве линка. Но, наверное, первые 32 лучше не использовать, если только не хватает остальных.


Я нулевой дескриптор оставил на всякий случай, как "тупой" линк, все остальные использую произвольно.
Но надо следить, чтобы лишние каналы DMA/QDMA не были включены.

(это все на AM3352, но в AM18XX EDMA, вроде как, такой же)

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