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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Прерывание от PCI, раз через раз
Mavric84
сообщение Aug 29 2007, 12:25
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 51
Регистрация: 15-10-05
Пользователь №: 9 699



Собстна трабл,

Плата PCI_33_32 на спартане2, при подаче команды через внешнюю шину, на девайс , PCI девайс выставляет прерывание, собстна все так и происходит но до перврого раза....
Пример...

С внешней шины пришла команда-> PCI выставил прерывание-> прерывание отработало, (не трогая мышку и клаву) пытаемся еще раз передать команду на устройство, но теперь все затыкается.... причем не виснет(прерывание на PCI разъеме стоит) такое ощущение что обработчик прерываний его просто напросто не видит.... и стоит дотронуться до мышки и о ЧУДО прерывание срабатывает(увидело, распознало что свое и сбросило))

Кто что может сказать??
Go to the top of the page
 
+Quote Post
line
сообщение Aug 29 2007, 13:21
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 85
Регистрация: 27-06-05
Пользователь №: 6 331



Прерывание драйвер Вашего устройства должен сбрасывать в обработчике прерывания. как сбрасывать - см. доку на контроллер пси Вашего устройства.
Go to the top of the page
 
+Quote Post
Mavric84
сообщение Aug 29 2007, 13:39
Сообщение #3


Участник
*

Группа: Новичок
Сообщений: 51
Регистрация: 15-10-05
Пользователь №: 9 699



Цитата(line @ Aug 29 2007, 16:21) *
Прерывание драйвер Вашего устройства должен сбрасывать в обработчике прерывания. как сбрасывать - см. доку на контроллер пси Вашего устройства.


