Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Использование системного DMA контроллера
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы
Yra
Здравствуйте. Такой вопрос. Есть pci плата, работающая как slave. Необходимо под WinXP написать драйвер для неё, использующий dma. Насколько я понял для такой платы нужно использовать системный контроллер dma. Но прочитав описание в DDK, я не нашёл, как dma контроллеру передать адрес платы откуда забирать данные. Или я что-то не понял фундаментально?
vshemm
Инициализация дма осуществляется с помощью функции IoGetDmaAdapter. Там же и указываются параметры физического устройства.
В результате получаете структуру DMA_ADAPTER, в которой, есть структура DMA_OPERATIONS с указателями на функции для работы с дма.
В частности, AllocateCommonBuffer выделяет нужную память (в первом 16Мб, физ. непрерывную и пр.), MapTransfer стартует дма и т.д.

http://msdn.microsoft.com/en-us/library/ms806363.aspx
Yra
В функцию IoGetDmaAdapter передается 3 параметра:
-указатель на DeviceObject там адрес платы не указывается
-Количество Map регистров это тоже не то
-указатель на структуру устройства. По идеи должно быть в ней. Но там ни одного похожего поля.

Так где же всё таки указывается базовый адрес платы, по которому будет начинаться обмен?
vshemm
Стандартному (8237 который) контроллеру нужно задавать только адрес буфера в памяти, а адресация устройства - географическая, т.е. не по адресу порта, а по номеру канала. Устройство должно быть настроено для работы с нужным каналом, естесственно.

Для нестандартных системных контроллеров - нужно смотреть даташит. В таких случаях адреса устройств (или битики для выбора устройств в нужном регистре контроллера) придется записывать руками, после MapTransfer() но перед запуском собственно передачи.
zltigo
Цитата(Yra @ Jun 18 2008, 07:59) *
Насколько я понял для такой платы нужно использовать системный контроллер dma.

Это не контроллер, это отрыжка со старых времен. Считайте, что DMA у Вас нет sad.gif.
XVR
Цитата(Yra @ Jun 18 2008, 09:59) *
Здравствуйте. Такой вопрос. Есть pci плата, работающая как slave. Необходимо под WinXP написать драйвер для неё, использующий dma. Насколько я понял для такой платы нужно использовать системный контроллер dma. Но прочитав описание в DDK, я не нашёл, как dma контроллеру передать адрес платы откуда забирать данные. Или я что-то не понял фундаментально?
Стандартный DMA (8237) не умеет пересылать память->память sad.gif Так что можете расслабится - не получится crying.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.