Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: IRQ - 8, Проблема  (Прочитано 17859 раз)
0 Пользователей и 1 Гость смотрят эту тему.
VAV
Гость
« : 15-01-2005 19:52 » 

У кого-нибудь получалось установить обработчик прерывания на IRQ - 8 ?
Но мало, того, хотелось бы, что бы он еще и срабатывал...
Пробовал все что написано в документации по CMOS, типа часы чтобы тикали 1024 раза в секунду и прочие настройки хранящиеся в регистрах A, B, C.
Пробовал делать не только в RealMode, но и чистом ProtectedMode, даже прерывания ведущего и ведомого контроллеров перемапил (т.е. ведущий: int32 - int 39, ведомый: int40 - int 47), и все равно глухо.
Прерывания от ведомого контроллера поступают точно, PS/2 (IRQ - 12) мыша работает, а этот канал ну никак ?
В чем спрашивается фигня, недокументированные невозможности или... ?
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 16-01-2005 20:32 » 

Может маска в контролере установлена?
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
VAV
Гость
« Ответ #2 : 17-01-2005 20:59 » 

Да, ожидал и такой ответ. Конечно All Interrupt Enabled, маску специально пробивал.
А вы сами попробуйте, вот все Interrupt'ы пашут, даже Exception'ы срабатывают, а вот... ну никак Не понял
« Последнее редактирование: 20-12-2007 20:34 от Алексей1153++ » Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #3 : 18-01-2005 20:50 » 

VAV Давай не будем гадать на кофейной гуше. Раскажи лучше что ты конкретно сделал. Когда то давно лет десять назад на старой доброй XT я писал подобную задачу. У меня в правом верхнем углу в ДОСе тикали часики. Как ты понимаеш никаких CMOS на этой машине не сушествовало. Поэтому эта задача решалась без него. Таймер стандартно тикает 18,2 раза в секунду. При этом происходит изменение внутрених часов компа.
Что я делал. Сначало запретил прерывания и заменил вектор прерывания на свой. Старый вектор запомнил в ячейке. Разрешил прерывания. Вышел из программы и оставил ее резидентом (int 27h помоему, если я не ошибаюсь).
В самом прерывании. Когда происходит прерывание, то все остальные прерывания глушатся автоматически. Первое что делал запоминал все регистры, которые я изменял в том числе и регистр состояния. Считывал с памяти часики. прорисовывал их в буфер экрана. востанавливал все регистры. Дальним call вызывал старый вектор прерывания. затем завершал прерывание iret.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
VAV
Гость
« Ответ #4 : 19-01-2005 19:28 » 

Привет Finch, попытаюсь объяснить: Хочу заставить срабатывать прерывание от RTC.
Исходниники затерялись, через денек сгенерю новые, а пока только текстовое русскоязычное описание.
Как известно в регистре CMOS 0Ah биты 0-3 отвечают за выбор частоты периодического прерывания (0110 - 1024 Гц), в регистре 0Bh бит 6 отвечат за вызов периодического прерывания IRQ8, бит 3 - генерация прямоугольных импульсов. При установке этих битов вроде как должно начать срабатывать прерывание, но, последнего не происходит.
Попробуй на досуге, может у тебя получится...
А описываемое тобой прерывание IRQ0 работает и всегда железно срабатывает.
К стати RTC были и на XT, нафига ей тогда батарейка ?
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #5 : 19-01-2005 21:09 » 

Честно говоря я это делал давно. И сейчас уже не упомню. И как я понял из нижеперечисленного, я чуть отстал от жизни в этом вопросе. Попробую поискать в нете в субботу. Вот, что нашел. Описание ячеек CMOS http://www.realcoding.net/articles.php?aid=931 . ОБРАБОТКА ПРЕРЫВАНИЙ В ЗАЩИЩЁННОМ РЕЖИМЕ http://faq.pp.ru/html/cpu/80486/ch3.htm. Перепраграммирование контролера прерываний http://www.realcoding.net/article942.html

