-----
Пересобрал НИОС2 , и решил подобавлять alt_dcache_flush_all в код.
Что самое интересное - если вставить эту функцию после начальной инициализации массивов
Код
for (i=0;i<16;i++)
{
inbuffer[i]=0;
outbuffer[i]=i+1;
}
//*******
alt_dcache_flush_all();
//*******
waddr = (alt_u32)&inbuffer[0];
raddr = (alt_u32)&outbuffer[0];
buff_length = 8;
//
Тогда всё ок - по printf -> выдаётся то, что и должно быть
Цитата
!!!inbuffer= 1 2 3 4 5 6 7 8 !!!outbuffer= 1 2 3 4 5 6 7 8 !!!
А если вставить alt_dcache_flush_all после цикла ожидания
Код
while ( IORD_ALTERA_AVALON_DMA_STATUS(DMA_BASE) & (ALTERA_AVALON_DMA_STATUS_BUSY_MSK))
{ // ждем пока все не передаст
asm volatile ("nop");
}
//flush
//alt_dcache_flush_all();
//отображение
printf("!!!");
То выдаётся такое:
Цитата
!!!inbuffer= 0 0 0 0 0 0 0 0 !!!outbuffer= 1 2 3 4 5 6 7 8 !!!
Как это можно объяснить ?
Ведь в описании комманды
flushd , которую собсно и вызывает alt_dcache_flush_all указано, что:
Цитата
Flushes the data cache line associated with address rA + σ (IMM16).
То есть очищает кеш данных асоциированных с адресом таким то..
Почему очистка после ожидания флага не даёт результата ??