LINUX.ORG.RU

DMA ISA


0

1

здравствуйте =)

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

можно ли работать с контроллером DMA из ядра напрямую (через IO порты), вопрос возник потому что нужно читать данные из АЦП (Fastwel AIC121), в распоряжении имеется пример для доса, в реализации для linux у меня получилось так:

выделяю память (я знаю, что есть специальные функции, но что-то с ними у меня не сложилось, указатели всегда нулевые получаются, поэтому пока так)

dma_pages = __get_free_pages(GFP_KERNEL | __GFP_DMA, order); 
phAddr = __pa(dma_pages);
ну и далее инициализация 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 возвращает нули =( что не так?



Последнее исправление: nk (всего исправлений: 1)

что не так?

на деле ничего не происходит, текущий адрес не меняется, буфер пустой, регистр состояния контроллера DMA возвращает нули

так не должно быть. тут что-то не так

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.