реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Прога для PCI устройства, ОГРОМНОЕ время между таргет режимами
nikenbiraki
сообщение Oct 20 2009, 10:08
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 19
Регистрация: 6-10-09
Пользователь №: 52 777



Всем доброго времени суток.

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

В проге для подсчета времени реализован цикл из 1 000 000 записей/чтение 1-ного 32-х разрядного слова в режиме таргет.
Я вывел нужные мне сигналы на осцилограф и вижу, что каждая транзакция проходит 1 раз в 20 мкс это очень большое время.
В некоторых случая 2 транзакции идут друг за другом с разницей 600нс (так и должно быть на протяжении всей передачи)
потом опять 20 мкс и так далее.
Вопрос: почему такое большое время между таргет режимами?
Go to the top of the page
 
+Quote Post
cioma
сообщение Oct 20 2009, 13:57
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 226
Регистрация: 19-06-04
Из: Беларусь
Пользователь №: 65



Под какой осью?
Go to the top of the page
 
+Quote Post
nikenbiraki
сообщение Oct 21 2009, 11:27
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 19
Регистрация: 6-10-09
Пользователь №: 52 777



под виндой
Go to the top of the page
 
+Quote Post
plis
сообщение Nov 3 2009, 17:42
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 66
Регистрация: 29-09-06
Пользователь №: 20 821



Цитата(nikenbiraki @ Oct 20 2009, 13:08) *
- есть драйвер для этого устройства

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

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

Сообщение отредактировал plis - Nov 3 2009, 17:44
Go to the top of the page
 
+Quote Post
Джеймс
сообщение Nov 3 2009, 18:21
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 462
Регистрация: 20-01-06
Пользователь №: 13 399



Да, 200 КБ/сек это слишком медленно...

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

http://www.jungo.com/st/windriver_windows.html
Go to the top of the page
 
+Quote Post
nikenbiraki
сообщение Nov 5 2009, 15:08
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 19
Регистрация: 6-10-09
Пользователь №: 52 777



Цитата(plis @ Nov 3 2009, 21:42) *
А драйвер сами писали ?

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


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

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


я нашел в чем была у меня проблема:
прога каждую итерацию запрашивала драйвер, драйвер железку, потом железка отвечала, драйвер отвечал проге, прога заводила новый цикл. Поэтому было очень долго.
Сделали так прога передает драйверу сколько нужно передать байт, драйвер отрабатывает, отвечает проге, т.е. цикл организован в драйвере. Все стало на свои места.
Теперь есть другие заморочки, но с ними буду бороться в одиночку smile.gif
Всем большое спасибо.
Go to the top of the page
 
+Quote Post
plis
сообщение Nov 8 2009, 14:23
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 66
Регистрация: 29-09-06
Пользователь №: 20 821



А ваш программист может поделиться примером кода?
Go to the top of the page
 
+Quote Post
nikenbiraki
сообщение Nov 9 2009, 06:51
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 19
Регистрация: 6-10-09
Пользователь №: 52 777



Может 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);
}
Go to the top of the page
 
+Quote Post
SM
сообщение Nov 9 2009, 14:39
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(nikenbiraki @ Nov 5 2009, 18:08) *
есть функция HalGetBusData подробнее в документации на DDK
есть еще HalGetBusDataByOffset она похожа, но там можно по смещению прочитать


Я бы сказал, что такие функции не есть, а были. А есть - IRP_MN_QUERY_INTERFACE and IRP_MN_READ_CONFIG (и обратный этому IRM_MN_WRITE_CONFIG)
Go to the top of the page
 
+Quote Post
plis
сообщение Nov 9 2009, 18:26
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 66
Регистрация: 29-09-06
Пользователь №: 20 821



что есть и что было мне известно

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

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

мне надо сделать это один раз и нету времени сильно разбираться в деталях написания драйверов сейчас, но в дальнейшем пригодится. надо сначало показать что это работает
Go to the top of the page
 
+Quote Post
SM
сообщение Nov 10 2009, 17:16
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



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

А чего там вкуривать-то? Его передают вторым параметром в AddDevice. По идее можно и FDО, если он, FDO (т.е. ваш собственный device) корректно отправляет этот IRP дальше. Ну там IoSkipCurrentIrpStackLocation, и далее IoCallDriver в TopOfStack. Тогда Ваш IRP попадет туда же.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 16:43
Рейтинг@Mail.ru


Страница сгенерированна за 0.0141 секунд с 7
ELECTRONIX ©2004-2016