toshas 0 November 20, 2017 Posted November 20, 2017 · Report post Как вариант посмотрите как настроить прерывание не по уровню, а по фронту. Можно сделать или через отдельный контроллер GPIO или вроде бы даже напрямую в контроллере прерываний. Quote Share this post Link to post Share on other sites More sharing options...
ilyaprok 0 November 21, 2017 Posted November 21, 2017 (edited) · Report post Как вариант посмотрите как настроить прерывание не по уровню, а по фронту. Можно сделать или через отдельный контроллер GPIO или вроде бы даже напрямую в контроллере прерываний. Да настроил,спасибо. С помощью функции XScuGic_SetPriorityTriggerType. Теперь все правильно работает. Остается как то скачать дамп памяти в файл и посмотреть. Пытаюсь через XSCT консоль - но не понимаю. Использую вот такую команду - mrd -bin -file mem.bin 0x01000000 360960. Но не понимаю где этот файл найти, или нужно сначала его открыть, потом записать, потом закрыть. А что за команды? Edited November 21, 2017 by ilyaprok Quote Share this post Link to post Share on other sites More sharing options...
toshas 0 November 21, 2017 Posted November 21, 2017 · Report post В TCL консоли вы можете понять в какой рабочей директории находитесь командой dir. Quote Share this post Link to post Share on other sites More sharing options...
ilyaprok 0 November 21, 2017 Posted November 21, 2017 (edited) · Report post В TCL консоли вы можете понять в какой рабочей директории находитесь командой dir. Спасибо! получил первое изображение: Вам toshas и svedach Большое Спасибо!!!! Я прям рад! Однако вопрос возник - если идет запрос к DRAM памяти сразу несколькими мастерами как будет происходит чтение или запись? Можно например обращаться к памяти в DRAM, пока идет чтение или запись в тот же регион с помощью DMA? А если несколько DMA использовать - как они будут делить доступ? И еще вопрос по поводу глобальных переменных - где они создаются в кеше? какого уровня? И что означает эта функция, зачем очищать кэш? Xil_DCacheFlushRange Я использую по совету svedach Xil_Out32(XPAR_AXI_DMA_0_BASEADDR + 0x48, AddrDst); Xil_DCacheFlushRange(AddrDst, 752); Xil_Out32(XPAR_AXI_DMA_0_BASEADDR + 0x58, 752); И еще получается 480*60=28800 раз в секунду вызывается прерывание по DMA, это же съедает много процессорного времени? Edited November 21, 2017 by ilyaprok Quote Share this post Link to post Share on other sites More sharing options...
svedach 0 November 21, 2017 Posted November 21, 2017 · Report post Добрый день! Поздравляю! Xil_DCacheFlushRange - это сброс кешированных данных из кеша в ДДР. Как я смог разобраться, несмотря на то, что память распределена в ДДР, Цинк перегоняет данные в кеш, а потом как будет время - в ДДР. Эта команда заставляет его скинуть последние принятые данные в ДДР. Quote Share this post Link to post Share on other sites More sharing options...