Вы правильно догадываетесь об использовании предделителей у каждого периферийного модуля.
Для UART с этим вообще нет особых проблем, если соотношение частоты тактирования и скорости передачи достаточно большое. Ведь предделитель UART 16-и разрядный и дает широкий диапазон перестройки для битовой частоты.
У АЦП период готовности результата можно варьировать совокупностью предделителя и времени сэмплирования. Оптимальное время сэмплирования выбирается, исходя из условий выходного сопротивления источника сигнала. Именно этот момент вы поняли как наличие ФНЧ на входе АЦП. Только это (наличие эквивалента RC на входе АЦП) не полезная функция, а паразитное явление с которым нужно считаться. Время сэмплирования можно увеличивать в большую сторону от оптимального (правда это увеличение влияет на общее энергопотребление МК), но если оно уже выбрано оптимальным, то такой необходимости нет. Вам ведь важно, чтобы период оцифровки входного сигнала совпадал с периодом выдачи оцифрованных сэмплов на устройство воспроизведения. И если АЦП будет оцифровывать быстрее, чем требуется, то это даже неплохо. Выберите частоту дискретизации, например, Fдискр=8кГц или 10кГц или даже 11,025кГц (частота сэпмлирования звука для записи на аудио компакт дисках - 44,1кГц, 44,1кГц/4=11,025кГц). Соответственно, если у вас время оцифровки звука будет меньше, чем 1/Fдискр., то все нормально. Вам ведь главное синхронизировать начало запуска преобразования с этой частотой. Сихронизировать с PWM можно, использовав один из его каналов для генерации сигнала управления SAMPCON ADC12. См. на рисунках в соответствующем разделе User's Guide. Если используете Timer_B, то это будут TB0.0 или TB0.1. Т.е. вместо программного запуска преобразования с помощью бита ADC12SC и использования Sample Timer, используйте сигнал ШИМ от Timer_B с подходящими параметрами длительности для генерации этого самого сигнала (SAMPCON). Для такой работы достаточно скоммутировать эти сигналы внутри. См. описания битов ADC12SHSx в регистре ADC12CTL1. При такой настройке оцифровка звука будет происходить синхронно с периодом генерации ШИМ-сигнала. Т.е. если рассматривать на примере той же самой частоты тактирования 1МГц, то при 8-ми битном ШИМ его будет 256 тактов. Соответственно сигнал PWM длительностью 96 тактов будет отвечать за выборку (t
sample) и еще 9 тактов (предполагаю, что режим АЦП тоже 8-ми битный) будет затрачено на преобразование (t
convert). Соответственно на 106 такте PWM результат оцифровки уже будет готов, его можно считать и подготовить для записи в таймер для генерации следующего сэмпла звука. При этом еще 150 тактов АЦП будет просто простаивать.
Ну и неплохо бы все это взаимодействие организовать с использованием прерываний. Но этот этап пока отложите до тех пор, пока не добьетесь нормального воспроизведения внутри МК, без использования связи.
P.S. ну и про фильтр на выходе. Естественно, что фильтр нужен. Я думал, что вы и сами поняли это из чтения Using PWM Timer_B as a DAC. Тот факт, что вы не слышали заметных искажений на примерах TI может быть объяснимо тем, что там синус, а не речь синтезируется.
Эскизы прикрепленных изображений