Pio c разрешёнными прерываниями
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 команды?
Если PIO то обработчик прерывания можно оставить пустым и делать все так же как и при отключенных прерываниях. По середине передачи ошибка произойти не может, т. к. к этому моменту сектор уже прочитан во внутренний буфер диска (а вы как думали?). Обработчик прерывания в любом случае должен только уведомлять систему, которая этого ждет (а может быть занимается в это время другой работой, если у вас есть многозадачность). Overlapped команды, если я вас правильно понял - это когда чтение/запись не производится сразу, а передаётся системному процессу, а выполнение приложения идет дальше. Это нужно, чтобы приложение не зависало при чтении/записи. Разумеется для этого требуется многозадачность.
обработчик прерывания должен снять прерывание чтением регистра состояния и , если всё нормально , выполнить чтение данных .
спасибо,так что по поводу Overlapped команд, кто нибудь может объяснить как это работает?
atapi - это в основном оптические приводы , поэтому очерёдность выполнения команд для них планировать лучше вручную .