Kuzmi4 0 12 мая, 2008 Опубликовано 12 мая, 2008 · Жалоба ----- Пересобрал НИОС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 !!! Как это можно объяснить ? :smile3046: Ведь в описании комманды flushd , которую собсно и вызывает alt_dcache_flush_all указано, что: Flushes the data cache line associated with address rA + σ (IMM16). То есть очищает кеш данных асоциированных с адресом таким то.. Почему очистка после ожидания флага не даёт результата ?? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vetal 0 12 мая, 2008 Опубликовано 12 мая, 2008 · Жалоба Почему очистка после ожидания флага не даёт результата ?? alt_dcache_flush_all() скадывает данные из кэша в озу и производит сброс(инициализацию) кэша. Выполнение функции после отработки дма затирает новые данные старыми. Вроде так :) Из словаря promt(информатика): flush- сбрасывать на диск. В нашем случае мочно читать как : перемещать в память. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kuzmi4 0 12 мая, 2008 Опубликовано 12 мая, 2008 · Жалоба Тогда получатся всё правильно - я инициализирую данные начальными значениями, сбрасываю с кеша в сдрам и сбрасываю кеш, потом запусукаю ДМА , а после процесор смотрит что у него нету этих данных в кеше и берёт с сдрама... 2 vetal - :a14: Вот оно как хитро получается... :) Прицепил си-шный код, вдруг кому понадобится.. DMA_example.txt Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexanderL 0 28 мая, 2008 Опубликовано 28 мая, 2008 (изменено) · Жалоба Вот оно как хитро получается... молодец, :a14: +1, я бы даже и не догадался что ДМА так будет работать с кэшируемыми данными хорошо что раскопал, (у меня были другие проблемы (разрядность brust count и разряднорсть передаваемых данных)), спасибо буду знать. Изменено 28 мая, 2008 пользователем AlexanderL Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться