Цитата(chOl @ Apr 14 2011, 08:35)

Вопрос к знатокам. Задача: одновременная работа 4-х, 8-ми разрядных PWM каналов, частота PWM > 32 kHz, значения в регистрах обновлять через 125uS, данные являются 8-ми разрядными выборками аудио сигналов и хранятся в 4-х flash массивах. Вопрос, возможно ли обойтись без обработчика прерываний, а использовать только DMA для циклической пересылки из flash в TIMx->CCRx? Использую контроллер STM32F103B (второй день нет результата). Пасиба.
Если хотите использовать один канал DMA, то так сделать не получится.
DMA не умеет пересылать по одному запросу некоторыми порциями.
Здесь или 1. использовать 4 таймера (по одному каналу DMA на каждый),
или 2. иметь прерывание после пересылки каждого блока данных, а блоком данных тогда будут значения для четырёх каналов, один сэмпл.
Кстати, тоже выводил звук через таймеры STM32 правда у меня только один канал.
Скажу, что обновлять значения в регистрах лучше всё-таки не 8кГц, а с передискретизацией. Я делал 24кГц, и два дополнительных отсчёта вычислял по соседним.
Ещё, если используется динамик прямо в устройстве, то можно подавать ШИМ прямо на него, не преобразовывая в аналоговый сигнал. Только буфер поставить, и отдельным сигналом отключать буфер когда ничего не выводится.
При тактовой таймера 24МГц вполне прилично получается вывод голосовых сообщений, записанных как 8ксэмплов/сек
Регулировка громкости тоже работает нормально, простым умножением