КОМПЬЮТЕРНОЕ ЖЕЛЕЗО
HARDWARE FOR PC

Шины и карты расширения

Пусть в данный момент в нем записано число AA55h, тогда чтени¬ем порта по команде IN AX, R0 получим в регистрах процессора AL=55h, AH=AAh. Теперь если попытаться его «прочитать по нечетному адресу», то есть командой IN АХ, R0+1, то получим AL=AAh (содержимое RO+1, к которому мы на самом деле и адресовались!), a AH=FFh (результат чтения «пустоты»). Так что это не «эффект перестановки», а просто незнание общего правила «интеловской» адресации: ад¬ресом слова (двойного, учетверенного...) является адрес его младшего байта. Если в нашем устройстве применяется неполная дешифрация адреса (линия SA1 не ис¬пользуется ни для дешифрации адреса, ни для выбора регистра), то мы увидим полную перестановку байт — в AH=55h, результат чтения RO по адресу-псевдони¬му RO+2. Логика работы контроллера шины вместе со всеми буферами делает обращение к любой ячейке памяти или порту инвариантным к способу программ¬ной адресации — что закажешь, то и получишь, но требуется учитывать особенно¬сти периферийных устройств, у которых в адресации портов нередко встречаются псевдонимы. Адреса-псевдонимы встречаются и в пространстве памяти (напри¬мер, копии образов BIOS под границей 1^го и 16-го мегабайтами памяти в «клас¬сических» PC/AT).
6.1.2. Прямой доступ к памяти — DMA
Прямой доступ к памяти позволяет абоненту шины организовывать обмен дан¬ными между своим регистром и памятью под управлением контроллера DMA, минуя центральный процессор. До выполнения обмена канал DMA должен быть инициализирован — задан начальный адрес и размер пересылаемого блока памя¬ти, направление и режим обмена. После инициализации канала обмен выполня¬ется по инициативе ПУ.
Для интерфейса ПУ каждый канал DMA представляется парой сигналов: запрос об¬мена — DRQx и подтверждение обмена — DACKx#, где х — номер используемого ка¬нала. На рис. 6.3 приведена диаграмма стандартного цикла передачи байта (для 8-битного канала) или слова (для 16-битного) от ПУ в память по каналу DMA. Цикл передачи блока байтов или слов в память будет выглядеть следующим образом.
1.
По сигналу DRQx контроллер DMA запрашивает управление шиной и дожидается его предоставления процессором (и другими контроллерами шины).
2.
Контроллер выставляет адрес ячейки памяти и формирует в одном цикле шины
сигналы IOR#, DACKx* и MEMW#. Адрес на всех линиях, включая LA[23:17], дей¬ствителен во время всего цикла (защелкивание не требуется), BALE=H в тече¬ние всего цикла. Сигнал DACKx# указывает на то, что операция выполняется для канала х, a IOR# — на направление в канале (для пересылки из памяти в канал использовался бы сигнал IOW#).

Hosted by uCoz