Массив и DMA

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
SyncM
Открыл глаза
Сообщения: 62
Зарегистрирован: Вт ноя 03, 2009 07:44:57

Массив и DMA

Сообщение SyncM »

Здравствуйте, такой вопрос, Есть массив uint8_t А[8][16] и два масссива uint8_t B[16] C[16] можноли как то настроить DMA memory to memory чтобы в массив В заносились данные с массива А построчно сначала А[0][ ] потом А[1][ ] а в С с массива А начиная с А[4]
Реклама
Аватара пользователя
AlanDrakes
Прорезались зубы
Сообщения: 236
Зарегистрирован: Пн июл 04, 2016 16:51:22
Откуда: Россия, Омск

Re: Массив и DMA

Сообщение AlanDrakes »

Такой код сработал бы в STM32F4/F7 и аналогичных.
Для F1/F0/F3 придётся подобрать соответствующие названия регистров.

Код: Выделить всё

DMAx_StreamY->M0AR = (uint32_t)&(A[0][0]);
DMAx_StreamY->PAR = (uint32_t)&(B[0]);
DMAx_StreamY->NDTR = 16;
Либо я неправильно понял Ваше пожелание.
Если нужно сделать так:
A[0][0] -> B[0]
A[0][1] -> B[1]
A[0][2] -> B[2]
<...>
То всё сработает.
Если так:
A[0][0] -> B[0]
A[1][0] -> B[1]
A[2][0] -> B[2]
То не сработает. DMA проходит по памяти побайтно и не будет прыгать через массив.

И, да, запрягать DMA для копирования 16 байт - стрелять по воробьям из пушки. Проще сделать самим процессором.
Реклама
jcxz
Мудрый кот
Сообщения: 1717
Зарегистрирован: Вт авг 15, 2017 10:51:13

Re: Массив и DMA

Сообщение jcxz »

[uquote="SyncM",url="/forum/viewtopic.php?p=3656358#p3656358"]Здравствуйте, такой вопрос, Есть массив uint8_t А[8][16] и два масссива uint8_t B[16] C[16] можноли как то настроить DMA memory to memory чтобы в массив В заносились данные с массива А построчно сначала А[0][ ] потом А[1][ ] а в С с массива А начиная с А[4][/uquote]
Да, возможно. Например EDMA3 в OMAP-L1xx-процессорах умеет выполнять 3-х-мерные передачи и может как угодно переставлять строки/столбцы массивов при пересылке.

Добавлено after 46 seconds:
[uquote="AlanDrakes",url="/forum/viewtopic.php?p=3656692#p3656692"]То не сработает. DMA проходит по памяти побайтно и не будет прыгать через массив.[/uquote]
Не говорите за все процессоры - вы всех не знаете. 8)
Аватара пользователя
240265
Электрический кот
Сообщения: 1029
Зарегистрирован: Сб мар 09, 2013 11:29:22
Откуда: 40RUS, Жуков

Re: Массив и DMA

Сообщение 240265 »

jcxz

[uquote="AlanDrakes",url="/forum/viewtopic.php?p=3656692#p3656692"]Такой код сработал бы в STM32F4/F7 и аналогичных.
Для F1/F0/F3 придётся подобрать соответствующие названия регистров.[/uquote]
IVL ex UA6PJ
Реклама
Эиком - электронные компоненты и радиодетали
jcxz
Мудрый кот
Сообщения: 1717
Зарегистрирован: Вт авг 15, 2017 10:51:13

Re: Массив и DMA

Сообщение jcxz »

[uquote="240265",url="/forum/viewtopic.php?p=3656910#p3656910"]jcxz[/uquote]
И...?
Реклама
SyncM
Открыл глаза
Сообщения: 62
Зарегистрирован: Вт ноя 03, 2009 07:44:57

Re: Массив и DMA

Сообщение SyncM »

Спасибо за ответы, да мне нужно было бы
A[0][0] -> B[0]
A[1][0] -> B[1]
A[2][0] -> B[2]

проц STM32F1,
придется делать в цикле
Реклама
Аватара пользователя
AlanDrakes
Прорезались зубы
Сообщения: 236
Зарегистрирован: Пн июл 04, 2016 16:51:22
Откуда: Россия, Омск

Re: Массив и DMA

Сообщение AlanDrakes »

[uquote="jcxz",url="/forum/viewtopic.php?p=3656876#p3656876"]Не говорите за все процессоры - вы всех не знаете. 8)[/uquote]
Согласен, всех не знаю :facepalm:
Но предположил (и неожиданно, угадал) что это STM32Fx
Про F1 подумывал.
Как-никак они больше распространены среди любителей (да и на прилавках магазинов тоже).
Ответить

Вернуться в «ARM»