встроенная система: чтение того же блока памяти с двумя разными DMA - PullRequest
1 голос
/ 23 декабря 2009

Я новичок в программировании встроенных устройств. У меня есть задача, которая читает блок данных с адреса памяти DSP и копирует его на другие адреса (где сопоставляются другие периферийные устройства). процесс копирования выполняется путем программирования одного из каналов DMA в устройстве. Я хотел бы, чтобы копия этих данных была скопирована в другом месте в дополнение к первой копии.

Теперь мой вопрос: если я использую второй канал DMA и включу его операцию копирования сразу после того, как первый DMA начнет выполнять свою работу, будут ли две операции DMA сталкиваться друг с другом каким-либо образом?

1 Ответ

4 голосов
/ 23 декабря 2009

Зависит, я уверен, от того, на чем вы это делаете, но нет, каналы DMA вряд ли будут «сталкиваться», хотя один может вытеснить другой.

Если вы используете это на одном из устройств Microchips dsPIC33F, смысл DMA в том, что доступ не зависит от процессора. Если вы правильно рассчитали время, то вы можете сопоставить время DMA с вашим временем синхронизации и получать атомарные чтения или записи. Кроме того, вы можете иметь до 8 однонаправленных каналов, упорядоченных по приоритету.

На этой платформе, я полагаю, (я не знаю), что два канала DMA не будут работать одновременно, они будут работать один за другим, основываясь на приоритете этих конкретных каналов. Канал с более высоким приоритетом закончится первым, даже если канал с более низким приоритетом стартовал первым.

Итак, да, вы можете копировать информацию в два разных места, не используя тактовые частоты процессора, но это займет вдвое больше времени.

...