к контроллеру подключен 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 байта это ведь мало?
в даташите упоминается о потоковом режиме. что это такое и поможет ли он в данной ситуации?