Чуть не забыл: датафлеш и VS1033 сидят на одной SPI, CS, естественно разные.
Косяк я все-таки решил вот как:
1) Читаю из датафлешки страницу в 264 байта и пишу ее в массив
2) Шлю массив в VS1033, через каждые 33 байта проверяю DREQ - пашет отлично!
Код
extern unsigned char Buff[264];
void Voiceout(unsigned int Startpage, unsigned int Endpage)
{
unsigned int Page_mem, temp;
vs_write(VS_MODE,0x0804);
vs_setvolume(15);
for (Page_mem = Startpage; Page_mem<Endpage;Page_mem++)
{
ENABLE_DF();
delay_us(1);
SPI(MAIN_MEMORY_PAGE_READ2); //command Current_page_read
SPI(Page_mem>>7);
SPI(Page_mem<<1);
SPI(0x00);
SPI(0x00); // write don't care byte
SPI(0x00); // write don't care byte
SPI(0x00); // start at buffer address 0
SPI(0x00); // write don't care byte
for (temp=0;temp<264;temp++) Buff[temp]=SPI(0xFF);
DISABLE_DF();
for(temp=0;temp<sizeof(Buff);temp+=33) // пересчет байт по сектору
{
while (!(DREQ));
vs_stream(&Buff[temp],33); // если не подошли к концу файла то выведем (отдадим) байт
}
}
delay_ms(100);
vs_setvolume(vol_ee);
}
Вопрос к спецам - можно ли обойтись без буфера в 264 байта? - а то памяти жалко ((