Jump to content

    
Sign in to follow this  
Mavric84

Прерывание от PCI

Recommended Posts

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

 

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

Пример...

 

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

 

Кто что может сказать??

Share this post


Link to post
Share on other sites

Прерывание драйвер Вашего устройства должен сбрасывать в обработчике прерывания. как сбрасывать - см. доку на контроллер пси Вашего устройства.

Share this post


Link to post
Share on other sites
Прерывание драйвер Вашего устройства должен сбрасывать в обработчике прерывания. как сбрасывать - см. доку на контроллер пси Вашего устройства.

 

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

Edited by Mavric84

Share this post


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

Устройство пси ставит INTA низкий уровень, который так и стоит низкий до сброса обработчиком в драйвере этого устройства. Если прерывание формируется правильно (что сомнительно), то копайте в своем драйвере.

Причем тут мышка - сложно сказать.

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
Устройство пси ставит INTA низкий уровень, который так и стоит низкий до сброса обработчиком в драйвере этого устройства. Если прерывание формируется правильно (что сомнительно), то копайте в своем драйвере.

Причем тут мышка - сложно сказать.

 

 

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

 

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

 

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

 

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

 

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

 

1-е прерывание проходит,(пошевелил мышкой) 2-е проходит, 3-е проходит, пошевелил мышкой, 4-е проходит

Share this post


Link to post
Share on other sites

Вы пользуетесь готовым контроллером PCI в Xilinx или сами писали?

Вопрос - где косяк? В железе или в драйвере?

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

 

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

Edited by I.S.A.

Share this post


Link to post
Share on other sites
Вы пользуетесь готовым контроллером PCI в Xilinx или сами писали?

Вопрос - где косяк? В железе или в драйвере?

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

 

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

 

 

Писали сами,

 

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

 

для отладки добавлены две строки, первая после обработчика( что бы видеть что увидели прерывание), а вторая после строчек чтения регистра(определения свое или не свое прерывание)

Share this post


Link to post
Share on other sites
Писали сами,

....

 

А как определяется, что свое или нет? На Xilinx идет эксклюзивное прерывание (оно не шарится ни с одним внутренним прерыванием (Может как-раз они с мышью и шарятся))?

Не выходит из обработчика говорите, а как девайс узнает, что его прерывание отработано? Для этого надо прочитать (записать) соответствующий регистр девайса PCI.

Осциллографом смотрели, что на шине творится или нет? А еще лучше логический анализатор цепануть или на Xilinx-e его реализовать, если есть свободные выводы...

Share this post


Link to post
Share on other sites
А как определяется, что свое или нет? На Xilinx идет эксклюзивное прерывание (оно не шарится ни с одним внутренним прерыванием (Может как-раз они с мышью и шарятся))?

Не выходит из обработчика говорите, а как девайс узнает, что его прерывание отработано? Для этого надо прочитать (записать) соответствующий регистр девайса PCI.

Осциллографом смотрели, что на шине творится или нет? А еще лучше логический анализатор цепануть или на Xilinx-e его реализовать, если есть свободные выводы...

 

 

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

 

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

 

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

 

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

Edited by Mavric84

Share this post


Link to post
Share on other sites

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

 

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

Если через некоторое время из канала приедет опять команда... то мой контроллер опять выставит прерывание на линии но обработчик почему то не вызывается такое ощущение что он просто не видит его??? смотрю на контакт INT#A он в 0, ..... система не виснет... стоит пошевелить мышкой как прерывание обрабатывается и сбрасывается и команда проходит.

 

Как узнаю что не входит в обработку прерывания? вывожу на экран строчку типа "прерывание пришло" и вторую строчку вывожу после того как прочитаю регистр подтверждения прерывания "мое прерывание"... прерывание без шевеления мышки или нажатия клавиш на клавиатуре срабатывают ровно через раз.... вот такая ситуация...

Share this post


Link to post
Share on other sites

Дык, уже было сказано что прерывание в данной системе shared судя по всему и с мышкой в том числе, обработчики вызываются по цепочке, где они должны определять свой это intr или нет. глюк у Вас в софте, так как выставленный intr осцилом виден всегда.

Share this post


Link to post
Share on other sites
Дык, уже было сказано что прерывание в данной системе shared судя по всему и с мышкой в том числе, обработчики вызываются по цепочке, где они должны определять свой это intr или нет. глюк у Вас в софте, так как выставленный intr осцилом виден всегда.

 

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

 

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

 

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

Share this post


Link to post
Share on other sites
Хм... не понятно почему он даже к обработчику прерываний не обращается((

 

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

 

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

Вообще-то в обработчике прерываний нужно еще кое-какие манипуляции с хостовым контроллером прерываний делать, в ПС это что-то I8259 подобное. Мышкин обработчик это делает, поэтому хостовый контроллер перевзводится, а Ваш обработчик, судя по Вашим описаниям, этого не делает.

Если Вам нужно, то стукните в личку - пошлю пример для Win98.

Share this post


Link to post
Share on other sites
Вообще-то в обработчике прерываний нужно еще кое-какие манипуляции с хостовым контроллером прерываний делать, в ПС это что-то I8259 подобное. Мышкин обработчик это делает, поэтому хостовый контроллер перевзводится, а Ваш обработчик, судя по Вашим описаниям, этого не делает.

Если Вам нужно, то стукните в личку - пошлю пример для Win98.

Стукнулся...

Самое интересное что плата на PLX кирпиче работает с этим же самым драйвером нормально.

Забыл ОС МСВС 3.0

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this