
STM32F429 Double Buffered DMA IRQs
Здравейте,
Става дума за STM32F429 и прекъсванията, които генерира DMA в конфигурация DoubleBuffered Mode.
Лично на мен ми се виждат страшно нелогични и след цял ден борба приемам, че нещо ми обягва.
Конфигурирал съм двойнно буферирано DMA от ADC-то към два буфера в паметта на микроконтролера и работи, редува буферите, опресняват се данните постоянно. ADC-то се trigger-ва от timer , честотата на дискретизация е 900kHz.
Разрешени са прекъсванията за Half Complete Transfer и Full Complete Transfer.
Другите две за грешка и OVERRUN също са разрешени, но те не възникват.
Моля погледнете приложеното изображение:
Това, което ще видите е със Синьо - първо 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 прекъсване и ако да, не че ще ми помогне, но защо ?
Благодаря за отделеното време.