Контроллер своей разработки...(написал же вроде SPARTAN_2) драйвер просто не видит что выставленно прерывание...(сброс прерывания срабатывает.. исходя из того что первое прерывание отрабатывает..) стоит пошевелить мышкой и оно срабатывает...(причем тут мыша ума не приложу((м )

Сообщение отредактировал Mavric84 - Aug 29 2007, 13:41
Go to the top of the page
 
+Quote Post
line
сообщение Aug 29 2007, 13:58
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 85
Регистрация: 27-06-05
Пользователь №: 6 331



Цитата(Mavric84 @ Aug 29 2007, 17:39) *
Контроллер своей разработки...(написал же вроде SPARTAN_2) драйвер просто не видит что выставленно прерывание...(сброс прерывания срабатывает.. исходя из того что первое прерывание отрабатывает..) стоит пошевелить мышкой и оно срабатывает...(причем тут мыша ума не приложу((м )

Устройство пси ставит INTA низкий уровень, который так и стоит низкий до сброса обработчиком в драйвере этого устройства. Если прерывание формируется правильно (что сомнительно), то копайте в своем драйвере.
Причем тут мышка - сложно сказать.
Go to the top of the page
 
+Quote Post
I.S.A.
сообщение Aug 29 2007, 14:03
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 95
Регистрация: 6-08-07
Из: Москва
Пользователь №: 29 583



А что делает драйвер по приходу прерывания? Xilinx подключен шиной к х86 процессору? Читаете ли Вы какой либо регистр или область памяти в Xilinx по приходу прерывания или нет?


--------------------
Зачем все делать просто, когда все можно усложнить?
Go to the top of the page
 
+Quote Post
Mavric84
сообщение Aug 29 2007, 14:58
Сообщение #6


Участник
*

Группа: Новичок
Сообщений: 51
Регистрация: 15-10-05
Пользователь №: 9 699



Цитата(line @ Aug 29 2007, 16:58) *
Устройство пси ставит INTA низкий уровень, который так и стоит низкий до сброса обработчиком в драйвере этого устройства. Если прерывание формируется правильно (что сомнительно), то копайте в своем драйвере.
Причем тут мышка - сложно сказать.



Да устройство первый раз поставило прерывание, драйвер увидел, прочитал доп. регистр, понял что свое прерыванием сбросил его. ВСЕ. но если опять повторить такое то прерывание выставиться и будет стоять до тех пор пока я не пошевелю мышкой(((.... при следующем разе опять все норм пройдет(без шевеления мышки)... след. раз опять будет висеть до мышиного шевеления(или нажатия на клаву)

Цитата(I.S.A. @ Aug 29 2007, 17:03) *
А что делает драйвер по приходу прерывания? Xilinx подключен шиной к х86 процессору? Читаете ли Вы какой либо регистр или область памяти в Xilinx по приходу прерывания или нет?


(К сожалению не я пишу программу) вызывается обработчик прерывания... читатет регистр, понимает что его прерывание, сбрасывает его... на след раз что бы прокатило... нужно пошевелить мышкой... а еще через раз опять все норм...

Xilinx является мостом шина ввода\вывода to PCI )

Получается так. 1 прерывание проходит, 2 не проходит, 3 проходит 4 не проходит и.т.п. но если сделать вот так

1-е прерывание проходит,(пошевелил мышкой) 2-е проходит, 3-е проходит, пошевелил мышкой, 4-е проходит
Go to the top of the page
 
+Quote Post
I.S.A.
сообщение Aug 29 2007, 15:05
Сообщение #7


Частый гость
**

Группа: Участник
Сообщений: 95
Регистрация: 6-08-07
Из: Москва
Пользователь №: 29 583



Вы пользуетесь готовым контроллером PCI в Xilinx или сами писали?
Вопрос - где косяк? В железе или в драйвере?
Насколько я знаю, необходимо сделать чтения из Xilinx-а, что бы сбросить прерывание (Оно проходит?). Лучший способ - тест, типа чтения регистра по прерыванию. Осциллограф на шину, и каждые 2 сек генерить прерывание, а драйвер сбрасывает его. Тогда все видно будет (Мы лично так отлаживались).

А мышь - всего лишь событие (мне так кажется), которое заставляет софт шевелиться... Кто знает, что там в это время творится...

Сообщение отредактировал I.S.A. - Aug 29 2007, 15:08


--------------------
Зачем все делать просто, когда все можно усложнить?
Go to the top of the page
 
+Quote Post
Mavric84
сообщение Aug 29 2007, 15:23
Сообщение #8


Участник
*

Группа: Новичок
Сообщений: 51
Регистрация: 15-10-05
Пользователь №: 9 699



Цитата(I.S.A. @ Aug 29 2007, 18:05) *
Вы пользуетесь готовым контроллером PCI в Xilinx или сами писали?
Вопрос - где косяк? В железе или в драйвере?
Насколько я знаю, необходимо сделать чтения из Xilinx-а, что бы сбросить прерывание (Оно проходит?). Лучший способ - тест, типа чтения регистра по прерыванию. Осциллограф на шину, и каждые 2 сек генерить прерывание, а драйвер сбрасывает его. Тогда все видно будет (Мы лично так отлаживались).

А мышь - всего лишь событие (мне так кажется), которое заставляет софт шевелиться... Кто знает, что там в это время творится...



Писали сами,

Простите но немного не понимаю про чтение из XILINX??? для чего чтение??? на втором разе даже в обработчик прерывания не попадает(в то время как прерывание выставлено)

для отладки добавлены две строки, первая после обработчика( что бы видеть что увидели прерывание), а вторая после строчек чтения регистра(определения свое или не свое прерывание)
Go to the top of the page
 
+Quote Post
I.S.A.
сообщение Aug 29 2007, 15:38
Сообщение #9


Частый гость
**

Группа: Участник
Сообщений: 95
Регистрация: 6-08-07
Из: Москва
Пользователь №: 29 583



Цитата(Mavric84 @ Aug 29 2007, 19:23) *
Писали сами,
....


А как определяется, что свое или нет? На Xilinx идет эксклюзивное прерывание (оно не шарится ни с одним внутренним прерыванием (Может как-раз они с мышью и шарятся))?
Не выходит из обработчика говорите, а как девайс узнает, что его прерывание отработано? Для этого надо прочитать (записать) соответствующий регистр девайса PCI.
Осциллографом смотрели, что на шине творится или нет? А еще лучше логический анализатор цепануть или на Xilinx-e его реализовать, если есть свободные выводы...


--------------------
Зачем все делать просто, когда все можно усложнить?
Go to the top of the page
 
+Quote Post
Mavric84
сообщение Aug 29 2007, 15:44
Сообщение #10


Участник
*

Группа: Новичок
Сообщений: 51
Регистрация: 15-10-05
Пользователь №: 9 699



Цитата(I.S.A. @ Aug 29 2007, 18:38) *
А как определяется, что свое или нет? На Xilinx идет эксклюзивное прерывание (оно не шарится ни с одним внутренним прерыванием (Может как-раз они с мышью и шарятся))?
Не выходит из обработчика говорите, а как девайс узнает, что его прерывание отработано? Для этого надо прочитать (записать) соответствующий регистр девайса PCI.
Осциллографом смотрели, что на шине творится или нет? А еще лучше логический анализатор цепануть или на Xilinx-e его реализовать, если есть свободные выводы...



Свое не свое определяется путем чтения регистра в пространстве и.о.

А можно поподробнее про это ЭКСЛЮЗИВНОЕ ПРЕРЫВАНИЕ(первый раз слышу)...(((

Не, не выходит...., а НЕ ВХОДИТ в обработчик!!!

прерывание установленно и в регистре 6 записанно 0х01 когда обработчик прочитал этот регистр он увидел что записано 0х01(это означает что прерывание выставленно именно этим устройством) и сбрасывает прерывание и очищает этот регистр.

Сообщение отредактировал Mavric84 - Aug 29 2007, 15:47
Go to the top of the page
 
+Quote Post
Mavric84
сообщение Aug 29 2007, 19:04
Сообщение #11


Участник
*

Группа: Новичок
Сообщений: 51
Регистрация: 15-10-05
Пользователь №: 9 699



Исходя из большого количества вопросов, попробую описать ситуацию более подробнее(прошу прощения заболел, в связи с этим могу подтормаживать, сильно не пинать)

Имеется плата PCI, построен на ПЛИСе SPARTANe II (своей разработки), на нем сделан PCI контроллер, сей девайс подключается к внешнему интерфесу ВВОДА-ВЫВОДА. Чтение, запись в канал ввода-вывода осуществляется через пространство I/O. Чтение, запись работают норм. При приходе из канала ввода-вывода некой команды, выставляется прерывание, INT#A опускается в 0, вызывается обработчик прерываний который, читает определенный регистр в котором отражено что прерывание выставило именно это устройство, прерывание сбрасывается и выполняется некая команда.
Если через некоторое время из канала приедет опять команда... то мой контроллер опять выставит прерывание на линии но обработчик почему то не вызывается такое ощущение что он просто не видит его??? смотрю на контакт INT#A он в 0, ..... система не виснет... стоит пошевелить мышкой как прерывание обрабатывается и сбрасывается и команда проходит.

Как узнаю что не входит в обработку прерывания? вывожу на экран строчку типа "прерывание пришло" и вторую строчку вывожу после того как прочитаю регистр подтверждения прерывания "мое прерывание"... прерывание без шевеления мышки или нажатия клавиш на клавиатуре срабатывают ровно через раз.... вот такая ситуация...
Go to the top of the page
 
+Quote Post
Harbour
сообщение Aug 30 2007, 07:01
Сообщение #12


Местами Гуру
*****

Группа: Validating
Сообщений: 1 103
Регистрация: 5-12-04
Пользователь №: 1 323



Дык, уже было сказано что прерывание в данной системе shared судя по всему и с мышкой в том числе, обработчики вызываются по цепочке, где они должны определять свой это intr или нет. глюк у Вас в софте, так как выставленный intr осцилом виден всегда.
Go to the top of the page
 
+Quote Post
Mavric84
сообщение Aug 30 2007, 11:07
Сообщение #13


Участник
*

Группа: Новичок
Сообщений: 51
Регистрация: 15-10-05
Пользователь №: 9 699



Цитата(Harbour @ Aug 30 2007, 11:01) *
Дык, уже было сказано что прерывание в данной системе shared судя по всему и с мышкой в том числе, обработчики вызываются по цепочке, где они должны определять свой это intr или нет. глюк у Вас в софте, так как выставленный intr осцилом виден всегда.


Хм... не понятно почему он даже к обработчику прерываний не обращается((

Будем думать...

Спасибо за советы.
Go to the top of the page
 
+Quote Post
729
сообщение Aug 30 2007, 15:21
Сообщение #14


Местный
***

Группа: Участник
Сообщений: 312
Регистрация: 21-10-05
Пользователь №: 9 952



Цитата(Mavric84 @ Aug 30 2007, 15:07) *
Хм... не понятно почему он даже к обработчику прерываний не обращается((

Будем думать...

Спасибо за советы.

Вообще-то в обработчике прерываний нужно еще кое-какие манипуляции с хостовым контроллером прерываний делать, в ПС это что-то I8259 подобное. Мышкин обработчик это делает, поэтому хостовый контроллер перевзводится, а Ваш обработчик, судя по Вашим описаниям, этого не делает.
Если Вам нужно, то стукните в личку - пошлю пример для Win98.
Go to the top of the page
 
+Quote Post
Mavric84
сообщение Aug 31 2007, 08:34
Сообщение #15


Участник
*

Группа: Новичок
Сообщений: 51
Регистрация: 15-10-05
Пользователь №: 9 699



Цитата(729 @ Aug 30 2007, 18:21) *
Вообще-то в обработчике прерываний нужно еще кое-какие манипуляции с хостовым контроллером прерываний делать, в ПС это что-то I8259 подобное. Мышкин обработчик это делает, поэтому хостовый контроллер перевзводится, а Ваш обработчик, судя по Вашим описаниям, этого не делает.
Если Вам нужно, то стукните в личку - пошлю пример для Win98.

Стукнулся...
Самое интересное что плата на PLX кирпиче работает с этим же самым драйвером нормально.
Забыл ОС МСВС 3.0
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 14th August 2025 - 10:53
Рейтинг@Mail.ru


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