OSDev
http://osdev.su/

Настройка PIC
http://osdev.su/viewtopic.php?f=7&t=924
Страница 1 из 2

Автор:  main.c [ 26 май 2014, 17:20 ]
Заголовок сообщения:  Настройка PIC

Мне нужно настроить PIC, это часть учебного задания, а так же мне дано начало кода:
Код:
mov  $0x20, %al
outb $0x20
outb $0xA0

Здесь посылается сигнал окончания наиболее приоритетного прерывания (безличный EOI) в оба контроллера, вопрос в том, зачем это делается? И ещё вопрос, как работает PIC, если его не инициализировать, у него же должен быть задан какой-то начальный режим работы? Это потом мы его инициализируем так, как нужно нам.

Автор:  pavia [ 26 май 2014, 19:16 ]
Заголовок сообщения:  Re: Настройка PIC

Цитата:
Здесь посылается сигнал окончания наиболее приоритетного прерывания (безличный EOI) в оба контроллера, вопрос в том, зачем это делается?

Да не зачем, смотри документацию от Intel там процесс инициализации начинается с ICW1, а не с OCW1<=EOI. А вот почему это дал ваш преподаватель так это надо спрашивать у него, либо у его тараканов. У каждого программиста аппаратуры свои тараканы в голове.

http://ru.osdev.wikia.com/wiki/Программируемый_контроллер_прерываний

Мой код инициализации можете взять здесь.
viewtopic.php?f=7&t=661


Цитата:
И ещё вопрос, как работает PIC, если его не инициализировать, у него же должен быть задан какой-то начальный режим работы? Это потом мы его инициализируем так, как нужно нам.
Нет у оригинального PIC не было контакта сброса. Поэтому после подачи питания все его регистры(биты регистра) попадают в неопределённое состояние X.(Либо 1 либо 0).
Но когда контролёр перестал существовать как отдельное устройство и перекочевал в южный мост, то у него появились значения по умолчанию, которое он принимает после сброса. Но в любом случае прежде чем использовать PIC его надо инициировать. Это связан с тем что не все регистры сбрасываются в начальное состояние.

И также обращаю на изменение поведения контролёра. При выборе режима совместимости а) 8080, так и б) 8086/8088. Когда он стал внутри моста то режим совместимости со старым процом убрали. И значение по умолчанию для ICW4 изменилось.

Автор:  main.c [ 26 май 2014, 20:42 ]
Заголовок сообщения:  Re: Настройка PIC

Тогда ещё вопрос по поводу ICW 4, в вики сказано, что биты 3 и 2 должны быть равны 0, у меня в материалах, что дал мне преподаватель бит 3 и 2 имеют вполне определённое назначение, картинку с материалами прикладываю. Вы не могли бы пояснить где информация более достоверная? Если будет интересно могу выложить полную PDF-ку материалов.

Вложения:
ICW4.png
ICW4.png [ 204.97 КБ | Просмотров: 9355 ]

Автор:  pavia [ 26 май 2014, 21:18 ]
Заголовок сообщения:  Re: Настройка PIC

Я уже писал что есть разная реализация PIC. В Википедии в конце статьи приведены ссылки на официальные источники информации. Вот в официальных источниках информация достоверная.
А по поводу разногласий да так и есть. В вашей методичке перевод старой реализации, в википедии чуть более новой, но наиболее актуальной. На самом деле эти разногласия не существенные. Просто современный PIC не поддерживает буферезированный режим, так как способ соединения PIC является IBM совместимой реализацией с PS/2

Автор:  main.c [ 27 май 2014, 00:35 ]
Заголовок сообщения:  Re: Настройка PIC

Код:
movb $0x20, %al     #OCW 3 - безличный EOI
        outb $0x20
        pop %ax
        iret

Это самый конец моего обработчика прерываний таймера. Чисто теоретически между сбросом ISR и iret может снова прилететь прерывание таймера?

Автор:  Yoda [ 27 май 2014, 00:39 ]
Заголовок сообщения:  Re: Настройка PIC

Может, но до возврата из обработчика прерывания (выполнение iret) они будут проигнорированы, т.к. в обработчике прерывания запрещены.

Автор:  main.c [ 27 май 2014, 00:46 ]
Заголовок сообщения:  Re: Настройка PIC

А разве вложенных прерываний не бывает? Мы ведь сбросили ISR, значит контроллер увидев IRR от таймера устанавливает ISR, сбрасывает IRR и устанавливает адрес вектора на адресной шине, разве не так?

Автор:  Yoda [ 27 май 2014, 00:54 ]
Заголовок сообщения:  Re: Настройка PIC

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

Автор:  main.c [ 27 май 2014, 01:08 ]
Заголовок сообщения:  Re: Настройка PIC

То есть если я Вас правильно понял, процессор начав выполнение обработчика прерываний, неявно обнуляет IF, а при возврате так же неявно его взводит. То есть если я взведу его сам в обработчике, я тем самым смогу обрабатывать вложенные прерывания? Тогда ещё один вопрос, предположим, что я разрешу обработку внутри обработчика. Но тогда если это же самое прерывание будет прилетать очень часто, есть вероятность, что произойдёт переполнение стека? И ещё вопрос, если я не сброшу ISR, но разрешу прерывания, процессор снова будет игнорировать запросы?

Автор:  pavia [ 27 май 2014, 05:31 ]
Заголовок сообщения:  Re: Настройка PIC

На первый вопрос да. По поводу второго да. Вероятность есть если ваш обработчик не будет успевать обрабатывать прерывания.
По поводу 3 просто запросов не будет. PIC это машина состояний.

Страница 1 из 2 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/