|
STM32F103. DMA Mem-to-Mem |
|
|
|
Feb 17 2011, 08:55
|

Универсальный солдатик
     
Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362

|
Правильно ли я понимаю, что во время работы DMA нельзя программе залазить в память, с которой работает DMA? Вот такую функцию исследую, пока не дожусь конца передачи, дальше не иду. (Не показана установка режима работы, и разрешение тактирования, это делается однократно в начальной установке). Тогда все работает. Иначе, если программа пишет туда, откуда читает DMA, появляется прерывание TEIFx Channel x transfer error flag. А прерывания, что дошло до конца, уже нет. Если все так, то ценность такого DMA уменьшается. Почти то же можно реализовать, как у меня в закомментированном коде. Код void ExtDpy2LCD_copy(uint32_t Offset, uint32_t Size) { LED_On(); DMA2->IFCR |= DMA_IFCR_CTCIF1; DMA2_Channel1->CCR &= ~0x00000001; // запретить пересылку DMA2_Channel1->CPAR = EXTDPY + Offset; // начальный адрес буфера экрана DMA2_Channel1->CMAR = 0x6c020000 + Offset; // начальный адрес памяти ЖКИ DMA2_Channel1->CNDTR = Size; // 16-битовые пересылки DMA2_Channel1->CCR |= 0x00000001; // разрешить пересылку while (!(DMA2->ISR & DMA_ISR_TCIF1)); LED_Off(); /* uint16_t *pSour = (uint16_t *)(EXTDPY + Offset); uint16_t *pDist = (uint16_t *)(0x6c020000 + Offset); LED_On(); for (uint32_t i=Size; i--; ) { *pDist++ = *pSour++; } LED_Off(); */ } Еще один факт для размышлений. Измерил осциллографом время работы показанной выше функции. Для Size = 320*240/2. С DMA имею 20ms, без DMA 21.5ms. Естественно, польза от DMA будет, если, пока байты перекидываются с места на место, процессор будет занят чем-нибудь другим. Например, принимать данные по другим интерфейсам и складывать во внутреннее ОЗУ. Надеюсь, это не притормозит работу DMA.
|
|
|
|
|
 |
Ответов
|
Feb 17 2011, 09:04
|

Ally
     
Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050

|
Цитата(ViKo @ Feb 17 2011, 10:55)  Еще один факт для размышлений. Измерил время работы показанной выше функции. С DMA имею 20ms, без DMA 21.5ms. Естественно, польза от DMA будет, если, пока байты перекидываются с места на место, процессор будет занят чем-нибудь другим. Например, принимать данные по другим интерфейсам и складывать во внутреннее ОЗУ. Надеюсь, это не притормозит работу DMA. Такие факты вырванные из контекста и без описания аппаратуры не более чем трата времени. Приведите схему и весь проект как например здесь: Тесты DMA на STM32 тогда можно о чем-то думать. У вас может просто конфликт по целостности сигналов на плате из-за скверной трассировки. На вашем месте надо было бы провести тщательнее тестирование памяти с сообщить хотя бы какая у вас в целом пропускная способность к памяти.
|
|
|
|
|
Feb 17 2011, 10:13
|

Универсальный солдатик
     
Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362

|
Цитата(AlexandrY @ Feb 17 2011, 11:04)  Такие факты вырванные из контекста и без описания аппаратуры не более чем трата времени. У вас может просто конфликт по целостности сигналов на плате из-за скверной трассировки. На вашем месте надо было бы провести тщательнее тестирование памяти с сообщить хотя бы какая у вас в целом пропускная способность к памяти. Ну какой конфликт, если работает? Частота процессора 72MHz. ОЗУ статическое IS62WV26516BLL-55. Контроллер ЖКИ S1D13706, работает от тактовой частоты 36MHz, старался настроить на наиболее быструю работу. Настройки работы с памятью: Код // -- Bank1 NE2 - RAM 256K x 16 -- FSMC_Bank1->BTCR[2] = 0x00001011; // 16-bit,NoMux,SRAM,En FSMC_Bank1->BTCR[3] = 0x000f0300; // Mode1 0(+1)\_3_/(+1) // -- Bank1 NE4 - LCD 128K + 128K(80K) -- // Читать-писать 16-битовыми или 8-битовыми словами FSMC_Bank1->BTCR[6] = 0x00009011; // ASWait,WrEn,WrapDis,FlashAccDis,16-bit,SRAM,NoMux,En FSMC_Bank1->BTCR[7] = 0x000f1200; // Mode1 0(+1)\_18_____ _/(+1) Да и не при чем это все. Качественное соотношение останется тем же, независимо от быстродействия устройств. Заглянул на вашу ссылку. Читаю... У меня контроллер ЖКИ медленный до безобразия. И память -55 Еще я не сказал - код выполняется из ОЗУ микроконтроллера. Тоже понижает быстродействие. У меня скорость пересылки по DMA получилась 3750 KB/s. Контроллер ЖКИ тормозит.
|
|
|
|
Сообщений в этой теме
ViKo STM32F103. DMA Mem-to-Mem Feb 17 2011, 08:55     ViKo Цитата(scifi @ Feb 17 2011, 12:42) 1. Пол... Feb 17 2011, 12:03      scifi Цитата(ViKo @ Feb 17 2011, 15:03) Вопрос ... Feb 17 2011, 12:35 ViKo Попытал счастья с кодом, выполняемым из Flash. Пок... Feb 18 2011, 08:43 HardEgor Цитата(ViKo @ Feb 18 2011, 14:43) То есть... Feb 18 2011, 09:38  ViKo Цитата(HardEgor @ Feb 18 2011, 11:38) Мож... Feb 18 2011, 09:47 HardEgor И еще, может быть ты попадаешь на момент когда сов... Feb 18 2011, 09:50 ViKo Цитата(HardEgor @ Feb 18 2011, 11:50) пиш... Feb 18 2011, 12:47 HardEgor Так проверить просто - выведи TEIFx на внешний пор... Feb 18 2011, 15:18 ViKo Цитата(HardEgor @ Feb 18 2011, 17:18) Так... Feb 18 2011, 15:43 HardEgor Появляется ошибка при передаче DMA или нет, при от... Feb 18 2011, 20:06 ViKo Проверил работу программы из Flash без отладчика.
... Feb 21 2011, 14:33 ViKo После того, как переписал все свои программы для р... Feb 25 2011, 08:25 scifi Цитата(ViKo @ Feb 25 2011, 11:25) А то и ... Feb 25 2011, 09:00  ViKo Цитата(scifi @ Feb 25 2011, 11:00) Ещё мо... Feb 25 2011, 10:09
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|