Перейти к содержанию
    

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

 

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

Пример...

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

Изменено пользователем Mavric84

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

 

 

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

 

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

 

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

 

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

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

 

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

Изменено пользователем I.S.A.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

 

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

 

 

Писали сами,

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Писали сами,

....

 

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

 

 

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

 

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

 

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

 

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

Изменено пользователем Mavric84

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...