UNSAM SPD 08 ES Interrupciones DMA
UNSAM SPD 08 ES Interrupciones DMA
UNSAM SPD 08 ES Interrupciones DMA
• Subsistema de Entrada/Salida
• Interrupciones
• DMA
• Cronómetros
2
Subsistema de E/S
◼ Funciones del módulo de E/S
◼ Control y temporización
◼ Coordinar el tráfico entre los recursos internos y dispositivos externos
◼ Comunicación con la CPU
◼ Decodificar órdenes
◼ Intercambiar datos
◼ Proveer señalización de estados
◼ Reconocimiento de direcciones
◼ Comunicación con los dispositivos
◼ Idem anterior excepto el reconocimiento de direcciones
◼ Almacenamiento temporal de datos
◼ Adaptación de velocidades de transferencia de información
◼ Detección de errores
◼ Informar errores al procesador
◼ Paridad, Hamming
3
Subsistema de E/S
◼ Estructura de un módulo de E/S
◼ Pueden tener uno o más registros de datos y de estados
◼ Cada módulo tiene una dirección única
◼ Presenta interfaz de alto nivel hacia el procesador
◼ Se encarga del detalle en el manejo de periféricos
Interfaz con
dispositivos
Interfaz con la CPU
Lógica de Datos
Registro de datos
interfaz de
DATA Estado
Registro de estados / dispositivo
control externo Control
4
Subsistema de E/S
◼ La programación de los dispositivos de E/S es distinta a la
programación de memoria dado que estos operan asincrónicamente de
la CPU (y del programa en ejecución)
◼ Para transferir información, el dispositivo y el procesador se deben
sincronizar para el intercambio.
◼ Cada dispositivo de E/S tiene asociado una unidad de E/S o interfaz
que media entre los dispositivos y los buses internos del computador
◼ El bus de conexión permite a la CPU leer y escribir en el dispositivo
5
Subsistema de E/S – Puertos
◼ Un puerto permite el intercambio de información entre el bus
(conectado a la CPU y a la memoria) y el componente de E/S (que
a su vez están conectados a los dispositivos)
◼ Un componente de E/S tiene 3 clase de puertos:
◼ Puerto de CONTROL: Se escriben valores que controlan el
comportamiento de componente/dispositivo
◼ Puerto de STATUS: Se leen valores que representan el estado actual
del componente/dispositivo
◼ Puerto de DATA: Se leen y escriben valores que hacen intercambio de
información
◼ Cuando se conectan a un sistema de computación, a cada puerto
se le asigna una dirección de E/S
◼ Un dispositivo (puerto) es identificado por la dirección de E/S
◼ El computador lee y escribe desde y hacia esta dirección de E/S para
recibir o enviar información desde o hacia el dispositivo
6
Subsistema de E/S – Direccionamiento
◼ Memory-Mapped I/O
◼ El procesador utiliza el mismo set de instrucciones para accesos a memoria y
para las operaciones de E/S
◼ Los dispositivos de E/S y la memoria se encuentran en el mismo espacio de
memoria.
7
Subsistema de E/S – Direccionamiento
0000h
Data
Address
Control (R/W)
Control (M/IO)
00000h
8
Subsistema de E/S – Direccionamiento
◼ Hay que tener en cuenta que los puertos pueden permitir que se escriba un
dato en ellos, pero no necesariamente se podrá leerlo, o viceversa.
◼ La dirección de los puertos de E/S y de la memoria pueden tener el mismo
valor pero representan ubicaciones en dos espacios separados de direcciones.
◼ Existen instrucciones separadas que transfieren datos desde y hacia los puertos
de E/S
◼ Transferencia de Memoria MOV AL, [61h]
◼ Transferencia de E/S IN AL, 61h
OUT 61h, AL
9
Subsistema de E/S – Direccionamiento
◼ Instrucción IN
◼ Lee desde un puerto de E/S
◼ Sintaxis:
◼ IN AL, imm8 → Lectura de 8-bits
◼ IN AX, imm8 → Lectura de 16-bits
◼ imm8 especifica una dirección de E/S de 8 bits en el rango 00-FFh
◼ IN AL, DX
Los modos de direccionamiento son diferentes
◼ IN AX, DX
◼ DX especifica una dirección de E/S de 16 bits en el rango 0000-FFFFh
◼ Instrucción OUT
◼ Escribe a un puerto de E/S El destino se parece a un dir. inmediato
◼ Sintaxis:
◼ OUT imm8, AL → Escritura de 8-bits
◼ OUT imm8, AX → Escritura de 16-bits
◼ OUT DX, AL
◼ OUT DX, AX
10
Subsistema de E/S – Direccionamiento
El dato es de 1 byte AL
El dato es de 2 bytes AX
IN Destino, Origen
El dato es de 2 bytes DX
11
Subsistema de E/S – Direccionamiento
◼ Ejemplo:
◼ Suponga tener un dispositivo para mostrar caracteres ASCII
◼ El modelo para el programador es de un puerto de escritura solamente
en la dirección de E/S = 04E9h
◼ El display es “direccionado por cursor”: el caracter ASCII escrito en el
puerto de datos es mostrado en la posición actual del cursor.
◼ La posición del cursor es manejada por el dispositivo del display
◼ Cuando se escribe un caracter, la posición del cursor se avanza.
◼ El avance administra las nuevas líneas y el scrolling
◼ Escriba el fragmento de código que
muestre el caracter “A”
◼ Ejecutando el siguiente
código se obtiene AL=41h?
12
Subsistema de E/S – Direccionamiento
◼ Data port: 03BCh Status port: 03BDh
Offset Name Read/Write Bit No. Properties Offset Name Read/Write Bit No. Properties
Base + Data Write Bit 7 Data 7 Base + Status Read Only Bit 7 Busy
0 Port Bit 6 Data 6 1 Port Bit 6 Ack
Bit 5 Data 5 Bit 5 Paper Out
Bit 4 Data 4 Bit 4 Select In
Bit 3 Data 3 Bit 3 Error
Bit 2 Data 2 Bit 2 IRQ (Not)
Bit 1 Data 1 Bit 1 Reserved
Bit 0 Data 0 Bit 0 Reserved
13
Subsistema de E/S – Direccionamiento
◼ Encendiendo Luces
◼ Hay leds conectados a los 8 bits de salida de una
interfaz paralelo (LPTn) unidireccional, cada led es
manejado por un bit en el puerto de E/S
◼ El puerto de datos es: 378h
◼ Configuración de Bits y LEDs
◼ Para encender el ledn hay que escribir un byte con el
bitn-1 en 1
◼ Para apagar el ledn hay que escribir un byte con el
bitn-1 en 0
◼ Cuando se desea apagar o prender un solo led, sin
variar el estado de los demás, hay que mantener
El valor de cada bit
en una variable interna del programa el estado de
del puerto
los bits del puerto. ¿Por qué? determina si el led
◼ EL puerto de datos es de solo lectura se encenderá
o se apagará
14
Subsistema de E/S – Direccionamiento
◼ Sensando Switches
◼ Hay 5 switches conectados a los bits
del puerto de estados de la interfaz
paralelo
◼ El puerto de estados es: 379h
◼ Configuración de bits y switches A B D E
◼ Bit 7 – switch E C
◼ Bit 6 – switch D
◼ Bit 5 – switch C Los switches tienen
contactos de metal
◼ Bit 4 – switch B
accionados por una
◼ Bit 3 – switch A palanca con resortes
◼ Si un programa lee el puerto varias causando oscilaciones
veces a alta velocidad, el valor leído cuando pasa del estado
variará por un tiempo hasta que se abierto (no hace contacto)
a cerrado (hace contacto)
estabiliza (oscila).
15
Subsistema de E/S – Direccionamiento
◼ Estabilización en lectura de switches
◼ Simple:
◼ Escribir un ciclo que mire los valores del switch y ante el
primer cambio visto continúe fuera del ciclo
◼ Perder tiempo “suficiente” (un ciclo que hace nada) hasta
estar seguro que el switch paró de oscilar
◼ Adaptativa:
◼ En un ciclo se mira el switch hasta que haya un cambio
◼ Se establece un contador de ciclo a un valor inicial
◼ Repeat {
Mirar el switch
If el switch cambia de estado nuevamente
{ contador de ciclo = valor inicial
}else
{ decrementar el contador del ciclo
}
} until contador de ciclo == 0
16
Interrupciones por hardware
◼ Una interrupción es un procedimiento desencadenado por un
evento externo que produce una transferencia impredecible
del control de ejecución, desde el programa o rutina que es
interrumpida hacia otra rutina (denominada de atención de la
interrupción)
◼ Una interrupción se compone de 4 etapas
◼ Solicitud: a través de una señal asincrónica de entrada a la CPU
◼ Reconocimiento: dadas ciertas condiciones temporales y lógicas, la
CPU reconoce el pedido y comienza con la atención de la interrupción.
La transferencia del control de ejecución no es inmediata ni
incondicional. Se identifica al periférico solicitante a través de su
“Tipo=n”. Se obtiene la dirección de memoria donde está la rutina de
atención del periférico (ISRn = Interrupt Service Routine periférico n)
◼ Atención: se ejecuta la rutina de atención ISR
◼ Retorno: Finalizada la ejecución de la rutina de atención, se produce
el retorno del control de ejecución a la rutina que fue interrumpida,
permitiendo al micro continuar con la ejecución de la misma.
17
Interrupciones por hardware - Clasificación
◼ Interrupciones Enmascarables
◼ Una máscara de interrupción es un bit que condiciona el reconocimiento
de la interrupción
◼ Es la bandera o flag IF (Interrupt Flag)
◼ Si IF=0, la solicitud es ignorada. Si IF=1, el pedido es aceptado y se inicia el
ciclo de reconocimiento
◼ Las solicitudes se realizan a través de la señal INTR (Interrupt Request)
◼ Se censa en el último ciclo de reloj de la instrucción en curso
◼ Si es INTR=1, la CPU emite la señal !INTA o INTA=0 (Interrupt
Acknowledge)
◼ Cuando comienza la ejecución de la rutina de atención de la interrupción, IF
debe pasar a 0 hasta que la línea INTR pase a bajo. Sino fuera así, solo
llegaría a ejecutarse la primera instrucción de esta rutina y la CPU
comenzaría nuevamente con otro ciclo de reconocimiento.
◼ Como se leen 8 bits del tipo, hay 256 tipos distintos que pueden
atenderse
18
Interrupciones por hardware – CPU pinout
19
Interrupciones por hardware - Clasificación
21
Interrupciones por hardware – Anidamiento
22
Interrupciones por hardware – Anidamiento
23
Interrupciones por hardware – Anidamiento
24
Prioridades ante múltiples solicitudes de
interrupción – Gestión centralizada
◼ Interrupciones
◼ Aprovecha los recursos de la CPU de manera más eficiente. Se ejecuta el
main y se atienden a los periféricos solos si estos lo solicitan
◼ Cuando la CPU recibe un pedido de interrupción, finaliza la ejecución de la
instrucción en curso y comienza la ejecución de la rutina de atención de la
interrupción. Cuando finaliza esta rutina, el micro continúa donde había
dejado
◼ Atención interrupciones no enmascarables: 1 sola, la más prioritaria
◼ Atención interrupciones enmascarables: respetará prioridades 255 posibles
◼ Una vez reconocido el pedido, se individualiza al solicitante
◼ Se inicia un ciclo INTA, en donde se por lee el bus de datos un byte que
contiene el “tipo” de la interrupción solicitada. En el 8086, hay 256 tipos posibles
◼ Este número actúa como puntero dentro de una tabla o vector de interrupciones
(IVT = Interrupt Vector Table) que contiene a su vez los punteros a donde se
encuentra la rutina de atención para cada tipo. Cada entrada tiene 4 bytes, 2
pare el CS y 2 para el IP
◼ Por ejemplo, la interrupción 5 o type=05h, le corresponde el 6° vector de
interrupciones cuyos 4 bytes se ubican el las direcciones 00014 h a la 00017h.
26
Interrupciones – Vector de interrupciones
Clasificación Intel
• Dedicadas (tipos 00h a 04h): están
preestablecidas y son fijas.
• Reservadas (tipos 05h a 1Eh): no se
recomienda usar estos tipos porque
están reservados para futuras
ampliaciones del esquema de
interrupciones del procesador
(compatibilidad futura)
• Disponibles (tipos 1Fh a FFh): el
usuario dispone libremente su uso
para sus propias rutinas
27
Interrupciones – Vector de interrupciones
29
Interrupciones – Secuencia detallada
◼ Atención
◼ Comienza la ejecución de la Interrupt Service Routine (ISR) en la
dirección apuntada por el IVT y cargada en CS e IP
◼ Retorno
◼ Al ejecutar la instrucción Interrupt Return (IRET) se restablecen de
la pila los valores de los Flags, IP y CS guardados previamente
◼ Continúa la ejecución de la instrucción siguiente del programa
interrumpido (que estaba guardad en la pila)
30
Interrupciones – Tipos
◼ Pseudo-interrupciones
◼ Por software
◼ Por error
◼ Trampa (o Single Step)
31
Pseudo interrupciones por software
◼ Son instrucciones que provocan que la CPU ejecute alguna de las
rutinas de atención de interrupciones del “tipo” que se indique.
Finalizada la ejecución de la rutina de atención, la CPU continúa
ejecutando la instrucción posterior a la instrucción de interrupción
◼ No son interrupciones propiamente dichas ya que al ser instrucciones,
no son impredecibles
◼ Como son instrucciones, no respetan ningún esquema de
prioridades y se anidan siempre que se incluyan dentro de una
rutina de atención de interrupción. Obviamente no son enmascarables
◼ Estas instrucciones pueden usarse para transferir el control a rutinas
que son reubicables en memoria (en las que el programa que las llama
no conoce la dirección de inicio de las mismas)
◼ Guardan en la pila las banderas y el Program Counter (CS:IP)
◼ No ejecutan el ciclo de INTA, pero si inhiben Single Step y IF durante
su ejecución
32
Pseudo interrupciones por software
◼ Instrucción INT 3h
◼ La instrucción ocupa 1 byte de longitud
◼ Interrupción de Tipo=03h
◼ Se utiliza para insertar puntos de ruptura en rutinas que están siendo
depuradas
◼ Instrucción INT XXh
◼ Ejecuta el servicio de la interrupción del Tipo=XXh
◼ Ocupa dos bytes, uno para el código de operación y otro para el para el
dato del tipo
◼ Se pude usar para simular cualquier tipo de interrupción y para depuración
◼ ¿Cómo puede manejar varios servicios una rutina ISR?
◼ El tipo de servicio se pasa como parámetro
◼ Los parámetros se pasan por los registros, no por el stack
◼ El valor de retorno, depende del servicio invocado
33
Pseudo interrupciones por software
◼ Instrucción INTO (Interrupt On Overflow)
◼ Ocupa 1 byte
◼ Tipo=04h
◼ Interrumpe el programa si existe un overflow luego de una operación
indicado por la activación del flag OF (Overflow Flag)
◼ Si OF = 0 la instrucción no hace nada (se comporta como un NOP) y
retorna a la próxima instrucción del INTO
◼ Si OF=1 ejecuta la rutina que apunta el IVT en el vector 4
◼ Esta instrucción permite corregir errores en el caso de overflow
34
Pseudo interrupciones por software
◼ Funciones instalada por el DOS: (Int 21h)
◼ Imprimir un mensaje DS:DX = dir. Mensaje; AH = 9h
(parámetro)
◼ Salir AH = 4Ch
◼ Leer carácter de teclado AH = 1h retorna en AL el ASCII del
teclado
◼ Mostrar carácter en pantalla DL = caracter ASCII ; AH = 2h
◼ Imprimir carácter DL = caracter ASCII ; AH = 5h
◼ Servicios del BIOS
◼ Display (Int 10h)
◼ E/S a discos (Int 13h)
◼ Teclado (Int 16h) [Lectura AH=0h]
◼ Impresoras (Int 17h) para funciones de impresora
35
Pseudo interrupciones por error
◼ Se producen por lo general por un error de software
◼ No respetan esquema de prioridades
◼ En el 8086 hay solo una: “Tipo”=0 – Error al dividir
◼ Ocurre cuando se intenta dividir por 0
◼ La dirección de retorno de la rutina de atención de este tipo
apunta a la misma instrucción que se terminó de ejecutar antes de
producirse este error
◼ Permite corregir el error que provocó la interrupción en la rutina de
atención y volver a empezar
◼ No es enmascarable.
36
Pseudo Interrupciones de trampa (modo
paso-a-paso)
◼ Si el bit TF (Trap Flag) está ◼ Establecer el TF
activo, después de la ejecución PUSHF
de cada instrucción se produce POP AX
una interrupción “tipo”=1
◼ Al aceptar esta interrupción, se OR AX,0100h
borra el TF de manera de PUSH AX
ejecutar la rutina de atención en POPF
forma normal C : acarreo en la suma y arrastre en la resta
◼ Se usa para implementar una P : paridad del dato (0, impar y 1, par)
rutina para el monitoreo durante A : acarreo auxiliar o arrastre entre los bits 3 y 4
Z : indicación de resultado igual a cero
la depuración de programas S : indicador de signo del resultado. 0, positivo y 1, negativo
◼ Comienza a ejecutarse una T : trampa. Habilita la característica de depuración
instrucción después de que se I : habilitación de interrupciones de hardware
activó el bit TF D : selección de incremento o decremento en los índices
O : sobreflujo
◼ No es enmascarable
b15 b8 b7 b0
OD I T S Z A P C
0 1 0 0 37
Interrupciones autovectorizadas
Controlador de interrupciones
◼ Intel 8259A (PIC = Programmable Interrupt Controller)
◼ Amplía la estructura de interrupciones del 8086
◼ Es configurable y programable (asociación de tipos a dispositivos,
prioridades)
◼ Se lo considera como un dispositivo más del chipset
◼ Conectándolo 8 8259A en cascada (8+1) → maneja 64 interrupciones
◼ Durante el booteo, la BIOS programa el PIC maestro:
◼ IR0 a IR7 se mapean a los tipos de interrupciones 08h a 0Fh
38
Interrupciones autovectorizadas
Controlador de interrupciones Intel 8259A
39
Interrupciones autovectorizadas
Controlador de interrupciones Intel 8259A
◼ Prioridad de Interrupción
◼ Los dispositivos tienen asignados prioridades
◼ Los dispositivos con alta prioridad tiene precedencia sobre los de baja prioridad
◼ Las prioridades entran en juego cuando:
◼ Varias interrupciones suceden en el mismo tiempo
◼ Nuevas interrupciones ocurren mientras se está procesando la rutina ISR de
interrupciones previas
◼ El controlador de interrupciones hace cumplir las prioridades
◼ En PCs
◼ Los dispositivos tienen conexiones preconfiguradas hacia el controlador
◼ Timer siempre en IR0 y el teclado en IR1
◼ El DOS programa al 8259A para asignar prioridades basadas en las conexiones de los
dispositivos
◼ IR0== alta prioridad e IR7==baja prioridad El número mas bajo
tiene la prioridad
más alta
40
Interrupciones autovectorizadas
Controlador de interrupciones Intel 8259A
◼ Prioridad de Interrupción
◼ Que rutina ISR se ejecuta si dos interrupciones ocurren al mismo tiempo
42
Interrupciones autovectorizadas
Controlador de interrupciones Intel 8259A
◼ Interrupciones pendientes
◼ Se llama pendiente a una señal de interrupción que es almacenada en un
latch, pero no ha sido reconocida por el procesador
◼ Las interrupciones pueden estar pendientes en el controlador o en el dispositivo
◼ El Intel 8259 tiene un registro interno de 8 bits
◼ Un bit por cada entrada IR
◼ Cuando se enciende IR, el bit asociado a él se enciende
◼ Cuando la interrupción es reconocida, el bit asociado se apaga.
◼ El controlador puede recordar hasta una interrupción pendiente por IR
◼ Fin de Interrupción (EOI)
◼ Después de enviar una interrupción al procesador, el controlador necesita
saber cuando es seguro, generar una interrupción de menor prioridad
◼ Esto hace necesario tener un feedback desde la CPU
◼ Se envía un comando al controlador desde la CPU indicando el fin de interr.
◼ No es parte del ciclo INTA, no es hecho por el hardware
◼ Se trata de un comando software, que el programa debe enviar (ICW, OCW)
43
Interrupciones autovectorizadas
Controlador de interrupciones Intel 8259A
◼ Modelo del programador (Controlador de Interrupciones)
◼ El Controlador es un dispositivo de E/S → tiene una dir. de puerto de E/S
◼ Dos puertos de 8 bits cada uno
◼ Interrupt Mask Register (Puerto 21h) lectura/escritura
◼ Permite habilitar/deshabilitar interrupciones individuales en el controlador
◼ bit i = 1 IR i es enmascarado (no reconocido por el controlador)
◼ bit i = 0 IR i es habilitado (reconocido por el controlador)
◼ Diferencia entre mascara controlador (bit = 1) y CPU (IF=0)
◼ Command Register (Puerto 20h) escritura solamente
◼ Se escribe en 20h para informar al controlador que terminó la interrupción
◼ Modelo del programador (Teclado de PC)
◼ El teclado de PC usa interrupciones
◼ No puede usar polling por no tener puerto de estado
◼ Está conectado al IR1 del controlador, a través de la interfaz Paralela 8255.
◼ El 8255 Parallel Peripheral Interface tiene 2 puertos
◼ Data Port (Port PA) dir. E/S 60h
◼ Control Port (Port PB) dir. E/S 61h
44
Interrupciones de la BIOS
◼ Las Interrupciones de la BIOS
◼ INT 10h: Servicios de Vídeo (texto y gráficos).
◼ INT 11h: Informe sobre la configuración del equipo.
◼ INT 12h: Informe sobre el tamaño de la memoria convencional.
◼ INT 13h: Servicios de disco (muy elementales: pistas, sectores, etc.).
◼ INT 14h: Comunicaciones en serie.
◼ INT 15h: Funciones casette (PC) y servicios especiales del sistema (AT).
◼ INT 16h: Servicios de teclado.
◼ INT 17h: Servicios de impresora.
◼ INT 18h: Llamar a la ROM del BASIC (sólo máquinas IBM).
◼ INT 19h: Reinicialización del sistema.
◼ INT 1Ah: Servicios horarios.
◼ INT 1Fh: Apunta a la tabla de los caracteres ASCII 128-255 (8x8 puntos).
45
Interrupciones del DOS
◼ Las Funciones del DOS
◼ INT 20h: Terminar programa (tal vez en desuso).
◼ INT 21h: Servicios del DOS. (devuelve acarreo si hay error)
◼ INT 22h: Control de finalización de programas.
◼ INT 23h: Tratamiento de Ctrl-C.
◼ INT 24h: Tratamiento de errores críticos.
◼ INT 25h: Lectura absoluta de disco (sectores lógicos).
◼ INT 26h: Escritura absoluta en disco (sectores lógicos).
◼ INT 27h: Terminar dejando residente el programa (en desuso).
◼ INT 28h: Idle (ejecutada cuando el ordenador está inactivo).
◼ INT 29h: Impresión rápida en pantalla (no tanto).
◼ INT 2Ah: Red local MS NET.
◼ INT 2Bh-2Dh: Uso interno del DOS.
◼ INT 2Eh: Procesos Batch.
◼ INT 2Fh: Interrupción Multiplex.
◼ INT 30h-31h: Compatibilidad CP/M-80.
◼ INT 32h: Reservada. 46
Acceso Directo a Memoria (DMA)
◼ Es una técnica que permite a los periféricos realizar
transferencias sobre la memoria sin la intervención de la
CPU (ésta continúa haciendo otras tareas)
◼ En el momento en que el DMA realiza las transferencias, la
CPU se desconecta de los buses (3-state) y cede el control
◼ Esta “petición de buses” y control es recibida por la CPU
en el pin HOLD y concede la operación a través del pin
HOLDA (HOLD Acknowledge) una vez terminado el ciclo de
bus en curso
◼ El dispositivo que controla los buses se lo denomina
“Master” y el que es controlado, “Slave”. En este caso, la
CPU deja de ser el Master de los buses
47
Acceso Directo a Memoria (DMA)
◼ DMAC 8237A (DMA Controller)
◼ Posee 4 canales programables en 3 modos diferentes y cada modo
en 3 tipos de transferencia
◼ Permite transferencias “memoria-a-memoria”
◼ Direccionamiento por incrementos / decrementos
◼ Hasta 1.6Mb/s
◼ Expandible a n canales DMA
◼ Señales principales
◼ HRQ (DMAC) → CPU (HOLD): solicitud de buses a la CPU
◼ HLDA (DMAC) CPU (HOLDA): aceptación de la CPU
◼ DREQn (DMAC) Dispositivo : solicitud de acceso DMA
◼ DACKn (DMAC) → Dispositivo : otorgamiento del servicio DMA
48
Acceso Directo a Memoria (DMA) Controlador
de DMA Intel 8237A
DREQn
DACKn
HOLDA HOLD HRQ HLDA
49
Acceso Directo a Memoria (DMA) Controlador
de DMA Intel 8237A
◼ Modos de operación
◼ Modo Simple (Single Transfer Mode): se realiza una única
transferencia y se asegura que la CPU complete un ciclo antes de
realizar una nueva transferencia
◼ El “rollover” del Terminal Count (de 0000h a FFFFh) indica el fin de la
transferencia. En este momento, se genera un pulso en End-of-
Process (!EOP), pin bidireccional
◼ Modo En Bloques (Block Transfer Mode): Se realizan transferencias
de bloques hasta el rollover del TC o hasta que se detecte un EOP
externo
◼ Modo A Demanda (Demand Transfer Mode): La transferencia se
realiza mientras DREQ permanece activo o hasta el rollover del TC
o un EOP externo. Se pueden realizar todas las transferencias
necesarias hasta agotar las posibilidades del dispositivo
50
Acceso Directo a Memoria (DMA) Controlador
de DMA Intel 8237A
◼ Conexión en Cascada (Cascade Mode)
◼ Permite la interconexión de más de un 8237A. Permite la
propagación de señales de petición y su correspondiente
prioridad.
51
Acceso Directo a Memoria (DMA) Controlador
de DMA Intel 8237A
◼ Tipos de transferencias
◼ Lectura (Read): Movimiento de datos desde la memoria a la E/S
◼ Escritura (Write): Movimiento de datos desde la E/S a la memoria
◼ Verificación (Verify): Se generan direcciones pero no se utilizan las
señales de control (son pseudo-transferencias)
◼ Transferencia Memoria-a-Memoria
◼ Se emplean los canales 0 y 1
◼ Se realiza un pedido de DMA normal
◼ Por canal 0 y se lee dato desde la memoria y se guarda en el 8237A
◼ Por canal 1 se escribe en la memoria el dato guardado en el 8237A
◼ Autoinicialización
◼ Se restablecen los registros internos a los valores predeterminados
52
Acceso Directo a Memoria (DMA) Controlador
de DMA Intel 8237A
◼ Prioridades
◼ Fija: Canal 0 = máxima, Canal 3 = mínima
◼ Rotativa: El último canal servido es el de menor prioridad (evita
monopolizar la atención)
◼ Generación de direcciones
◼ Tiene multiplexada la parte alta del bus de direcciones
◼ Los 8 bits más significativos de la dirección son guardados en un
latch externo a través del bus de datos (señal AEN, Address
Enable)
◼ Registros
◼ Current Address, Current Word, Base Address y Base Word Count,
Command, Mode, Request, Mask, Status, Temporary
53
Acceso Directo a Memoria (DMA)
◼ Control de transferencias en el bus del 8086
◼ Modo mínimo: señales
◼ HOLD y HOLDA
◼ M/!IO → Indica direccionamiento a MP o E/S
◼ DT/!R → Indica Transmisión / Recepción de datos
◼ !DEN → Habilita el buffer de datos 8286/7
◼ MN/!MX → es “1” (Minimum Mode)
54
Acceso Directo a Memoria (DMA)
◼ Control de transferencias en el bus del 8086
◼ Modo máximo
◼ Para conectar un coprocesador Intel 8087
◼ Se utilizan: controlador de buses Intel I8288
◼ RQ (ReQuest) y GT (GranT)
◼ MN/!MX = “0” (Maximum Mode)
◼ !RQ0/!GT0, !RQ1/!GT1 → Utilizados para solicitar al la S2 S1 S0 Significado
liberación de los buses al finalizar el ciclo de bus en 0 0 0 Ciclo INTA
0 0 1 Lectura E/S
curso 0 1 0 Escritura E/S
0 1 1 Halt
◼ El 8288 usa las señales !S0, !S1 y !S2 1 0 0 Operand fetch
◼ Los COP iniciados con 11011b indicarán instrucciones 1 0 1 Lectura MP
1 1 0 Escritura MP
para el coprocesador 1 1 1 Estado pasivo
◼ Cuando el 8087 ejecuta una instrucción, pone su pin
“BUSY” en “1”, cuando termina lo pasa a “0”
◼ El pin BUSY del 8087 está conectado con el TEST del
8086/8. El MAIN deberá ejecutará la instrucción WAIT
para esperar el resultado del coprocesador.
55
Acceso Directo a Memoria (DMA)
8086 – Microprocessor
8087 – Math coprocessor
8282 – Octal latch
8284 – Clock generator and driver
8288 – Bus controller
8286 – Bus transceiver
56
Acceso Directo a Memoria (DMA)
57
Cronómetros (Hardware)
◼ Reloj / Cronómetro basado en hardware
◼ El computador incluye hardware dedicado para manejar el tiempo
◼ Se lo puede considerar como un dispositivo externo desde el punto de
vista del programador
58
Cronómetros (Hardware)
Temporizador programable por intervalos Intel 8253
59
Cronómetros (Hardware)
Temporizador programable por intervalos Intel 8253
62
Lista de Interrupciones
◼ Las cinco Interrupciones dedicadas (0 a 4)
◼ Interrupción 0 (división por cero)
◼ Invocada por la CPU después de un DIV o IDIV, si el divisor es 0 o el resultado
no entra en el destino
◼ Interrupción 1 (paso a paso)
◼ Usado por los debuggers para soportar pasos simples
◼ Interrupción 2 (no enmascarable)
◼ Interrupciones x hardware que no puede ser deshabilitada
◼ Interrupción 3 (breakpoint)
◼ Usado por los debuggers para establecer puntos de detención en el programa
◼ Interrupción 4 (overflow)
◼ Usado en librerías numéricas para atrapar errores de overflow
63
Lista de Interrupciones
◼ Las Interrupciones de Hardware
◼ INT 8h: Se produce con una frecuencia periódica determinada por el IR0
del chip temporizador 8253/8254 (en la práctica, unas 18,2 veces por
segundo).
◼ INT 9h: Generada al pulsar o soltar una tecla
◼ INT 0Ah, 0Bh, 0Ch, 0Dh, 0Eh, 0Fh: Puertos serie, impresora y
controladores de disquete
◼ INT 70h, 71h, 72h, 73h, 74h, 75h, 76h, 77h: Generadas en los ATs y
maquinas superiores por el segundo chip controlador de interrupciones.
64