Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Вопрос по AVR32AP7000 USBA с DMA...
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > AVR32
cipher
Не получается добиться работы USBA с DMA. Плата NGW100. Переписал драйвер от линукса. Без DMA всё работает с DMA получается только LOOPBACK, т.е. что принял, то и отправил (при этом внутри МК данных не видно).
Проблема в том, что при приёме с DMA данные куда-то записываются, но куда - я не знаю. При этом в dmaaddress записан например такой адрес 0x10306d40, но по этому адресу никаких изменений не происходит. Если при передаче указать этот же адрес, то данные уйдут корректно.
В MMUCR - 0x00000010 - транслируются только сегменты. Вроде в остальном MMU выключен.
Есть какая-то трансляция памяти или кэширование, но я не знаю по какой причине.
Помогите советом.
Заранее большое спасибо.
singlskv
Цитата(cipher @ Sep 25 2007, 15:59) *
Не получается добиться работы USBA с DMA. Плата NGW100. Переписал драйвер от линукса. Без DMA всё работает с DMA получается только LOOPBACK, т.е. что принял, то и отправил (при этом внутри МК данных не видно).
Проблема в том, что при приёме с DMA данные куда-то записываются, но куда - я не знаю. При этом в dmaaddress записан например такой адрес 0x10306d40, но по этому адресу никаких изменений не происходит. Если при передаче указать этот же адрес, то данные уйдут корректно.
В MMUCR - 0x00000010 - транслируются только сегменты. Вроде в остальном MMU выключен.
Есть какая-то трансляция памяти или кэширование, но я не знаю по какой причине.
Помогите советом.
Заранее большое спасибо.
Скорее всего проблема с кешированием, DMA вероятно нужно запускать на некешируемой
области, к сожалению на AVR32 до этого момента еще не дошел, но то что Вы описываете,
когда в одну сторону не работает а в другую работает, ИМХО это кеш.

А если вместо 0x10306d40 указать 0x90306d40 ???
cipher
Цитата(singlskv @ Sep 25 2007, 21:02) *
А если вместо 0x10306d40 указать 0x90306d40 ???


Я пробовал так делать - никакой разницы. Так как включена трансляция сегментов, то оба адреса проецируются в один и тот же физический адрес.
cipher
Вроде что-то начато получаться. Действительно проблема с кэшированием.
DMA работает напрямую с памятью, а программа читает из кэша. Я сделал перед чтением invalidate кэша
__cache_control((void *)memoryAddress, 0x0B);
стало приниматься то, что отправляю с компьютера. Сейчас буду разбираться с передачей.
singlskv
Цитата(cipher @ Sep 26 2007, 13:57) *
Я пробовал так делать - никакой разницы. Так как включена трансляция сегментов, то оба адреса проецируются в один и тот же физический адрес.
Как это точно реализованно на AVR32 я еще не разбирался, но
на некоторых других процах такое разделение адресов сделано специально,
т.е. например 0x1xxxxxxx кешируемая область а 0x9xxxxxxx некешируемая, и при этом
физический адрес один и тотже.
cipher
Вроде всё заработало.
Нигде не нашёл подробного описания команды CACHE. Для DCACHE есть варианты: invalidate, clear, flash и различные их комбинации. Какая между ними разница?
Есть некэшируемая область памяти с A0000000 512 МБ. В этой области тоже всё работает. Не знаю пока как оценить эффект от использования кэша. Может он и не нужен мне совсем.
singlskv
Цитата(cipher @ Sep 27 2007, 16:28) *
Вроде всё заработало.
Нигде не нашёл подробного описания команды CACHE. Для DCACHE есть варианты: invalidate, clear, flash и различные их комбинации. Какая между ними разница?
А Вы смотрели AVR32 AP Technical Reference Manual это doc32001.pdf ?
Там вроде все более менее разжеванно.
Цитата
Есть некэшируемая область памяти с A0000000 512 МБ. В этой области тоже всё работает. Не знаю пока как оценить эффект от использования кэша. Может он и не нужен мне совсем.
Не знаю Ваших задачек, но думаю что кеш все-таки нужен.
Если конечно весь код в SRAM, то конечно может и не нужен,
но у Вас же наверняка все в SDRAM крутится.
cipher
Цитата(singlskv @ Sep 27 2007, 17:15) *
А Вы смотрели AVR32 AP Technical Reference Manual это doc32001.pdf ?
Там вроде все более менее разжеванно.

Спасибо, там дам действительно много информации.
DIM
Цитата(cipher @ Oct 1 2007, 23:50) *
Спасибо, там дам действительно много информации.


А кодом можете помочь?. В приципе интересует работа с USBA без Линукса.
Заранее спасибо.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.