Часики сушествовали и на XT, но была проблема. После каждого включения требовалось перенастраивать Часики на текушее время. Или мерится с тем что они показывают 1 января 1980 года 12 часов ночи. Кстати винты настраивались джамперами на плате. Правда в то время не сушествовало такого изобилия типо-размеров. Максимум 40 мегов. Это был далекий 1991 год. CMOS только на 286 машинах появился. Но у меня к ним не было доступа.  Хотя подобие его (CMOS) на одной 86 машинке я видел.
« Последнее редактирование: 19-01-2005 21:15 от Finch » Записан

Не будите спашяго дракона.
             Джаффар (Коша)
VAV
Гость
« Ответ #6 : 20-01-2005 19:51 » 

Доброго времени суток тов. Finch.
Вопрос наверное можно снимать с форума, т.к. я разобрался. Как я и говорил - недокументированная невозможнось.
Такие способы установки прерываний, типа: запретил, переназначил, разрешил, в данном случае не срабатывают.
Привожу огрызок кода по настройке RTC:
;------------------------------ Enable RTC IRQ -----------------------------
                        mov     al,0Ah
                        out     70h,al
                        in      al,71h
                        and     al,080h
                        or      al,26h          ; Set 1024 Hz
                        out     71h,al
                        mov     al,0Bh
                        out     70h,al
                        in      al,71h
                        and     al,8Fh
                        or      al,48h          ; Enable IRQ8 and square impulses
                        out     71h,al
Казалось бы вот, все, должны работать после следующей команды sti, т.к. описанное выше происходит при запрещенных прерываниях, но нет.
Затем попробовал прочитать регистр статуса 0Ch:
                        mov     al,0Ch
                        out     70h,al
                        in      al,71h
И, о чудо, прерывание сработало, но, лишь один раз, при этом ход выполнения основной программы не был нарушен. Далее следуя здравой логике, код чтения регистра статуса запихнул в обработчик прерывания, и он заработал. (Метод околонаучного тыка в действии Улыбаюсь
В доступной литератуое я ни разу не встречал описания запуска RTC таймера.
По поводу XT: у меня валяется до сихпор материнка, и на ней есть отсек под батарею, для чего же спрашивается она как не для часов ? Запустить её уже наврядли удастся, а хотелось бы посмотреть...
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #7 : 21-01-2005 08:11 » 

VAV, конечно запоздало, но я все таки заглянул в лрайвер rtc Linux-а и там действительно выполняется чтение регистра 0Ch при каждом прерывании. Там находится флаги прерывания, которые сбрасываются при чтении.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
VAV
Гость
« Ответ #8 : 21-01-2005 19:35 » 

Выражаю благодарность тов. Finch и RXL за оказанное внимание.
Записан
p0et
Гость
« Ответ #9 : 07-04-2005 00:38 » 

ну вот такое обсуждение пропустил - если кто прочитает, то такая проблема возникает при попытке писать свое ядро многозадачное не в защищеном режиме. ой. проблема с IRQ, но не с 8. не помню с какими, но возникает. решали используя другие прерывания. а с IRQ8 несталкивался. надо залезть попробовать
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #10 : 08-04-2005 21:11 » 

p0et, ты много чего пропустил.
С возвращением!
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
AnoD
Гость
« Ответ #11 : 05-12-2008 06:12 » new

Ребята, спасибо огромное. Помогли Улыбаюсь
Но просто так код не работает, в обработчике прерываний в самом конце надо вставлять ещё вот такое:
Код:
  mov al, 20h
  out 20h, al       ; дабы заглушить активное прерывание в ведущем контроллере (регистр ПКП ISR)
  out 0a0h, al      ; и сделать тоже самое в ведомом
iret

А то я и этот момент провтыкал) После такого окончания всё на ура работает
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines