Mavric84 0 Posted August 29, 2007 · Report post Собстна трабл, Плата PCI_33_32 на спартане2, при подаче команды через внешнюю шину, на девайс , PCI девайс выставляет прерывание, собстна все так и происходит но до перврого раза.... Пример... С внешней шины пришла команда-> PCI выставил прерывание-> прерывание отработало, (не трогая мышку и клаву) пытаемся еще раз передать команду на устройство, но теперь все затыкается.... причем не виснет(прерывание на PCI разъеме стоит) такое ощущение что обработчик прерываний его просто напросто не видит.... и стоит дотронуться до мышки и о ЧУДО прерывание срабатывает(увидело, распознало что свое и сбросило)) Кто что может сказать?? Quote Ответить с цитированием Share this post Link to post Share on other sites
line 0 Posted August 29, 2007 · Report post Прерывание драйвер Вашего устройства должен сбрасывать в обработчике прерывания. как сбрасывать - см. доку на контроллер пси Вашего устройства. Quote Ответить с цитированием Share this post Link to post Share on other sites
Mavric84 0 Posted August 29, 2007 (edited) · Report post Прерывание драйвер Вашего устройства должен сбрасывать в обработчике прерывания. как сбрасывать - см. доку на контроллер пси Вашего устройства. Контроллер своей разработки...(написал же вроде SPARTAN_2) драйвер просто не видит что выставленно прерывание...(сброс прерывания срабатывает.. исходя из того что первое прерывание отрабатывает..) стоит пошевелить мышкой и оно срабатывает...(причем тут мыша ума не приложу((м ) Edited August 29, 2007 by Mavric84 Quote Ответить с цитированием Share this post Link to post Share on other sites
line 0 Posted August 29, 2007 · Report post Контроллер своей разработки...(написал же вроде SPARTAN_2) драйвер просто не видит что выставленно прерывание...(сброс прерывания срабатывает.. исходя из того что первое прерывание отрабатывает..) стоит пошевелить мышкой и оно срабатывает...(причем тут мыша ума не приложу((м ) Устройство пси ставит INTA низкий уровень, который так и стоит низкий до сброса обработчиком в драйвере этого устройства. Если прерывание формируется правильно (что сомнительно), то копайте в своем драйвере. Причем тут мышка - сложно сказать. Quote Ответить с цитированием Share this post Link to post Share on other sites
I.S.A. 0 Posted August 29, 2007 · Report post А что делает драйвер по приходу прерывания? Xilinx подключен шиной к х86 процессору? Читаете ли Вы какой либо регистр или область памяти в Xilinx по приходу прерывания или нет? Quote Ответить с цитированием Share this post Link to post Share on other sites
Mavric84 0 Posted August 29, 2007 · Report post Устройство пси ставит INTA низкий уровень, который так и стоит низкий до сброса обработчиком в драйвере этого устройства. Если прерывание формируется правильно (что сомнительно), то копайте в своем драйвере. Причем тут мышка - сложно сказать. Да устройство первый раз поставило прерывание, драйвер увидел, прочитал доп. регистр, понял что свое прерыванием сбросил его. ВСЕ. но если опять повторить такое то прерывание выставиться и будет стоять до тех пор пока я не пошевелю мышкой(((.... при следующем разе опять все норм пройдет(без шевеления мышки)... след. раз опять будет висеть до мышиного шевеления(или нажатия на клаву) А что делает драйвер по приходу прерывания? Xilinx подключен шиной к х86 процессору? Читаете ли Вы какой либо регистр или область памяти в Xilinx по приходу прерывания или нет? (К сожалению не я пишу программу) вызывается обработчик прерывания... читатет регистр, понимает что его прерывание, сбрасывает его... на след раз что бы прокатило... нужно пошевелить мышкой... а еще через раз опять все норм... Xilinx является мостом шина ввода\вывода to PCI ) Получается так. 1 прерывание проходит, 2 не проходит, 3 проходит 4 не проходит и.т.п. но если сделать вот так 1-е прерывание проходит,(пошевелил мышкой) 2-е проходит, 3-е проходит, пошевелил мышкой, 4-е проходит Quote Ответить с цитированием Share this post Link to post Share on other sites
I.S.A. 0 Posted August 29, 2007 (edited) · Report post Вы пользуетесь готовым контроллером PCI в Xilinx или сами писали? Вопрос - где косяк? В железе или в драйвере? Насколько я знаю, необходимо сделать чтения из Xilinx-а, что бы сбросить прерывание (Оно проходит?). Лучший способ - тест, типа чтения регистра по прерыванию. Осциллограф на шину, и каждые 2 сек генерить прерывание, а драйвер сбрасывает его. Тогда все видно будет (Мы лично так отлаживались). А мышь - всего лишь событие (мне так кажется), которое заставляет софт шевелиться... Кто знает, что там в это время творится... Edited August 29, 2007 by I.S.A. Quote Ответить с цитированием Share this post Link to post Share on other sites
Mavric84 0 Posted August 29, 2007 · Report post Вы пользуетесь готовым контроллером PCI в Xilinx или сами писали? Вопрос - где косяк? В железе или в драйвере? Насколько я знаю, необходимо сделать чтения из Xilinx-а, что бы сбросить прерывание (Оно проходит?). Лучший способ - тест, типа чтения регистра по прерыванию. Осциллограф на шину, и каждые 2 сек генерить прерывание, а драйвер сбрасывает его. Тогда все видно будет (Мы лично так отлаживались). А мышь - всего лишь событие (мне так кажется), которое заставляет софт шевелиться... Кто знает, что там в это время творится... Писали сами, Простите но немного не понимаю про чтение из XILINX??? для чего чтение??? на втором разе даже в обработчик прерывания не попадает(в то время как прерывание выставлено) для отладки добавлены две строки, первая после обработчика( что бы видеть что увидели прерывание), а вторая после строчек чтения регистра(определения свое или не свое прерывание) Quote Ответить с цитированием Share this post Link to post Share on other sites
I.S.A. 0 Posted August 29, 2007 · Report post Писали сами, .... А как определяется, что свое или нет? На Xilinx идет эксклюзивное прерывание (оно не шарится ни с одним внутренним прерыванием (Может как-раз они с мышью и шарятся))? Не выходит из обработчика говорите, а как девайс узнает, что его прерывание отработано? Для этого надо прочитать (записать) соответствующий регистр девайса PCI. Осциллографом смотрели, что на шине творится или нет? А еще лучше логический анализатор цепануть или на Xilinx-e его реализовать, если есть свободные выводы... Quote Ответить с цитированием Share this post Link to post Share on other sites
Mavric84 0 Posted August 29, 2007 (edited) · Report post А как определяется, что свое или нет? На Xilinx идет эксклюзивное прерывание (оно не шарится ни с одним внутренним прерыванием (Может как-раз они с мышью и шарятся))? Не выходит из обработчика говорите, а как девайс узнает, что его прерывание отработано? Для этого надо прочитать (записать) соответствующий регистр девайса PCI. Осциллографом смотрели, что на шине творится или нет? А еще лучше логический анализатор цепануть или на Xilinx-e его реализовать, если есть свободные выводы... Свое не свое определяется путем чтения регистра в пространстве и.о. А можно поподробнее про это ЭКСЛЮЗИВНОЕ ПРЕРЫВАНИЕ(первый раз слышу)...((( Не, не выходит...., а НЕ ВХОДИТ в обработчик!!! прерывание установленно и в регистре 6 записанно 0х01 когда обработчик прочитал этот регистр он увидел что записано 0х01(это означает что прерывание выставленно именно этим устройством) и сбрасывает прерывание и очищает этот регистр. Edited August 29, 2007 by Mavric84 Quote Ответить с цитированием Share this post Link to post Share on other sites
Mavric84 0 Posted August 29, 2007 · Report post Исходя из большого количества вопросов, попробую описать ситуацию более подробнее(прошу прощения заболел, в связи с этим могу подтормаживать, сильно не пинать) Имеется плата PCI, построен на ПЛИСе SPARTANe II (своей разработки), на нем сделан PCI контроллер, сей девайс подключается к внешнему интерфесу ВВОДА-ВЫВОДА. Чтение, запись в канал ввода-вывода осуществляется через пространство I/O. Чтение, запись работают норм. При приходе из канала ввода-вывода некой команды, выставляется прерывание, INT#A опускается в 0, вызывается обработчик прерываний который, читает определенный регистр в котором отражено что прерывание выставило именно это устройство, прерывание сбрасывается и выполняется некая команда. Если через некоторое время из канала приедет опять команда... то мой контроллер опять выставит прерывание на линии но обработчик почему то не вызывается такое ощущение что он просто не видит его??? смотрю на контакт INT#A он в 0, ..... система не виснет... стоит пошевелить мышкой как прерывание обрабатывается и сбрасывается и команда проходит. Как узнаю что не входит в обработку прерывания? вывожу на экран строчку типа "прерывание пришло" и вторую строчку вывожу после того как прочитаю регистр подтверждения прерывания "мое прерывание"... прерывание без шевеления мышки или нажатия клавиш на клавиатуре срабатывают ровно через раз.... вот такая ситуация... Quote Ответить с цитированием Share this post Link to post Share on other sites
Harbour 0 Posted August 30, 2007 · Report post Дык, уже было сказано что прерывание в данной системе shared судя по всему и с мышкой в том числе, обработчики вызываются по цепочке, где они должны определять свой это intr или нет. глюк у Вас в софте, так как выставленный intr осцилом виден всегда. Quote Ответить с цитированием Share this post Link to post Share on other sites
Mavric84 0 Posted August 30, 2007 · Report post Дык, уже было сказано что прерывание в данной системе shared судя по всему и с мышкой в том числе, обработчики вызываются по цепочке, где они должны определять свой это intr или нет. глюк у Вас в софте, так как выставленный intr осцилом виден всегда. Хм... не понятно почему он даже к обработчику прерываний не обращается(( Будем думать... Спасибо за советы. Quote Ответить с цитированием Share this post Link to post Share on other sites
729 0 Posted August 30, 2007 · Report post Хм... не понятно почему он даже к обработчику прерываний не обращается(( Будем думать... Спасибо за советы. Вообще-то в обработчике прерываний нужно еще кое-какие манипуляции с хостовым контроллером прерываний делать, в ПС это что-то I8259 подобное. Мышкин обработчик это делает, поэтому хостовый контроллер перевзводится, а Ваш обработчик, судя по Вашим описаниям, этого не делает. Если Вам нужно, то стукните в личку - пошлю пример для Win98. Quote Ответить с цитированием Share this post Link to post Share on other sites
Mavric84 0 Posted August 31, 2007 · Report post Вообще-то в обработчике прерываний нужно еще кое-какие манипуляции с хостовым контроллером прерываний делать, в ПС это что-то I8259 подобное. Мышкин обработчик это делает, поэтому хостовый контроллер перевзводится, а Ваш обработчик, судя по Вашим описаниям, этого не делает. Если Вам нужно, то стукните в личку - пошлю пример для Win98. Стукнулся... Самое интересное что плата на PLX кирпиче работает с этим же самым драйвером нормально. Забыл ОС МСВС 3.0 Quote Ответить с цитированием Share this post Link to post Share on other sites