Страница 1 из 1

DMA

Добавлено: Чт июл 24, 2014 11:03:55
Pink-Pank
Подскажите, хочу скопировать из одной области памяти в другую.

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

unsigned long Buffer1[] = {0,1,2,3,4,5,6,7,8,9}, Buffer2[10];
...
	RCC->AHB1ENR |= (1<<22); // вкл DMA2

	DMA2_Stream0->M0AR = &Buffer2;
	DMA2_Stream0->PAR = &Buffer1;
	DMA2_Stream0->NDTR = 10;

	DMA2_Stream0->CR = (1<<25) //канал 1
| (0b10<<6) // направление M->M
| (0b10<<11) // размер данных периферии (32)
| (0b10<<13) // размер данных памяти (32)
| 1;// вкл
но что-то не копирует.. После включения потока ДМА, регистр NDTR резко сбрасывается в 0, как будто бы все передал и DMA отключается, но Buffer2 не меняет своего значения.
Пробовал разные каналы включать - не помогает.

Вообще, для общения памяти с самой собой имеет значение, какой поток и канал включать? или можно любой?
СпойлерИзображение

Re: DMA

Добавлено: Чт июл 24, 2014 12:22:49
Pink-Pank
О, пардон! Забыл инкрементировать адреса памяти. Все заработало!