Задать вопрос

Как правильно проинициализировать контроллер прерывания?

Спроецировал таблицу прерываний и загрузил лимит и базу в idtr. Написал обработчик прерывания таймера, записал его адрес в таблицу 20-ым элементом. При вызове этого обработчика через команду int 20h обработчик отрабатывает своё и ядро продолжает свою работу. Также проинициализировал pic следующими командами
mov        al,0x11       
        out        20h,al
        out        0A0h,al
        mov      al,0x20        
        out        21h,al
        mov      al,0x28       
        out        0A1h,al
        mov      al,04h           
        out        21h,al
        mov      al,02h            
        out        0A1h,al
        mov      al,1        
        out        21h,al
        mov      al,1      
        out        0A1h,al

По сути pic должен генерировать прерывания 18 раз в секунду, но этого не происходит. В чем может быть проблема?
  • Вопрос задан
  • 133 просмотра
Подписаться 1 Средний Комментировать
Решения вопроса 2
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
По сути pic должен генерировать прерывания 18 раз в секунду

По сути не PIC, а таймер. А в твоём коде не видно ни как ты инициализировал таймер, ни что таймерное прерывание разрешено в PIC.
Ответ написан
@Ponteley Автор вопроса
jcmvbkbc, Спасибо за помощь, копался на данном сайте пока не понял, что моя проблема заключалась в одной маленькой мелочи. После того как ядро заканчивало свою работу, оно уходило в вечный цикл, в котором находилась инструкция 'cli'.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы