Jump to content

    

Mavric84

Участник
  • Content Count

    51
  • Joined

  • Last visited

Everything posted by Mavric84


  1. Да это уже мне подсказали, спасибо. Но загвостка вся в том что, по словам программиста, записи по этим портам в 8259 производяться в ДОСе, а в МСВС это встроенно в систему (что исключает потребность производить данный операции с 8259)... но это мы еще проверим..
  2. Хотелось бы услышать мысли, В моем устройстве не задествована команда (0000) - подтверждения прерывания, может ли причина заключаться в этом?
  3. Стукнулся... Самое интересное что плата на PLX кирпиче работает с этим же самым драйвером нормально. Забыл ОС МСВС 3.0
  4. Хм... не понятно почему он даже к обработчику прерываний не обращается(( Будем думать... Спасибо за советы.
  5. Так и делал... ((( думал есть другой вариант(( все равно спасибо.
  6. Что то не пойму про буферы?? мне нужен вывод с О.К.... вы хотете сказать что двунаправленный буфер решит ситуацию?? :05:
  7. Исходя из большого количества вопросов, попробую описать ситуацию более подробнее(прошу прощения заболел, в связи с этим могу подтормаживать, сильно не пинать) Имеется плата PCI, построен на ПЛИСе SPARTANe II (своей разработки), на нем сделан PCI контроллер, сей девайс подключается к внешнему интерфесу ВВОДА-ВЫВОДА. Чтение, запись в канал ввода-вывода осуществляется через пространство I/O. Чтение, запись работают норм. При приходе из канала ввода-вывода некой команды, выставляется прерывание, INT#A опускается в 0, вызывается обработчик прерываний который, читает определенный регистр в котором отражено что прерывание выставило именно это устройство, прерывание сбрасывается и выполняется некая команда. Если через некоторое время из канала приедет опять команда... то мой контроллер опять выставит прерывание на линии но обработчик почему то не вызывается такое ощущение что он просто не видит его??? смотрю на контакт INT#A он в 0, ..... система не виснет... стоит пошевелить мышкой как прерывание обрабатывается и сбрасывается и команда проходит. Как узнаю что не входит в обработку прерывания? вывожу на экран строчку типа "прерывание пришло" и вторую строчку вывожу после того как прочитаю регистр подтверждения прерывания "мое прерывание"... прерывание без шевеления мышки или нажатия клавиш на клавиатуре срабатывают ровно через раз.... вот такая ситуация...
  8. Свое не свое определяется путем чтения регистра в пространстве и.о. А можно поподробнее про это ЭКСЛЮЗИВНОЕ ПРЕРЫВАНИЕ(первый раз слышу)...((( Не, не выходит...., а НЕ ВХОДИТ в обработчик!!! прерывание установленно и в регистре 6 записанно 0х01 когда обработчик прочитал этот регистр он увидел что записано 0х01(это означает что прерывание выставленно именно этим устройством) и сбрасывает прерывание и очищает этот регистр.
  9. Писали сами, Простите но немного не понимаю про чтение из XILINX??? для чего чтение??? на втором разе даже в обработчик прерывания не попадает(в то время как прерывание выставлено) для отладки добавлены две строки, первая после обработчика( что бы видеть что увидели прерывание), а вторая после строчек чтения регистра(определения свое или не свое прерывание)
  10. Да устройство первый раз поставило прерывание, драйвер увидел, прочитал доп. регистр, понял что свое прерыванием сбросил его. ВСЕ. но если опять повторить такое то прерывание выставиться и будет стоять до тех пор пока я не пошевелю мышкой(((.... при следующем разе опять все норм пройдет(без шевеления мышки)... след. раз опять будет висеть до мышиного шевеления(или нажатия на клаву) (К сожалению не я пишу программу) вызывается обработчик прерывания... читатет регистр, понимает что его прерывание, сбрасывает его... на след раз что бы прокатило... нужно пошевелить мышкой... а еще через раз опять все норм... Xilinx является мостом шина ввода\вывода to PCI ) Получается так. 1 прерывание проходит, 2 не проходит, 3 проходит 4 не проходит и.т.п. но если сделать вот так 1-е прерывание проходит,(пошевелил мышкой) 2-е проходит, 3-е проходит, пошевелил мышкой, 4-е проходит
  11. Контроллер своей разработки...(написал же вроде SPARTAN_2) драйвер просто не видит что выставленно прерывание...(сброс прерывания срабатывает.. исходя из того что первое прерывание отрабатывает..) стоит пошевелить мышкой и оно срабатывает...(причем тут мыша ума не приложу((м )
  12. Собстна интересует, а есть ли open-drain у xilinx? на пример как примитив у альтеры... если нет то какой выход?
  13. Собстна трабл, Плата PCI_33_32 на спартане2, при подаче команды через внешнюю шину, на девайс , PCI девайс выставляет прерывание, собстна все так и происходит но до перврого раза.... Пример... С внешней шины пришла команда-> PCI выставил прерывание-> прерывание отработало, (не трогая мышку и клаву) пытаемся еще раз передать команду на устройство, но теперь все затыкается.... причем не виснет(прерывание на PCI разъеме стоит) такое ощущение что обработчик прерываний его просто напросто не видит.... и стоит дотронуться до мышки и о ЧУДО прерывание срабатывает(увидело, распознало что свое и сбросило)) Кто что может сказать??
  14. Спасибо....... сейчас попробую...
  15. :) Бывает....... Да... Начиная от конфигурирования, заканчивая обращением к портам I/O, результаты моделирования вроде нормальные(не гуру... но все же)
  16. Немного не понял.....((( Про ПЛХ9050, я имею ввиду что он работает нормально....... Данная проблема(с записями FF) проявляется на Target(e) собственной разработки (Spartan2)
  17. Базовые адр. конечно с 00(d800 и dc00 соотв.(просто переписывал)) Программа отлажена на PLX9050 Программа не моя... пишет программист-начальник... она отлажена, как уже писал на plx9050 printk("\n ------------PCI present-----------\n"); // ПРТЕДЕМСЕН ОБМЙЮЙЕ БДБРТЕТБ бул32 ret_val=pcibios_find_device(0x1393,0x1680,0,&busnum,&devnum); if(ret_val == PCIBIOS_SUCCESSFUL) printk("\nret=%d busnum=%d devnum=%d",ret_val,busnum,devnum); else { printk("\n ADAPTER NOT FOUND ...ended... \n"); return 1; } //ЮЙФБЕН ЛПЖЙЗХТБГЙА БДБРФЕТБ бул //Vendor_id Device_id pcibios_read_config_dword(busnum,devnum,0,&val1); printk("\n Device_id & Vendor_id =%x",val1); //--------------------------------------------------------------------------------------------- //ВБЪПЧЩК БДТЕУ 0 pcibios_read_config_dword(busnum,devnum,PCI_BASE_ADDRESS_0,&val1); printk("\n Bas.Adr.0 =%x",val1); if((val1 & 0x1) == 0x1) { //ЬФП РПТФЩ МПЛБМШОЩЕ reg00=val1-1; } //ВБЪПЧЩК БДТЕУ 1 /*обращение к портам*/ //outb(0xff,reg0+4); //outb(0xff,reg0+2); temp1=inb(reg0+4); /* константа которая должна чиаться по 4 адресу(читаю ... */ printk("\nREG4==%X\n",temp1); /* путем открывания буферов) прочитается она если только */ /* по 4 адр. прописать предварительно FF outb(0x55,reg0+4); /* в порт и.о. по 4 адресу пишем 55 и через передатчик по кольцу заводим на*/ temp1=inb(reg0+2); /* приемники и читаем по 2 адресу... все прочитается, если перед записью в */ printk("\nREG2==%X\n",temp1); /* 4 поставить запись во 2 регистр этих самых FF //outb(0xff,reg0+4); /* */ temp1=inb(reg0+4); /* так же прочитается константа если раскоментровать строку выше*/ printk("\nREG4==%X\n",temp1); return 1;
  18. /dmseg ... blk: queue c0358740, I/O limit 4095Mb (mask 0xFFFFFFFF) ... /proc/pci Bus 0, dev 1, func. 0: Miltimedia controller: Moxa tehnologies Co Ltd Smartio c16 H/PCI irq 9 Master, Latensy=80 I/O at 0xd87f Non prefetchable 32 bit memory at (0xe70010ff) I/O at 0xDC1f МСВС 3.0 программа выполнена в виде модуля в котором и организованно обращение к регистрам... outb... inb.. printk 3 оператора, ничего другого нет....
  19. Нда... туго без телепатов... Строка появляется после того как происходит выбор операционки и начинается загрузка ядра и в этих именно строчках и появляется... По 'cat /proc/pci' скажу в понедельник... Хочу попробовать на другой машине и с нормальной линухой...попоробую на федоре..
  20. Под МСВСом ... И при загрузки углядел интересненькую строчку....: I/O 4096 (0xFFFFFFFF)
  21. К сожалению опять данная проблема всплыла((( опять же перед чтением константы, требуется записать FF.
  22. Читал......Байт на шине ориентирую исходя из адреса (00:01:10:11) в этом вроде проблем не возникало........ Моделить пробовал (не гуру... но вроде все так...) Только что провел тест... (что то вроде инициализации портов) перед всеми записями и чтениями записал по нужным адресам FF, все пашет ок...... потом хоть 10 раз пиши, читай все ок..... Смущает то что не понятно что это такое(((
  23. Да...... Пишу, читаю, байт
  24. Кто сталивался с такой траблой........ Имеется PCI target(собственный, построен на Спартане2)... Смысл заключается в следующием........Внутри кристала организовываю 3 регистра(для тестирования) которые тактируются по CLK. В первый регистр данные пишутся при записи по 2 адресу, и читаются(путем открывания буферов) тоже по 2 адресу... все ок, что записал то и прочитал,.......... но если в такой же регистр записать по предположим 3 адресу, а прочитать по 4 ( адрес не имеет значение главное что бы адрес записи и чтения были разные) то читается по 4 не то что было записанно по 3, а 00. Но если между командами записи в 3 и чтением 4 вставить команду записи в 4 FF то все проходит нормально(прочитаю в 4-ом то что записал в 3-й)..... или пример чтения константы предположим по 6 адресу........ константа прочитается в том случае если перед чтением регистра будет стоять команда записи в этот регистр значения FF........ Читал и спеку и книгу ничего подобного не нашел.....(прошу не путать с чтением BARов, там читается, как раз так)... но почему это происходит Вводом-выводом? непонятно...((( Если потребуется могу выложить принт скрины регистров.....
  25. Да... на другом компе встает все норм... Не встаёт( foundation:) ), только на ноуты, как выше писал ACER и IRU... дистрибутивы винды одинаковые, сам продукт один и тот же....... Может кто пробовал на ноут ставить???