Привет всем! А ну ка подскажите, например сработало irq 8, это во втором контроллере установится бит занятости... Меня интересует, что будет с IRQ 2, оно сработает или нет? Если сработает irq 8 то ведь в первом контроллере установится бит занятости IRQ 2, и во втором контроллере IRQ 1 установится. Обьясните что с первым контроллером и с его IRQ 2 при приходе прерывания на второй контроллер. Это все про 8259. Всем спасибо за внимание!
0136 Сработает. Поэтому сигнал конца прерывания посылается в первый и во второй контроллеры 8259A. Регистр запроса на прерывание (Interrupt Request Register, IRR) доступ к которым осуществляется через входы IR0 - IR7 контроллера. Бит этого регистра устанавливается в 1 если выбран режим запуска фронтом и происходит перепад напряжения от низкого к высокому. Или если выбран режим запуска уровнем то устанавливается в 1 при высоком уровне. Этот бит устанавливается в 1 или сбрасывается в 0, даже если соответствующее прерывание было замаскировано. Он будет сброшен, как только поступит цикл запроса прерывания INTERRUPT ACKNOWLEDGE Регистр обрабатываемых запросов, (In-Service Register, ISR) описывает в битах 0 - 7 номер прерывания которое (0 - 7) в данный момент обрабатывается. Эти биты устанавливаются и соответствующие ему IRR очищаются когда поступит цикл запроса прерывания INTERRUPT ACKNOWLEDGE. Этот бит будет сброшен как только будет получена команда подтверждение конца прерывания(End of Interrupt Command - EOI) Регистр маскирования запроса на прерывания (Interrupt Mask Register, IMR) описывает,какие номера прерывания в настоящий момент замаскированы. Единичное значение бита в IMR указывает на то, какое прерывание при появлении запроса в IRR будет заблокировано. При этом INTR не генерируется. Как известно PIC подключаются каскадным способом. Это значит что INTR ведомого подключен к IRQ ведущего. В классической схеме ко второму входу. PIC работает следующем образом. Когда выставляется сигнал на линию IRQ, контроллер получив сигнал вырабатывает запрос на прерывание по линии INTR- interrupt request сигнал. Процессор отвечает по линии INTA - INTERRUPT ACKNOWLEDGE . Контроллер замораживает состояние прерываний припомощи ISR. Процессор подает второй INTA и теперь уже контроллер отправляет данные на шину данных. Это номер прерывания. Начальный адрес записанный в контроллер плюс номер линии на которую поступило прерывание. Если имеется каскадное подключение. А такое подключение, как мы знаем, имеется. То ведущий контроллер выставляет ID на линии CAS0-2. Ведомый сравнивает его со своим ID ,который он получил по ICW3. И при втором запросе INTA ведомый выставляет номер прерывания на шину адреса. Пожалуй добавлю CAS0-2, выставляется только если на ведущем контроллере обробатывается прерывание поступившее с ведомого контроллера. А это определяется путем сравнения ICW3 ведущего, с линии на которое поступило прерывание.
будет два прерывания? или одно прерывание irq2 и оно должно смотреть во второй контроллер? Я конечно извиняюсь, но у меня нет возможности вызвать прерывания 8-15 что бы разобраться самому. А ваш ответ большой. Мне конкретно надо понимаете вопрос мой? Я не понимаю сколько будет прерываний??? опишите процесс возникновения и такое, в общем плане без тонкостей, при каскадном подкл 8259 и прерывание происходит например irq8. Как будет вести себя система прерываний??? То что бит занятости на первом контроллеру установится это я знаю! а вот будет ли прерывание??? Че это получается irq8 сработает и irq2 сработает??? Вот это не могу понять! Извиняюсь!!!
нет. ведущий знает, что на IR2 у него висит ведомый, поэтому при получении INTA выдает двойку на cas0-2, ведомый, получив этот сигнал сравнивает его со своим номером. есле номер совпадает, то при втором INTA ведомый засветит на шину число=базовому номеру прерывания+номер ноги, на которую прикатил запрос на прерывание
0136 Как же я тебе отвечу если ты читать не хочешь? Для процессора одно. Мы дергаем второй контроллер за 0 ногу (IRQ 8)/ Второй контроллер дергнет первый за ногу 2 (Irq 2) первый дергнет процессор INTR. Процессор выдаст ответ ack оба контроллера заморзятся. Первый стукнит второй. И при второй посылке ack второй контроллер выдаст номер. Да сработают.
О! Вот теперь я вроде понял, Pavia, я то все читал, просто с того чет не ясно мне. А вот с этого уже гут. Спасибо. То есть будет так - если произошло irq8, то вызовется его обработчик, а обработчик просто в конце должен отослать EOI обоим контроллерам. И вот теперь самое последнее чё мне вообще это нужно, получается в таблице прерываний место под irq2 не нужно, так как оно не произойдёт . Правильно? Обработчик irq2 в таблице прерываний не нужен, да?