реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> FreeRTOS, Ищу примеры работы со звуком
uriy
сообщение Aug 15 2017, 10:18
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 429
Регистрация: 30-11-05
Из: Ижевск
Пользователь №: 11 606



Делаю проект. В железке используются микрофон, динамик, кнопки, дисплей и USB.
Для динамика сейчас выставлен самый высокий приоритет, но даже при этом слышна какая-то рваность в звуке.
Когда остается только одна задача вывода звука такой эффект пропадает.
Сейчас для вывода звука сделана отдельна задача.
В ней происходит масштабирование сэмплов для регулировки уровня громкости и переключение между буферами.
Два буфера. Один выводится по DMA в динамик другой обрабатывается. Они переключаются внутри задачи вывода звука.
В прерывании по завершению DMA взводится семафор. Внутри задачи жду этот семафор, после получения переключаю буфер и так дальше.
Буфера по 180 сэмплов, вывод на частоте 8 кГц. Проц работает на 180 Мгц.
Когда работает несколько задач возникает ощущение что на переключение контекста уходит много времени и получается разрыв в ЦАП.
Может быть кто-то знает где посмотреть подобные примеры?
Пока параллельно разбираюсь с Tracealyzer
Go to the top of the page
 
+Quote Post
jcxz
сообщение Oct 6 2017, 07:55
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(uriy @ Aug 15 2017, 17:18) *
В прерывании по завершению DMA взводится семафор. Внутри задачи жду этот семафор, после получения переключаю буфер и так дальше.

В этом скорее всего и есть причина разрывов.
DMA надо перезапускать в самом ISR. А ещё лучше: организовать double-buffer DMA (чтобы после завершения передачи через DMA очередного блока сразу начинал передаваться следующий и при этом происходило прерывание, сигнализирующее о смене блока). И данные для следующих блоков уже должны быть подготовлены заранее задачей.
В задачу спускать только нотификацию о необходимости подкачки данных в кольцевой буфер DMA-блоков.

Цитата(uriy @ Aug 15 2017, 17:18) *
Когда работает несколько задач возникает ощущение что на переключение контекста уходит много времени и получается разрыв в ЦАП.

Конечно. И когда будут (или уже есть) другие ISR, то они тоже будут приводить к задержке переключения контекста.
Go to the top of the page
 
+Quote Post
uriy
сообщение Oct 6 2017, 11:37
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 429
Регистрация: 30-11-05
Из: Ижевск
Пользователь №: 11 606



Цитата
DMA надо перезапускать в самом ISR.
Да я уже сообразил что именно так нужно делать. Теперь работает как надо. Сейчас даже стыдно осознавать что я потратил пару недель прежде чем понял это.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th April 2024 - 15:51
Рейтинг@Mail.ru


Страница сгенерированна за 0.01355 секунд с 7
ELECTRONIX ©2004-2016