Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > ISA DMA driver


Автор: nnk 2.3.2012, 11:11
здравствуйте =)

ОС Gentoo (если это имеет значение, ядро 2.6.39) вопрос такой:

пишу модуль ядра для опроса АЦП платы Fastwel AIC121 с передачей данных по каналу DMA.
Сначала выделяю память таким образом:
Код

dma_pages = __get_free_pages(GFP_KERNEL | __GFP_DMA, order); 
phAddr = __pa(dma_pages);


пробовала выделить через dma_alloc_coherent, но функция возвращает нулевые указатели, отсюда первый вопрос, по какой причине такое может происходить?

успешно регистрирую использование канала (request_dma)

далее работаю с DMA контроллером
Код

outb(3 | 4, 0xA); 
outb(3 | 0x18, 0xB); 
page = phAddr >> 16;
offset = (unsigned int)phAddr;
outb(page, 0x82);
outb(0, 0xC); //clear flip flop
outb((byte)offset, 0x06);
outb((byte)(offset >> 8), 0x06);
outb(lbDataCount, 0x07);
outb(hbDataCount, 0x07);
outb(3, 0xA);


после этого разрешаю DMA на самой плате, и по идее все должно работать, но на деле ничего не происходит, текущий адрес не меняется, буфер пустой, регистр состояния контроллера DMA возвращает нули, по документации вроде бы все правильно, что я упускаю из вида?

Автор: nnk 2.3.2012, 13:52
вопрос решен, тему можно удалить, как всегда все дело в невнимательности,
хотя если кто-нибудь подскажет почему не хочет работать функция dma_alloc_coherent, буду рада

Автор: xvr 2.3.2012, 17:22
Цитата(nnk @  2.3.2012,  13:52 Найти цитируемый пост)
хотя если кто-нибудь подскажет почему не хочет работать функция dma_alloc_coherent, буду рада

Может слишком много попросили? Я ядро ничего в ядерный лог не написало?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)