ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
2 июля
362227 Топик полностью
koyodza (16.10.2012 12:42, просмотров: 125) ответил Лeoнид Ивaнoвич на Сколько раз ни спрашивал, как сделать DDS с использованием DMA, никто пока не ответил.
наверное, не там или не так спрашивали делается это примерно так же, как вывод звука. Выделяем буфер для данных (один из двух половин, хотя можно и два отдельных). Размер буфера определяет как часто будут происходить прерывания для его заполнения. Настраиваем таймер на нужную частоту дискретизации, по таймеру запускается циклическая пересылка DMA память -> ЦАП с автоинкрементом памяти. Настраиваем прерывания по половине буфера и по концу буфера. Обработчик прерывания заполняет ту половину буфера, которая была отправлена. Заполняет тем способом, который нужен, это DDS или распаковка очередного куска аудиофайла, или что там Вам нужно. По сравнению с прерываниями для каждой выдачи в ЦАП это имеет ряд преимуществ: уменьшаются накладные расходы на вход-выход в прерывания, т.к. они происходят намного реже (в зависимости от размера буфера), особенно это важно при высокой частоте дискретизации. Нет требований к джиттеру и к равномерности времени выполнения алгоритма. Упрощается параллельное выполнение других задач. Вместо заполнения буфера в прерывании лучше использовать заполнение в одной из фоновых задач, а прерывание только активирует её установкой флага или постановкой в очередь сообщений, но это уже следующий уровень