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

 
 
> mp3 декодер VS1003, непрерывный поток данных
denebopetukius
сообщение Apr 6 2009, 04:57
Сообщение #1


Местный
***

Группа: Новичок
Сообщений: 221
Регистрация: 13-11-08
Пользователь №: 41 584



к контроллеру подключен VS1003 на SPI.

есть основной цикл программы, подготавливающий буфер аудио-данных:

Код
while(1)
{
MakeSoundBuffer(Buf);
...
}


есть обработчик прерывания VS1003 (по высокому уровню ножки DREQ):

EXEPTION Handler()
{
for(i=0;i<32;i++) SPISend(Buf[i]);
EOI();
}

тоесть Buf - буфер из 32 байт, по прерыванию засылаем 32 байта в mp3 декодер (по даташиту именно столько можно слать без опроса DREQ)

проблема в том что функция MakeSoundBuffer или остальная часть в программе в главном цикле - очень медленна - буфер не успевает построиться полностью, когда mp3-кодер его уже требует.

в итоге вместо непрерываного звука слышен хрип.

что делать?

подскажите как следует организовать программу по заполнению буфера/чтению из него?

32 байта это ведь мало?

в даташите упоминается о потоковом режиме. что это такое и поможет ли он в данной ситуации?


--------------------
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
RodionGork
сообщение Apr 15 2009, 05:23
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 239
Регистрация: 30-10-07
Из: Санкт-Петербург
Пользователь №: 31 866



Цитата(denebopetukius @ Apr 7 2009, 03:05) *
согласно тем же докам - мы можем пропихать без опроса DREQ не более 32 байта. после этого DREQ=0, до тех пор пока часть не отиграет. Затем када


Я извиняюсь, или я сегодня не в себе, или что - но ваши объяснения очень плохо понятны.
- откуда берутся звуковые данные? их откуда-то получают, или вычисляют или что?
- у вас SPI что работает без пирериваний? причем вся пересылка SPI происходит сама в прерывании обработки DREQ? какая частота SPI?

Я тупой наверное очень, но 32 байта на скорости 22050 это больше одной миллисекунды играния... За это время по-моему можно успеть все на свете... Хотя я не в курсе что у вас там с видео происходит, и насколько оно мешает...

Насчет DREQ... Правильно... почти... Только DREQ опускается не до тех пор, пока "отыграет", а до тех пор, когда освободится место для еще 32 байт... Зря вы на него самого прерывание вешаете... Он довольно произвольно может опускаться и подниматься... Лучше записывать данные когда удобно программе (где-нить по таймеру вставить и т.п., разумеется с условием что срабатывать это чаще чем раз в 1мс должно) - проверяя DREQ... Впрочем и так, вероятно, можно... Насчет "кусков и половинок" я не понял... Комментарии не сказать чтоб особо ясные, извините. Чаю попью, может понятливее стану... ;-)
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 27th June 2025 - 12:15
Рейтинг@Mail.ru


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