Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Pio c разрешёнными прерываниями

18K
25 января 2010 года
logree
102 / / 27.09.2008
Читаю Ata spec и не могу понять как работает Pio data-in с разрешёнными прерываниями. Я понял что всё вроде должно работать так:

0. nIEN = 0
1. Ждём idle(свободного вроде) состояния
1.1. Ждём BSY = 0 и DRQ = 0 (я ещё читаю ERR бит и провря его на =0, нужно ли это?)
2. Выбираем устройство
2.1 Ждём BSY = 0 и DRQ = 0 ERR =0
3. Записываем параметры команды
4. Записываем команду
Теперь начинается командный протокол Pio data-in
5. Вот тут не понятно - получается дальше приходит запрос прерывания и что мне с ним делать? Что обработчику сказать основной системе? что-то вроде обработка команды началась?
5.1 Я так понимаю обработчик проверяет(Ждет) BSY = 1 DRQ = 0 (без ошибок)
5.2 обработчик Ждёт BSY = 0 DRQ = 1
5.3 теперь читаем регистр данных (как узнать что на середине передачи не произошла ошибка?) Ещё непонятно - прерывание возникает после каждого чтения регистра данных? или как?

Что мне делать с обработчиком? он что должен просто уведомлять систему о том что произошло прерывание или должен сам выполнять действия?
Кто нибудь может внятно рассказать про Overlapped команды?
399
25 января 2010 года
KIV
432 / / 20.01.2009
Если PIO то обработчик прерывания можно оставить пустым и делать все так же как и при отключенных прерываниях. По середине передачи ошибка произойти не может, т. к. к этому моменту сектор уже прочитан во внутренний буфер диска (а вы как думали?). Обработчик прерывания в любом случае должен только уведомлять систему, которая этого ждет (а может быть занимается в это время другой работой, если у вас есть многозадачность). Overlapped команды, если я вас правильно понял - это когда чтение/запись не производится сразу, а передаётся системному процессу, а выполнение приложения идет дальше. Это нужно, чтобы приложение не зависало при чтении/записи. Разумеется для этого требуется многозадачность.
252
26 января 2010 года
koderAlex
1.4K / / 07.09.2005
обработчик прерывания должен снять прерывание чтением регистра состояния и , если всё нормально , выполнить чтение данных .
18K
26 января 2010 года
logree
102 / / 27.09.2008
спасибо,так что по поводу Overlapped команд, кто нибудь может объяснить как это работает?
252
26 января 2010 года
koderAlex
1.4K / / 07.09.2005
перекрытие команд можно использовать в atapi (а не в ata) , но не рекомендуется . нормальная очередь команд сделана в sata интерфейсе .
atapi - это в основном оптические приводы , поэтому очерёдность выполнения команд для них планировать лучше вручную .
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог