Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Программная инженерия > Микроконтроллеры, робототехника, схемотехника, 3D принтеры
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.05.2017, 18:49   #11
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

В терминах intel это аппаратное прерывание.
Если вы пишете свой драйвер вам надо вычитывать всё ФИФО. Там есть регистры конфигурации. В них походу можно настроить, какие прерывания писать, а какие нет. Тем самым можно снизить их трафик.

256 - это максимальный размер очереди. По факту она будет короче. Иначе зачем там флаг переполнения ФИФО? Вычитывать надо столько сколько лежит в очереди. Так как внутрянка у них рассчитана на ISA а сверху приделан мост PCI то быстрее 8 МБайт/с вы не получите.

INTA#, - вот его и имел в виду. У PCI сложная система, а сейчас вам это не к чему. Четыре линии INTA#, INTB#, INTC#, INTD#. Вам достаточно знать номер IRQ. На нём ещё есть устройства? Или только ваша карта. Если будете переставлять карту в разные слоты, то у неё будут разные номера IRQ. Их можно считать из PCI CFG.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 04.05.2017, 19:30   #12
седьмой
Форумчанин
 
Регистрация: 17.07.2012
Сообщений: 140
По умолчанию

Цитата:
Сообщение от Pavia Посмотреть сообщение
Вам достаточно знать номер IRQ. На нём ещё есть устройства?
нет это промышленный комп, на нем больше ничего нет только эти 2 платы, одна для тестирования канала (вместо внешнего устройства), вторая рабочая для непосредственной работы с внешним устройством. Нет платы будут постоянно стоять на одном месте, вот еще не понял про
Цитата:
Их можно считать из PCI CFG.
это вы имеете в виду что через какую то конфигурацию можно посмотреть реальные номера IRQ для плат или что вы тут имели в виду? Если бы платы были исашные, то я бы в конфигураторах к драйверу сам бы написал эти прерывания, и выставил бы их на самой плате микропереключателем, а на плате с PCI номер IRQ откуда может взяться?
Цитата:
Если вы пишете свой драйвер вам надо вычитывать всё ФИФО
я не то что пишу драйвер, это громко сказано, я пытаюсь его написать или хотя бы понять как он должен работать.
Цитата:
Вам достаточно знать номер IRQ.
вот это не понял, как это узнать?

Последний раз редактировалось седьмой; 04.05.2017 в 19:40.
седьмой вне форума Ответить с цитированием
Старый 04.05.2017, 20:50   #13
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Цитата:
Сообщение от седьмой Посмотреть сообщение
нет это промышленный комп, на нем больше ничего нет только эти 2 платы
Это лучше перепроверить хотя бы через туже sysinfo. Есть материнская плата где сам чёрт ногу сломит.

Так вы сами уже посмотрели.
Цитата:
Сообщение от седьмой Посмотреть сообщение
Оказалось прерывание у платы PCI можно посмотреть программой sisinfo , прерывание IRQ11 INTA#.
Если хотите программно, то там сложнее. Нужна библиотека или хотя бы модуль для работы с PCI. Несложно написать самому.
У каждого устройства есть коды Device ID (DID) и Vendor ID (VID). Оно уникальное для каждой серии/модели. Как правило в драйвере эти коды жёстко прописаны в коде.
Так вот драйвер перебирает все устройства и ищет свои устройства. Найдя их запоминает их расположение на шине PCI по формату Bus:Device:Function.
Далее достаточно прочитать регистры из заданного пространства CFG.

BIOS во время старта компьютера настраивает для всех карт PCI их IRQ и записывает номер в PCI CFG в переменную Interupt Line


Как работать с PCI? Если вы пишете в ОС Windows или Linux там есть соответствующий API.
Для DOS есть два пути через BIOS Int 1Ah или напрямую через порты 0CF8h и 0CFCh ввода вывода.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 05.05.2017, 06:39   #14
седьмой
Форумчанин
 
Регистрация: 17.07.2012
Сообщений: 140
По умолчанию

Цитата:
Сообщение от Pavia Посмотреть сообщение
Для DOS есть два пути через BIOS Int 1Ah или напрямую через порты 0CF8h и 0CFCh ввода вывода.
Спасибо Вам огромное за объяснение, очень признателен за такую ценную информацию, дальше попробую сам. Желаю Вам удачи!

Цитата:
Сообщение от Pavia Посмотреть сообщение
Это вы можете рассматривать как ещё один контроллер прерываний. Получается цепочка из контроллеров прерываний.
Тут просто внутри вашей платы ещё ряд прерываний. А проводов прерываний у PCI платы всего 4, но используется только 1. Вот что-бы запихать все прерывания в одну линию используется регистр РВП. Обработчик драйвера проверяет какое это прерывания и выполняет нужные действия.
Вот еще есть червь сомнения, наверно глупо переспрашивать, но крутится на языке, придется спросить: обязательно ли в данном случае использовать всю цепочку прерываний, я имею в виду и ПК и Плис, нет ли такой возможности использовать только прерывание Плис на примере программного прерывания Доса int14. Например хочу я получить данные на 2й плате и проверить по прерыванию правильно они прошли или нет, которую я использую для тестирования работы системы. Т.е я сам с первой платы на с++ отправляю код на 2ю плату, что мешает мне тут же проверить флаг прерывания Фифо микросхемы? Может быть это будет не намного дольше аппаратного прерывания через ПК? По сути дела на таком высокоскоростном процессоре, флаг уже будет выставлен на первом цикле программной проверки его наличия. Поэтому спасибо за подробное обьяснение, но для меня писать такой код достаточно сложно и долго, а выигрыш в скорости будет наверно незначительный, поэтому пока попробую обойтись программным прерыванием на Фифо, спасибо большое за помощь.

Последний раз редактировалось седьмой; 05.05.2017 в 07:10.
седьмой вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не работают прерывания xotonic Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 24.10.2014 21:18
скрипты для OlliDbg- как они пишутся и как работают Dimka-novitsek Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 14.10.2014 16:50
Как работают фрилансеры? Izobara Свободное общение 22 15.04.2013 09:55
А как работают антивирусы? MooNDeaR Свободное общение 35 04.01.2012 16:21
Делфи и ассемблер. Не работают прерывания типа Int Я_и Общие вопросы Delphi 8 11.12.2010 13:13