Блок командных регистров | 1F0h-1F7h | 170h-177h | 10h | 14h |
Блок управляющих регистров | 3F6h | 376h | 18h | 1Ch |
Прерывание | 14 | 15 |
Типовой контроллер имеет класс 01:01:80h и реализован в чипсетах большинства современных системных плат. Контроллер выглядит как расширение стандартного ATA-контроллера, обеспечивающего доступ к регистрам устройств ATA/ATAPI по известным адресам. Расширение касается прямого управления шиной PCI (bus mastering), благодаря которому можно реализовать обмен данными с устройствами в режимах DMA. Контроллер позволяет использовать все доступные ему режимы обмена PIO (3,3-16,6 Мбайт/с), режимы DMA в стиле контроллера 8237А (2-16,6 Мбайт/с) и режимы UltraDMA (16,6-100 Мбайт/с). Все настройки временных параметров выполняются через конфигурационные регистры PCI, их состав может быть специфичным. Однако с этими регистрами должна иметь дело только процедура POST, устанавливая для каждого обнаруженного устройства ATA/ATAPI оптимальные режимы PIO и DMA/UltraDMA. В эти настройки может вмешаться пользователь, установив какие-либо ограничивающие параметры в BIOS Setup. В итоге после конфигурирования во время POST при обращении программ к устройствам остается выбор лишь между PIO и DMA (если устройство поддерживает DMA). Для обмена в режиме PIO никаких специальных действий не требуется, программа просто выполняет чтение или запись в регистр данных командами REP INS/OUTS
. Для обмена в режиме DMA требуется «зарядить» и запустить контроллер прямого управления, о чем и пойдет речь ниже.
Двухканальный контроллер имеет 16-байтный блок регистров, расположенный в пространстве портов ввода-вывода.
Таблица 9.10. Блок регистров контроллера PCI IDE
Смещение для канала | Длина, байт | Регистр для первого/второго каналов | |
---|---|---|---|
1 | 2 | ||
0 | 8 | 1 | BMICP/BMICS (RW) — |
1 | 9 | 1 | Резерв (0) |
2 | 0Ah | 1 | BMISP/BMISS — |
3 | 0Bh | 1 | Резерв (0) |
4 | 0Ch | 4 | BMIDPTP/BMIDPTS (RW) — |
BMICx
, доступный по чтению и записи, используется для запуска контроллера и задания направления передачи. Запуск осуществляется при переходе бита 0 из нуля в единицу, останов для текущего сеанса необратим. Останов контроллера (сброс бита) обычно выполняют по окончании выполнения команды ATA/ATAPI (по прерыванию). Преждевременный останов приведет к ошибке выполнения команды с соответствующим сообщением.