[an error occurred while processing this directive]
|
1) Оптимальный вариант с точки зрения расхода памяти - два буфера,
один заполняется DMA другой обрабатывается, потом меняются. В схеме из трех буферов один обычно "отдыхает", если памяти море - не проблема, но выгоды по сравнению с двумя буферами я не вижу.
2) Если самплы следуют очень быстро, то могут возникнуть проблемы рестартануть DMA в промежутке между самплами. Я использую автоматический перезапуск DMA трансфера, следующий DMA трансфер программируется еще до того как закончился предыдущий. Это на 55xx, на 54xx используется более убогая схема с ABU или один буффер с прерыванием на середине и конце блока (эдакие "виртуальные" два буфера).
Я использую API с четырьмя основными вызовами
ADC_Start() - стартануть получение буферов от ADC
ADC_GetBuffer() - запросить полный буфер от ADC, если есть
ADC_PutBuffer() - вернуть обработанный буфер драйверу ADC
ADC_Stop() - остановить ADC
У меня самплы шли со скоростью 1,562,000-2,048,000 SPS
с ADC который висел McBPS. Опыт у меня в этом деле богатый, раза три переделывал пока наконец не вышел драйвер ADC который мне самому нравится, спрашивайте - помогу.
E-mail: info@telesys.ru