Отговори на тема  [ 2 мнения ] 
STM32F429 Double Buffered DMA IRQs 
Автор Съобщение
Ранг: Популярен
Ранг: Популярен

Регистриран на: Вто Авг 07, 2012 3:16 pm
Мнения: 331
Мнение STM32F429 Double Buffered DMA IRQs
Здравейте,

Става дума за STM32F429 и прекъсванията, които генерира DMA в конфигурация DoubleBuffered Mode.
Лично на мен ми се виждат страшно нелогични и след цял ден борба приемам, че нещо ми обягва.
Конфигурирал съм двойнно буферирано DMA от ADC-то към два буфера в паметта на микроконтролера и работи, редува буферите, опресняват се данните постоянно. ADC-то се trigger-ва от timer , честотата на дискретизация е 900kHz.
Разрешени са прекъсванията за Half Complete Transfer и Full Complete Transfer.
Другите две за грешка и OVERRUN също са разрешени, но те не възникват.

Моля погледнете приложеното изображение:
Прикачени файлове:
Коментар на файл: Time graph of DMA IRQs in Double Buffered Mode [ STM32F429 ]
timegraphOfDoubleBufferedDmaISR-STM32F429.png
timegraphOfDoubleBufferedDmaISR-STM32F429.png [ 26.8 KiB | Прегледано 1221 пъти ]

Това, което ще видите е със Синьо - първо START условие, от което се стартира таймера.
След това в синьо пиковете са Full Complete Transfer, а в червено пиковете са Half Complete.
Честотите на възникване на двата ISR-а след START условието са съответно 32HZ и 64HZ,
което съответства на параметрите. Буферите са по 14000 семпъла.

(64 пъти за една секунда * 14000 семпъла от един буфер ) / 900000 семпъла за секунда = 1 , тоест съответства
и
(32 пъти за една секунда * 28000 семпъла от двата буфера) / 900000 семпъла за секунда = 1 също съответства.

Не мога да разбера каква е логиката, по която трябва да разбера кога буфер 2 е пълен и мога да го обработвам.
Буфер 1 ок, има си Half ISR , има си Full ISR, но след това получавам само един Half ISR без Full ISR.

Стигнах до налудничевата идея да не би при Double buffered mode значенията да са обърнати, демек H=F и F=H, т.е все пак да имам две Full условия и само едно H, но времената не съвпадат.

Наистина ли е спестено едно Full прекъсване и ако да, не че ще ми помогне, но защо ?

Благодаря за отделеното време.


Съб Май 03, 2014 9:04 pm
Профил
Ранг: Популярен
Ранг: Популярен

Регистриран на: Вто Авг 07, 2012 3:16 pm
Мнения: 331
Мнение Re: STM32F429 Double Buffered DMA IRQs
Е не .... има отделен CallBack за Buffer 1 full complete Transfer:
Код:
/* Current memory buffer used is Memory 1 */
        if((hdma->Instance->CR & DMA_SxCR_CT) == 0)
        {
          if(hdma->XferM1CpltCallback != NULL)
          {
            /* Transfer complete Callback for memory1 */
            hdma->XferM1CpltCallback(hdma);
          }
        }

Чак сега го видях ... естествено след като писах :D
Как цял ден съм го прескачал направо се чудя.
Толкова пъти гледха кода на HAL_DMA_IRQ() .


Съб Май 03, 2014 9:12 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 2 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 5 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни