Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Прога для PCI устройства
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы > Программирование
nikenbiraki
Всем доброго времени суток.

- есть PCI устройство реализованное на ПЛИС.
- есть драйвер для этого устройства
- есть прога
Все дели сами

В проге для подсчета времени реализован цикл из 1 000 000 записей/чтение 1-ного 32-х разрядного слова в режиме таргет.
Я вывел нужные мне сигналы на осцилограф и вижу, что каждая транзакция проходит 1 раз в 20 мкс это очень большое время.
В некоторых случая 2 транзакции идут друг за другом с разницей 600нс (так и должно быть на протяжении всей передачи)
потом опять 20 мкс и так далее.
Вопрос: почему такое большое время между таргет режимами?
cioma
Под какой осью?
nikenbiraki
под виндой
plis
Цитата(nikenbiraki @ Oct 20 2009, 13:08) *
- есть драйвер для этого устройства

А драйвер сами писали ?

Поделитесь опытом, как из драйвера считать конфигурационное пространство, а точнее определить порт ввода/вывода, назначенный устройству PCI.
Джеймс
Да, 200 КБ/сек это слишком медленно...

Попробуйте скачать WinDriver и поработать с ним.

http://www.jungo.com/st/windriver_windows.html
nikenbiraki
Цитата(plis @ Nov 3 2009, 21:42) *
А драйвер сами писали ?

Поделитесь опытом, как из драйвера считать конфигурационное пространство, а точнее определить порт ввода/вывода, назначенный устройству PCI.


есть функция HalGetBusData подробнее в документации на DDK
есть еще HalGetBusDataByOffset она похожа, но там можно по смещению прочитать

так ответил программист который писал дрова smile.gif


я нашел в чем была у меня проблема:
прога каждую итерацию запрашивала драйвер, драйвер железку, потом железка отвечала, драйвер отвечал проге, прога заводила новый цикл. Поэтому было очень долго.
Сделали так прога передает драйверу сколько нужно передать байт, драйвер отрабатывает, отвечает проге, т.е. цикл организован в драйвере. Все стало на свои места.
Теперь есть другие заморочки, но с ними буду бороться в одиночку smile.gif
Всем большое спасибо.
plis
А ваш программист может поделиться примером кода?
nikenbiraki
Может smile.gif

// читает из конфигурационного пространства PCI массив байт
// bus,devfunc - идентификация устройства
// offset - смещение в пространстве PCI
// size - размер в элементах массива buffer
// buffer - выходной буфер
int pci_read(unsigned int bus,unsigned int devfunc,unsigned short offset,int size,unsigned char* buffer)
{
return HalGetBusDataByOffset(PCIConfiguration,bus,devfunc,buffer,offset,size);
}
SM
Цитата(nikenbiraki @ Nov 5 2009, 18:08) *
есть функция HalGetBusData подробнее в документации на DDK
есть еще HalGetBusDataByOffset она похожа, но там можно по смещению прочитать


Я бы сказал, что такие функции не есть, а были. А есть - IRP_MN_QUERY_INTERFACE and IRP_MN_READ_CONFIG (и обратный этому IRM_MN_WRITE_CONFIG)
plis
что есть и что было мне известно

вот я только не знаю где например взять bus и devfunc

а IRP запросаму не могу вкурить откуда взять PDO, FDO почемуто не подходит.

мне надо сделать это один раз и нету времени сильно разбираться в деталях написания драйверов сейчас, но в дальнейшем пригодится. надо сначало показать что это работает
SM
Цитата(plis @ Nov 9 2009, 21:26) *
а IRP запросаму не могу вкурить откуда взять PDO, FDO почемуто не подходит.

А чего там вкуривать-то? Его передают вторым параметром в AddDevice. По идее можно и FDО, если он, FDO (т.е. ваш собственный device) корректно отправляет этот IRP дальше. Ну там IoSkipCurrentIrpStackLocation, и далее IoCallDriver в TopOfStack. Тогда Ваш IRP попадет туда же.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.