MICROPROCESADORES Y MICROORDENADORES - dsi… · simple de la línea permite conocer muchos de los...

136
MICROPROCESADORES Y MICROORDENADORES Página 1 de 136 Versión del 29/08/a MICROPROCESADORES Y MICROORDENADORES CATEDRA: DIGITAL II DEPARTAMENTO DE SISTEMAS INGENIERIA ELECTRONICA AUTOR: ING. ENRIQUE GIANDOMENICO AÑO: 1998

Transcript of MICROPROCESADORES Y MICROORDENADORES - dsi… · simple de la línea permite conocer muchos de los...

MICROPROCESADORES Y MICROORDENADORES Página 1 de 136 Versión del 29/08/a

MICROPROCESADORES Y

MICROORDENADORES

CATEDRA: DIGITAL II DEPARTAMENTO DE SISTEMAS INGENIERIA ELECTRONICA AUTOR: ING. ENRIQUE GIANDOMENICO AÑO: 1998

MICROPROCESADORES Y MICROORDENADORES Página 2 de 136 Versión del 29/08/a

MICROPROCESADORES Y............................................................................1

MICROORDENADORES .................................................................................1

1. DESCRIPCION GENERAL.............................................................................................................5

2. CASOS PARTICULARES................................................................................................................5 2.1. INTEL 80186 ................................................................................................................................................................5 2.2. MOTOROLA MC68HC11 .........................................................................................................................................6 2.3. INTEL 8051 ..................................................................................................................................................................6

3. INTEL 80186 PROCESADOR DE INSTRUCCIONES. .............................................................7 3.1. UNIDAD DE EJ ECUCIÓN DE INSTRUCCIONES(EU).....................................................................................7

3.1.1. REGISTROS DE USOS GENERALES: .........................................................................................................................................................7 3.2. UNIDAD DE INTERFACES CON EL BUS (BIU) ................................................................................................9 3.3. ACCESO AL ESPACIO DE MEMORIA................................................................................................................9

3.3.1. IMPLEMENTACIÓN DEL STACK .............................................................................................................................................................11 3.4. ACCESO AL ESPACIO DE ENTRADA/SALIDA............................................................................................. 11

4. CONJUNTO DE INSTRUCCIONES ...........................................................................................12

5. INSTRUCCIONES A NIVEL ASSEMBLER..............................................................................12 5.1. INSTRUCCIONES DE MOVIMIENTO DE DATOS........................................................................................ 13 5.2. INSTRUCCIONES MATEMATICAS.................................................................................................................. 16

5.2.1. ADICION............................................................................................................................................................................................................16 5.2.2. SUBTRACCION ...............................................................................................................................................................................................18 5.2.3. MULTIPLICACION ........................................................................................................................................................................................21 5.2.4. DIVISION...........................................................................................................................................................................................................23

5.3. INSTRUCCIONES DE TRANSFERENCIAS..................................................................................................... 26 5.3.1. TRANSFERENCIAS CONDICIONALES ...................................................................................................................................................26

5.3.1.1. INTERPRETACION DE LOS CODIGOS DE TRANSFERENCIAS CONDICIONALES....................................................29 5.3.2. TRANSFERENCIAS INCONDICIONALES ...............................................................................................................................................31

5.4. CONTROL DE ITERACCIONES......................................................................................................................... 32 5.5. INTERRUPCIONES................................................................................................................................................ 33 5.6. INSTRUCCIONES DE MANIPULACION DE BITS ........................................................................................ 34 5.7. INSTRUCCIONES DE CONTROL DEL PROCESADOR .............................................................................. 38

5.7.1. OPERACIONES CON FLAGS ......................................................................................................................................................................38 5.7.2. OPERACIONES DE SINCRONIZACION EXTERNA.............................................................................................................................39 5.7.3. NO OPERACION..............................................................................................................................................................................................39

6. DIRECCIONAMIENTO DE MEMORIA ...................................................................................40

7. UNIDAD DE INTERFACES DEL BUS (BUS INTERFACE UNIT­ BIU).............................42 7.1. CICLO DE BUS (BUS CYCLE)............................................................................................................................. 43 7.2. TIEMPOS DEL CICLO DE BUS PARA UNA LECTURA .............................................................................. 47

7.2.1. AISLANDO EL DATA BUS CON UN BUFFER. BUFFERING THE DATA BUS ..............................................................................48 7.3. TIEMPOS DEL CICLO DE BUS PARA UNA GRABACION......................................................................... 50 DEFINICION DE LOS VALORES DE LA HOJA DE ESPECIFICACIONES................................................... 52 7.5. EJEMPLO DE ANALISIS DE LOS TIEMPOS.................................................................................................. 54

8. BLOCK DE CONTROL DE PERIFERICOS (PCB). ................................................................57

MICROPROCESADORES Y MICROORDENADORES Página 3 de 136 Versión del 29/08/a

9. UNIDAD SELECTORA DE CHIPS. CHIP SELECT UNIT (CSU)........................................59 9.1. DECRIPCION FUNCIONAL................................................................................................................................. 59 9.2. RESGISTROS DE CONTROL DE LA CSU ....................................................................................................... 61

10. UNIDAD DE CONTROL DE INTERRUPCIONES (ICU).....................................................63 10.1. DESCRIPCION FUNCIONAL ............................................................................................................................ 63 10.2. PRIORIDADES Y ENMASCARAMIENTOS................................................................................................... 63 10.3. ARQUITECTURA DEL 8259A ........................................................................................................................... 64

10.3.1. SECUENCIA TIPICA EN EL PROCESO DE INTERRUPCIONES....................................................................................................65 10.4. ACTIVACION DE LA SEÑAL INT ................................................................................................................... 66

10.4.1. ESQUEMA DE PRIORIDADES ..................................................................................................................................................................66 10.4.2. MODO DE OPERACIÓN .............................................................................................................................................................................67 10.4.3. ESTADO DE LOS BITS DEL IRR, ISR Y IMR .......................................................................................................................................67

10.5. BLANQUEO DEL BIT EN EL INTERRUP SERVICE REGISTER............................................................ 67 10.6. CONECCION EN CASCADA DEL 8259A........................................................................................................ 68 10.7. ESQUEMA DE LA UNIDAD DE CONTROL DE INTERRUPCIONES EN EL 8259A........................... 70 10.8. PROGRAMANDO EL MODULO 8259A .......................................................................................................... 71

10.8.1. REGISTROS DE CONTROL Y COMANDOS DEL 8259A ...................................................................................................................71 10.8.2. SECUENCIA DE INICIALIZACION.........................................................................................................................................................71

10.8.2.1. ICW1 ..............................................................................................................................................................................................72 10.8.2.2. ICW2 ..............................................................................................................................................................................................72 10.8.2.3. ICW3 ..............................................................................................................................................................................................72 10.8.2.4. ICW4 ..............................................................................................................................................................................................73

10.8.3. COMANDOS DE OPERACIÓN ..................................................................................................................................................................73 10.8.3.1. OCW1.............................................................................................................................................................................................73 10.8.3.2. OCW2.............................................................................................................................................................................................73 10.8.3.3. OCW3.............................................................................................................................................................................................73

10.8.4. FUENTES DE INTERRUPCION INTERNAS..........................................................................................................................................74 10.9. EJ EMPLOS DE PROGRAMAS.......................................................................................................................... 75 10.10. EXPANDIENDO LA CANTIDAD DE SEÑALES DE INTERRUPCION............................................... 77

11. UNIDAD TEMPORIZADORA Y DE CONTADORES. .........................................................79 11.1. DESCRIPCION FUNCIONAL. ........................................................................................................................... 79 11.2. DIAGRAMA OPERACIONAL............................................................................................................................ 80 11.3. REGISTROS ASOCIADOS A CADA CONTADOR O TIMER.................................................................... 82 11.4. PROGRAMACION DE LA UNIDAD TEMPORIZADORA Y DE CONTADORES................................ 83 11.5. COMENTARIOS ADICIONALES ..................................................................................................................... 83

11.5.1. FUENTES PARA LA OBTENCION DEL CLOCK DE LOS CONTADORES. .................................................................................83 11.5.2. MODOS DE OPERACIÓN DE LOS CONTADORES ............................................................................................................................83 11.5.3. RE – INICIALIZACION. ..............................................................................................................................................................................84 11.5.4. ONDAS RECTANGULARES Y UN – DISPARO.....................................................................................................................................84 11.5.5. HABILITANDO Y DESHABILITANDO LOS CONTARORES. ..........................................................................................................85 11.5.6. INTERRUPCIONES ......................................................................................................................................................................................85 11.5.7. TIEMPOS DE SETUP Y RETENCION DE LAS SEÑALES DE ENTRADA.....................................................................................85

11.6. EJ EMPLOS ............................................................................................................................................................. 85 11.6.1. IMPLEMENTACION DE UN RELOJ .......................................................................................................................................................85

11.6.1.1. DESCRIPCION GENERAL.........................................................................................................................................................85 11.6.1.2. PROGRAMA.................................................................................................................................................................................87

11.6.2. GENERAR UNA ONDA RECTANGULAR. .............................................................................................................................................90

12. PREGUNTAS, PROBLEMAS Y ALGUNAS SOLUCIONES ...............................................92

TRANSFERENCIAS DE INFORMACION ENTRE EL MICRO Y EL MEDIO AMBIENTE ...................................................................................................106

1. INTERFACES PARALELA........................................................................................................ 106 1.1. PORTS PARALELOS EN EL 80186 .................................................................................................................. 108 1.2. NOTA ESPECIAL.................................................................................................................................................. 110

MICROPROCESADORES Y MICROORDENADORES Página 4 de 136 Versión del 29/08/a

2. INTERFACE SERIE .................................................................................................................... 111 2.1. ESTUDIO DE UN CASO PARTICULAR.......................................................................................................... 111

2.1.1. CASO CON RUIDO EJEMPLO N° 1 .........................................................................................................................................................113 2.1.2. CASO CON RUIDO EJEMPLO N° 2 .........................................................................................................................................................113 2.1.3. CASO DE ERROR EJEMPLO N° 3............................................................................................................................................................114 2.1.4. CASO DE ERROR EJEMPLO N°4.............................................................................................................................................................115 2.1.5. CASO DE ERROR EJEMPLO N° 5............................................................................................................................................................115 2.1.6. CASO DE ERROR EJEMPLO N°6.............................................................................................................................................................115

2.2. DESVIACIONES ADMISIBLES EN LAS VELOCIDADES DE TRANSMICION................................... 116 2.2.1. VELOCIDAD DE TRANSMISION MENOR A LA ASUMIDA ............................................................................................................116 2.2.2. VELOCIDAD DE TRANSMICION SUPERIOR A LA ASUMIDA......................................................................................................117

2.3. TRANSMICION SERIAL EN EL 80186............................................................................................................ 118 2.4. MODALIDADES DE TRANSMICION SERIE ................................................................................................ 118

2.4.1. MODOS 1, 3 Y 4 ..............................................................................................................................................................................................118 2.4.2. MODO 2............................................................................................................................................................................................................119 2.4.3. MODO 0............................................................................................................................................................................................................119 2.4.4. VARIACIONES DE LOS MODOS..............................................................................................................................................................119

2.5. PROGRAMACION DE LA UNIDAD SERIE DEL 80186.............................................................................. 120 2.5.1. EJEMPLOS DE VALORES PARA BXCMP .............................................................................................................................................121 2.5.2. PROGRAMANDO EL MODO 0..................................................................................................................................................................122 2.5.3. PROGRAMANDO LOS MODOS 1 A 4......................................................................................................................................................123

2.6. EJEMPLOS DE PROGRAMAS.......................................................................................................................... 123 2.6.1. PROGRAMA USANDO EL MODO 0 ........................................................................................................................................................123

2.7. EJEMPLO DE TRANSMICION EN MODO 4 ................................................................................................. 125 2.8. PROGRAMA USANDO EL MODO 4................................................................................................................ 125

3. ACCESO DIRECTO A MEMORIA (DMA) ............................................................................ 127 3.1. DESCRIPCION GENERAL ................................................................................................................................. 127 3.2. TRANSFERENCIA DE DATOS VIA DMA EN EL 80186 ............................................................................. 127 3.3. TIPOS DE REQUERIMIENTOS DMA ............................................................................................................. 128

3.3.1. REQUERIMIENTOS EXTERNOS .............................................................................................................................................................128 3.3.2. REQUERIMIENTOS INTERNOS ..............................................................................................................................................................129

3.3.2.1. TRANSFERENCIAS CONTROLADAS POR TIME2.............................................................................................................129 3.3.2.2. TRANSFERENCIAS CONTROLADAS POR LA UNIDAD SERIE .....................................................................................130 3.3.2.3. TRANSFERENCIAS CONTROLADAS POR SOFTWARE ..................................................................................................130

3.4. TERMINACION Y SUSPENCIONES DE TRANSFERENCIAS DMA....................................................... 130 3.5. INTERRUPCIONES GENERADAS POR LA UNIDAD DMA ..................................................................... 130 3.6. ORGANIZACIÓN DE LOS CANALES DMA.................................................................................................. 130 3.7. PROGRAMANDO LA UNIDAD DMA.............................................................................................................. 132

3.7.1. SECUENCIA CORRECTA PARA LA PROGRAMACION DEL DMA..............................................................................................134 3.7.2. UTILIZACION DE LA UNIDAD DMA CON LOS PUERTOS DE COMUNICACIÓN SERIE.....................................................134

3.7.2.1. EJEMPLO 1. PUERTO SERIE 0 EN RECEPCIÓN .................................................................................................................134

APENDICE A. PRECIOS APROXIMADOS................................................136

MICROPROCESADORES Y MICROORDENADORES Página 5 de 136 Versión del 29/08/a

Procesador De Instrucciones

Generador De Clock

Unidad Selecto­ ra de Periféri­ cos

Unidad de Control De Interrupciones

Unidad Con­ troladora de Relojes

Unidad de Accesos Directos a Memoria

Unidad de En­ trada/Salida Serial

Unidad de En­ trada/Salida Paralelo

1. DESCRIPCION GENERAL

Luego de haber estudiado una estructura posible de una unidad procesador de instrucciones teórica se presentará ahora un procesador real. Primero se realizará la siguiente clasificación.

Microprocesador: Unidad con capacidad de ejecutar instrucciones. Generalmente no incluye me­ morias ni dispositivos adicionales.

Microcontrolador: microprocesador más memorias de distintos tipos (RAM, ROM, EPROM, EE­ PROM, FLASH, etc.) y dispositivos varios (Unidad controladora de interrup­ ciones, unidades de entrada y salida serie y/o paralelo, unidades convertidores analógicas/digitales y viceversa, etc.)

Otro enfoque permite clasificarlos en: Dispositivos para aplicaciones industriales: generalmente son microcontroladores con gran varie­ dad de dispositivos integrados pero con longitud de palabra relativamente corta(8 bits). Dispositivos orientados a aplicaciones de procesamiento de datos en general, menor variedad de dispositivos integrados, mayor longitud de palabra (16, 32, 64 bits). Se estudiará en este apunte el microprocesador de INTEL 80186 el cual se ubica en una posición intermedia. Por un lado su arquitectura es la base para todos los procesadores de la línea INTEL (80286, 80386, 80486, 80586, PENTIUM, PENTIUM II, etc.) y por otro lado dado que es el más simple de la línea permite conocer muchos de los principios básicos utilizados en los microcontro­ ladores dedicados a aplicaciones de tipo industrial.

2. CASOS PARTICULARES 2.1. INTEL 80186

El esquema general del 80186 se muestra en la siguiente figura:

Características Generales:

v Bus de Direcciones: 20 Bits

v Bus de Datos 16 Bits

v Todas las memorias son externas

MICROPROCESADORES Y MICROORDENADORES Página 6 de 136 Versión del 29/08/a

2.2. MOTOROLA MC68HC11

Características Generales:

v Bus de Direcciones: 16 Bits

v Bus de Datos 8 Bits

v La presencia y tamaño de los distintos tipos de memoria varía según los distintos modelos del HC11.

2.3. INTEL 8051

Características Generales:

v Bus de Direcciones: 16 Bits

v Bus de Datos 8 Bits

v 5 Niveles de interrupciones

Procesador De Instrucciones

Generador De Clock

Unidad de Control De Interrupciones Y Relojes

Unidad de En­ trada/Salida Pa­ ralelo 32 Bits

RAM 128 By­

ROM 4 KBy­

Unidad de En­ trada/Salida Asincrónica Serial

Procesador De Instrucciones

Generador De Clock

ROM 8Kbytes

Unidad de Control De Interrupciones

Unidad Con­ troladora de Relojes

Unidad de En­ trada/Salida Asincrónica Serial

Unidad de En­ trada/Salida Paralelo

RAM 256 By­

EPROM 512 Bytes

Unidad de En­ trada/Salida Asincrónica Serial

Unidad convertidor Digital ­ Analógica

MICROPROCESADORES Y MICROORDENADORES Página 7 de 136 Versión del 29/08/a

3. INTEL 80186 PROCESADOR DE INSTRUCCIONES. Está compuesto por dos unidades: Ejecución: ejecuta las instrucciones que va solicitando a la cola de pre­carga. Bus Interfaces Unit (BUI) carga las instrucciones a la cola de pre­carga, lee los operandos, graba los resultados. Estas unidades pueden operar independientemente y en ciertas circunstancias pueden superponerse la carga de instrucciones con la ejecución de otras. La figura siguiente muestra el esquema general de ambas unidades:

3.1. UNIDAD DE EJECUCIÓN DE INSTRUCCIONES(EU) 3.1.1. REGISTROS DE USOS GENERALES: A, B, C, D, SP, BP, SI, DI todos de 16 Bits. Los registros A, B, C, D admiten ser accedidos totalmente (16 Bits) o parcialmente (8 Bits). En este ultimo caso las letras H y L, siguiendo al nombre del registro, identifican los 8 bits mas o menos representativos respectivamente. En el caso de acceder al registro completo se agrega al nombre la letra x. AX 16 Bits. BL últimos 8 bits. CH primeros 8 bits.

MICROPROCESADORES Y MICROORDENADORES Página 8 de 136 Versión del 29/08/a

La Unidad Aritmética Y Lógica (ALU) realiza las operaciones. Puede utilizar operandos de 8 o de 16 Bits.

FLAGS: es un registro de 16 bits, cada uno de los cuales representa una determinada condición.

La figura siguiente muestra el significado de cada uno de los bits del registro FLAGS, que también recibe el nombre de PSW (Program Status Word)

La unidad de ejecución (EU) no se conecta directamente con el bus externo, solo puede hacerlo vía la BIU. Las instrucciones que debe ir cargando para su ejecución nunca provienen directamente de la me­ moria sino que son cargadas desde la cola de pre­carga.

MICROPROCESADORES Y MICROORDENADORES Página 9 de 136 Versión del 29/08/a

3.2. UNIDAD DE INTERFACES CON EL BUS (BIU) Esta unidad consiste de: 4 registros de segmentos CS, DS, SS, ES. 1 registro de contador de programa (instrucción pointer). 1 unidad de suma para el cálculo de direcciones. 1 cola de pre­carga de instrucciones. registros auxiliares.

3.3. ACCESO AL ESPACIO DE MEMORIA Toda dirección física (20 Bits) es calculada por la BIU considerando dos valores: SEGMENTO y OFFSET o DESPLAZAMIENTO. Cada uno de ellos es de 16 bits pudiendo por lo tanto asumir valores entre 0 y 65535. La relación es:

Dirección Física = (16 * SEGMENTO) + DESPLAZAMIEBTO despreciándose el acarreo si lo hubiese.

Al conjunto SEGMENTO, DESPLAZAMIENTO se lo denomina Dirección Lógica y se lo representa por los dos valores separados por dos puntos. Ej. AF4C:28B9. El espacio total de direcciones de memoria (20 bits­­­1 Mbytes) es dividido entonces en segmentos de 64 KBytes cada uno. El BIU puede acceder en un determinado momento simultáneamente a cuatro segmentos distintos vía los registros CS, DS, SS, ES. El uso standard, pero no obligatorio, es el siguiente: CS segmento de código (es el que almacena el programa). DS segmento de datos. SS segmento del STACK. ES segmento extra o para usos adicionales (extended segment). La figura muestra un caso particular:

Direcciones Espacio de direcciones Contenido de los Rango de direcciones Físicas de Memoria registros de cubierto

segmentos FFFFF

F0000

F000 CS F000:FFFF=FFFFF=1.048.575 941FF F000:0000=F0000= 983.040

84200 8420 DS 8420:0000=84200= 541.184

3FFFF 8420:FFFF=941FF= 606.719

30000 3000 SS 3000:0000=30000= 196.608 3000:FFFF=3FFFF= 262.143

101BF

MICROPROCESADORES Y MICROORDENADORES Página 10 de 136 Versión del 29/08/a

001C0 00000 001C ES 001C:0000=001C0= 448

001C:FFFF=101BF= 65.983

Si se deseara acceder a una dirección física fuera de los entornos habilitados es necesario modificar el contenido de alguno de los registros de segmento de forma tal que la dirección requerida se ubi­ que dentro de las 65.535 nuevas direcciones que se habiliten. Dada la formula de cálculo de la dirección física se puede concluir:

Todo segmento comienza en una dirección física múltiplo de 16. En hexadecimal su dígito menos significativo debe ser cero.

Para una dirección física determinada existen muchos conjuntos SEGMETO:DESPLAZAMIENTO que la satisfacen. Ejemplo: Dirección Física Segmento DESPLAZAMIENTO

B540 0008 B53F 0018 Son 1000h = B530 0028 4.096d

B5408 . . . . . . . . . valores B440 0108 distintos . . . . . . . . A640 F008 A541 FFF8

Se define como dirección lógica normalizada aquella que corresponde al valor de DESPLAZA­ MIENTO más pequeño. La dirección lógica normalizada es única para cada dirección física. La BIU siempre accede a memoria indicando la dirección física, los programadores siempre hacen referencia a direcciones lógicas. El segmento puede indicarse en forma explícita o en forma implí­ cita. Si no se indicara, cada tipo de instrucción de la tabla siguiente indica cual es el SEGMENTO por default que se usará

TIPO DE MEMORIA REFERENCIADO SEGMENTO BASE DEFAULT Carga de Instrucciones CS Operación sobre el STACK SS Variables DS Fuente en operaciones de Strings DS Destino en operaciones de Strings ES Si aparece BP como parte del DESPLAZAMIENTO SS

Esta forma de direccionar permite la reubicación dinámica de segmentos dentro del espacio de di­ recciones muy fácilmente.

MICROPROCESADORES Y MICROORDENADORES Página 11 de 136 Versión del 29/08/a

Si en un determinado momento la situación es la mostrada en la figura de la izquierda, cambiando el contenido de cada uno de los registros de segmento y reubicando los segmentos el esquema que­ daría como el mostrado en la figura de la derecha.

CS CS

DS DS

SS SS

3.3.1. IMPLEMENTACIÓN DEL STACK El STACK reside en el espacio de memoria. Al comienzo, ya se verá como, el registro SS apunta al segmento donde reside el STACK y el registro SP contiene el DESPLAZAMIENTO de la ultima posición correspondiente al STACK. Es decir que el STACK ocupará el espacio de memoria com­ prendido entre las direcciones SS:0000 y SS:SP. Existen dos instrucciones que administran el STACK: POP y PUSH.

PUSH, reg. coloca el contenido del registro indicado en el STACK. POP, reg. recupera del STACK el último dato ingresado y lo coloca en el registro indicado.

El dato a guardar y recuperar es siempre de 16 bits. La instrucción PUSH decrementa el SP en 2 unidades y almacena el contenido del registro en la di­ rección SS:SP. La instrucción POP almacena en el registro lo que se recupera de la dirección SS:SP y luego incre­ menta en dos unidades el contenido de SP. Es importante destacar que la instrucción POP no borra o blanquea el contenido de la dirección de memoria leída. Ella solo actualiza la dirección apuntada por SP. Por otro lado el sistema no contro­ la que sucesivos PUSH decrementen SP mas allá del valor cero, como se ignora el bit de “presta­ do” 0000 menos 2 será simplemente FFFE. Tampoco se controla que algún POP lleve el valor de SP por encima de su valor original, sobrepasando el área de memoria asignada originalmente al STACK.

3.4. ACCESO AL ESPACIO DE ENTRADA/SALIDA. En el micro 80186 existe también un espacio de direcciones validos, adicionales al de memoria, cuyo rango va de 0000 a FFFF(64 Kbytes). Pues solo se usan 16 bits para direccionarlo).

MICROPROCESADORES Y MICROORDENADORES Página 12 de 136 Versión del 29/08/a

Un bit de control independiente especifica si una dirección corresponde al espacio de E/S o al espa­ cio de memoria. Existen instrucciones especificas para acceder al espacio de E/S: IN reg, DIRECCION Lee el contenido del espacio de direcciones de E/S direccionado por

DIRECCION y coloca el dato en el reg. Especificado. IN reg, DX Lee el contenido del espacio de direcciones de E/S direccionado por el

contenido del registro DX y coloca el dato en el reg. especificado OUT DIRECCION, reg Graba el contenido del reg. Especificado en la dirección indicada por

DIRECCION del espacio de E/S OUT DX; reg. Graba el contenido del reg especificado en la dirección apuntada por el

contenido de DX del espacio de E/S.

DIRECCION: constante binaria de 8 bits

4. CONJUNTO DE INSTRUCCIONES

El conjunto de instrucciones puede pensarse en dos niveles diferentes. En el nivel del assembler el mnemotécnico de la instrucción define la operación y luego el o los operandos se especifican usando algunas de las notaciones aceptadas.

Por ejemplo MOV AX, 01234h moverá el número hexadecimal 1234 de 16 bits al registro AX.

MOV AX, BX moverá el contenido de BX a AX MOV AX, Var1 moverá el contenido de la dirección correspondiente a

Var1 a AX En el nivel de maquina una instrucción especifica la totalidad de los datos que se requieren para que pueda ser ejecutada. La instrucción de assembler MOV puede generar 28 instrucciones diferentes del nivel de maquina según como se especifiquen los operandos que en ella participen. Las instrucciones a nivel de maquina no son todas de igual longitud. Las hay desde de un byte hasta de cinco bytes. En el nivel del assembler existen aproximadamente 100 instrucciones, mientras que en el nivel de maquina son mas de trescientas.

5. INSTRUCCIONES A NIVEL ASSEMBLER. Para una mejor organización se las ha agrupado funcionalmente en cinco grupos:

MICROPROCESADORES Y MICROORDENADORES Página 13 de 136 Versión del 29/08/a

5.1. INSTRUCCIONES DE MOVIMIENTO DE DATOS

MICROPROCESADORES Y MICROORDENADORES Página 14 de 136 Versión del 29/08/a

MICROPROCESADORES Y MICROORDENADORES Página 15 de 136 Versión del 29/08/a

MICROPROCESADORES Y MICROORDENADORES Página 16 de 136 Versión del 29/08/a

5.2. INSTRUCCIONES MATEMATICAS 5.2.1. ADICION

MICROPROCESADORES Y MICROORDENADORES Página 17 de 136 Versión del 29/08/a

MICROPROCESADORES Y MICROORDENADORES Página 18 de 136 Versión del 29/08/a

5.2.2. SUBTRACCION

MICROPROCESADORES Y MICROORDENADORES Página 19 de 136 Versión del 29/08/a

MICROPROCESADORES Y MICROORDENADORES Página 20 de 136 Versión del 29/08/a

MICROPROCESADORES Y MICROORDENADORES Página 21 de 136 Versión del 29/08/a

5.2.3. MULTIPLICACION

MICROPROCESADORES Y MICROORDENADORES Página 22 de 136 Versión del 29/08/a

MICROPROCESADORES Y MICROORDENADORES Página 23 de 136 Versión del 29/08/a

5.2.4. DIVISION

MICROPROCESADORES Y MICROORDENADORES Página 24 de 136 Versión del 29/08/a

MICROPROCESADORES Y MICROORDENADORES Página 25 de 136 Versión del 29/08/a

MICROPROCESADORES Y MICROORDENADORES Página 26 de 136 Versión del 29/08/a

5.3. INSTRUCCIONES DE TRANSFERENCIAS 5.3.1. TRANSFERENCIAS CONDICIONALES

MICROPROCESADORES Y MICROORDENADORES Página 27 de 136 Versión del 29/08/a

MICROPROCESADORES Y MICROORDENADORES Página 28 de 136 Versión del 29/08/a

MICROPROCESADORES Y MICROORDENADORES Página 29 de 136 Versión del 29/08/a

5.3.1.1. INTERPRETACION DE LOS CODIGOS DE TRANSFERENCIAS CONDICIONALES

MICROPROCESADORES Y MICROORDENADORES Página 30 de 136 Versión del 29/08/a

MICROPROCESADORES Y MICROORDENADORES Página 31 de 136 Versión del 29/08/a

5.3.2. TRANSFERENCIAS INCONDICIONALES

MICROPROCESADORES Y MICROORDENADORES Página 32 de 136 Versión del 29/08/a

5.4. CONTROL DE ITERACCIONES

MICROPROCESADORES Y MICROORDENADORES Página 33 de 136 Versión del 29/08/a

5.5. INTERRUPCIONES

MICROPROCESADORES Y MICROORDENADORES Página 34 de 136 Versión del 29/08/a

5.6. INSTRUCCIONES DE MANIPULACION DE BITS

MICROPROCESADORES Y MICROORDENADORES Página 35 de 136 Versión del 29/08/a

MICROPROCESADORES Y MICROORDENADORES Página 36 de 136 Versión del 29/08/a

MICROPROCESADORES Y MICROORDENADORES Página 37 de 136 Versión del 29/08/a

MICROPROCESADORES Y MICROORDENADORES Página 38 de 136 Versión del 29/08/a

5.7. INSTRUCCIONES DE CONTROL DEL PROCESADOR

5.7.1. OPERACIONES CON FLAGS

MICROPROCESADORES Y MICROORDENADORES Página 39 de 136 Versión del 29/08/a

5.7.2. OPERACIONES DE SINCRONIZACION EXTERNA

5.7.3. NO OPERACION

MICROPROCESADORES Y MICROORDENADORES Página 40 de 136 Versión del 29/08/a

6. DIRECCIONAMIENTO DE MEMORIA

Cada vez que en el formato de una instrucción se especifica mem se esta haciendo referencia a un operando localizado en memoria. Para ubicarlo es necesario indicar su dirección en la forma SEGMENTO:DESPLAZAMIENTO. Existen muchas formas de especificar la dirección de un operando: 1) indicando el nombre de una variable que lo representa

MOV CX, Var1 Si no se especifica segmento se usa DS 2) indicando el valor del DESPLAZAMIENTO (en este caso es obligatorio especificar también el

segmento) MOV CX; DS:[0843h]

3) indicando un registro base y un DESPLAZAMIENTO MOV DX, Seg:[BX] mueve el operando cuya dirección es Seg: contenido de BX, al registro DX MOV CX, Seg:045h[BX] mueve el operando cuya dirección es Seg: contenido de BX más 045h, al reg CX

Los registros que pueden usarse son BX, BP, DI, SI. Se puede no especificar Seg. y entonces se asume un segmento por default según el registro que se halla especificado:

BXàDS; BP àSS; SIàDS; DIàES.

4) indicando un registro base y un registro índice MOV AX, Seg:023h[BX][SI] mueve el operando cuya dirección es Seg: contenido de BX más contenido de SI más 023h, al registro AX MOV BX, Seg:[BX][DI]en este caso el DESPLAZAMIENTO es cero.

El segmento por default que se elige depende de cual sea el registro base especificado. Para BX se elige DS, para BP se elige SS. Los registros base posibles son BX y BP y los de índices posibles son SI, DI. El DESPLAZAMIENTO final que se obtiene en las distintas formas de especificar el operando se denomina Dirección Efectiva. La tabla siguiente es una buena referencia para reconocer todas las formas posibles de especificar la dirección de un operando

COLUMNA 1 COLUMNA 2 COLUMNA 3 BX SI

DESPLAZAMIENTO* BP DI

• DESPLAZAMIENTO puede ser un valor positivo o negativo. • Solo en el caso de direccionamiento directo (solo DESPLAZAMIENTO)

no puede ser negativo.

MICROPROCESADORES Y MICROORDENADORES Página 41 de 136 Versión del 29/08/a

Las direcciones validas son aquellas que se conforman eligiendo uno o ninguno de los elementos de cada una de las columnas mostradas. Por supuesto al menos un elemento debe ser elegido de al menos una columna. Existen por lo tanto 17 formas distintas de conformar una dirección efectiva valida:

DSP [BX] [BP] [SI] [DI] DSP[BX] DSP[BP] DSP[SI] DSP[DI] [BX][SI] [BX][DI] [BP][SI] [BP][DI] DSP[BX][SI] DSP[BX][DI] DSP[BP][SI] DSP[BP][SI]

MICROPROCESADORES Y MICROORDENADORES Página 42 de 136 Versión del 29/08/a

7. UNIDAD DE INTERFACES DEL BUS (BUS INTERFACE UNIT­ BIU) Esta unidad es la encargada de cargar instrucciones en la cola de pre­carga y pasar datos a y desde la unidad de control y a y desde las unidades periféricas incluidas las memorias. Para cada transferencia la BIU generará un “BUS CYCLE” (BC). Al comienzo de un BC se presenta la dirección, el espacio de direcciones de que se trate(memoria o E/S) y el estado que indica el tipo de BC. A continuación se define la dirección de la transferencia (read o write) y luego se registra la información leída o se renueva la información grabada. Los micros 80x86 multiplexan en el tiempo el comportamiento de un único bus de 20 bits de forma tal que en un momento se comportan como bus de direcciones y en otro (usando solo los 8 o 16 bits menos representativos) como bus de datos. Por razones de compatibilidad con equipos que manejan 8 bits el espacio de direcciones de memo­ ria se considera compuesto por dos bancos de 512 Kbytes cada uno, los cuales responden a direc­ ciones pares e impares respectivamente. El bit de dirección menos significativo A0 determina si una dirección es par o impar. Un bit de control llamado BHE (Byte High Enable) determina si se desea leer o no los 8 bits más representativos del dato de 16. La figura muestra el circuito utilizado:

ENABLE FFFFF FFFFE

5 4 3 2 1 0

A19:1 D15:8 BHE D7:0 A0

A0 BHE TRANSFERENCIA DE: 0 0 UNA PALABRA 0 1 UN BYTE PAR 1 0 UN BYTE IMPAR 1 1 USADO SOLAMENTE. EN MEMORIAS DINAMICAS

Si se solicita un Byte en una dirección par este se transfiere en los bits D7:0 Si se solicita un Byte en una dirección impar este se transfiere en los bits D15:8. El BIU se encarga­ rá de realizar los ajustes que sean necesarios. Si se solicita una palabra en una dirección par esta se transfiere en un único BC en los bits D15:0. Si se solicita una palabra en una dirección impar la BIU necesitará dos BC. En el primer ciclo se obtiene un byte en D15:8 y luego se incrementa la dirección en 1 y se lee el segunda byte en D7:0. La BIU desencadena automáticamente los dos BC.

MICROPROCESADORES Y MICROORDENADORES Página 43 de 136 Versión del 29/08/a

7.1. CICLO DE BUS (BUS CYCLE) La BIU ejecuta un bus cycle para transferir datos entre cualquiera de las unidades integradas y cualquier memoria externa o dispositivo de E/S. Un BC consiste de un mínimo de 4 CPU clocks conocidos como T­STATES. Un T­STATES transcurre desde un flanco negativo del clock hasta el próximo flanco negativo y siempre tiene dos fases. La figura muestra un típico BC

ALE Address Latch Enable Su transición de 1 a 0 indica el momento correcto para tomar una di­ rección valida del bus de direcciones. Es una señal que entrega el micro y generalmente se usa co­ mo STROBE en el latch de direcciones.

S2:0 Son tres bits que entrega el micro que indican el tipo de BC que se esta ejecutando

S2 S1 S0 Tipo de BC 0 0 0 Interrupt 0 0 1 Lectura de E/S 0 1 0 Escritura de E/S 0 1 1 Procesador Detenido(HALT) 1 0 0 Carga de una instrucción en la cola de pre­carga 1 0 1 Lectura de memoria 1 1 0 Escritura de memoria 1 1 1 Bus No Activo

AD15:0 A 19:16 Bus de direcciones y datos multiplexado en el tiempo. Durante T1 presenta la dirección, durante T2, T3 y parte de T4 presenta los datos.

MICROPROCESADORES Y MICROORDENADORES Página 44 de 136 Versión del 29/08/a

RD/WR Define la dirección de la transferencia. RD READ, WR WRITE.

Un ciclo completo puede dividirse en dos fases: la de dirección y estado y la de datos. La primera de ellas comienza antes de T1 y dura hasta el final de T1. La fase de los datos se inicia en la fase 1 de T2 y continua hasta la fase 2 de T4 o TI (ti significa Bus Disponible o IDLE) La siguiente figura muestra la definición de los tiempos claves de la fase de direcciones y estado de un BC.

1) CHOV: Clock high to ALE high, S2:0 valid. 2) CLOV: Clock low to address valid, BHE valid. 3) AVLL: Address valid to ALE low (address setup to ALE). 4) CHOV: Clock high to ALE low. 5) CLOF: Clock low to address invalid (address hold from clock low). 6) LLAX: ALE low to address invalid (address hold from ALE).

Son valores que apar ecen en la hoja de especificaciones tecnicas del micro en cuestion

Un BC comienza con el flanco positivo de la señal ALE y el seteo de los tres bits de control que definen el tipo de BC que se ejecutará (STATUS S2:0) los cuales deben asumir sus valores antes de comenzar T1. Siempre antes de T1 existirá un T4 o un TI. Durante T1 debe presentarse una direccion correcta en AD15:0/a19:16. Con el frente negativo de ALE se registrará en el latch de direcciones la direccion presente en el Bus.

MICROPROCESADORES Y MICROORDENADORES Página 45 de 136 Versión del 29/08/a

Dicha direccion tambien activará la señal de Chip Select que corresponda. Los valores tipicos para la fase de datos se muestran a continuacion

Son valores que apar ecen en la hoja de especificaciones tecnicas del micro en cuestion

La direccion de la transferencia RD/WR debe ser valida antes de comenzar T2. Los bits de STATUS deben permanecer validos hasta pasada la finalizacion de T2 Si se trata de un WRITE, los datos deben estar disponibles en el bus al comenzar T2 y el flanco negativo del clock que termina T3 es el que da por terminada la operación desactivando la señal WR. Si se trata de un READ el flanco descendente del clock que termina T3 permite tomar del bus los datos leidos.

La siguiente figura muestra el circuito para la lectura y grabacion de una memoria RAM conformada por dos bancos que direccionan 8 bits cada uno.

MICROPROCESADORES Y MICROORDENADORES Página 46 de 136 Versión del 29/08/a

SI

SI

RAM AD7:0

PROCESADOR LATCH ALE STROBE A19:0 A19:1 D0:18 CS

A19:16 WE OE

AD15:0 DIRECCIONES

RAM AD A0 15:8

WR

BHE WE OE CS RD CS

Este circuito protege el 2º banco cuando se graba un byte en una direccion par

Si el dispositivo periferico no es suficientemente rapido como para realizar la operación de READ o WRITE en los cuatro T­STATES provistos normarmente la BIU debe ser informada para que inserte T­WAITs. T­WAIT son T­STATE que se agregan entre T2 y T4 para darle tiempo al periferico a realizar la operación. Existen dos formas de insertar T­WAIT. O se especifica una cantidad fija de T­WAIT para cada periferico y entonces la BIU siempre inserta dicha cantidad cuando realiza operaciones sobre ese dispositivo o mediante un bit de control adicional propio para cada dispositivo se puede especificar que la BIU inserte los T­WAIT requeridos según la primera alternativa pero ademas si una vez insertados dichos T­WAIT la señal BUS READY no es activada por el dispositivo confirmando que termino la operación se continuan insertando T­WAIT hasta que ello ocurra. El diagrama muestra el comportamiento descripto:

Cant. De T­WAIT insertados INSERTAR

< T­WAIT Cant indicada para Este dispositivo

BUSREADY TERMINAR BC Activo INSERTAR

T­WAIT

MICROPROCESADORES Y MICROORDENADORES Página 47 de 136 Versión del 29/08/a

7.2. TIEMPOS DEL CICLO DE BUS PARA UNA LECTURA

La figura siguiente muestra el ciclo completo para un READ y los tiempos claves que deben respe­ tarse para una operación completa desde el punta de vista del dispositivo.

La secuencia que implementa el micro para un ciclo de este tipo es A) presenta una dirección valida en el bus B) selecciona el chip C) activa la señal RD

La hoja de especificaciones técnicas del dispositivo a utilizarse indica el valor máximo de las si­ guientes variables:

Tglqv = Toe Máximo tiempo entre el punto C y Datos Disponibles Telqv = Tac Máximo tiempo entre el punto B y Datos Disponibles Tavqv = Taa Máximo tiempo entre el punto A y Datos Disponibles

Por otro lado desde el punto de vista del micro la secuencia es:

T1 T2 T3 T4

Con este pulso se tomaran los datos Con este pulso se da cumplimiento al punto C

MICROPROCESADORES Y MICROORDENADORES Página 48 de 136 Versión del 29/08/a

Con este pulso se dan cumplimiento al punto A y al B (pero en el caso del punto A debe conside­ rarse que la dirección se latchea con la caida de ALE y solo después que el LATCH conmutó esta disponible en los bornes de entrada del periférico) Por lo tanto debe cumplirse con:

Toe < 2T – Tclov – Tclis Tac < 3T – Tclov – Tclis Taa < 3T – Tclov – Tclis – Tadlt

Con:

Tclov Tiempo que las señales del micro demoran entre el pulso que las activan y el momento en el que alcanzan el estado de activación.

Tclis Tiempo que el micro requiere entre el momento que se presentan datos validos en el bus y el momento en el que se toman dichos datos.

Tadlt Tiempo adicional que transcurre entre el momento de la presencia de direcciones validas en el bus y el momento en que dichas direcciones están disponibles a la salida del latch. Este tiempo debe incluir Tavll (tiempo entre direcciones validas y caida de ALE y el tiem­ po de commutacion del latch)

Si las inecuaciones anteriores no son cumplidas por las características del periférico y del micro se deben adicionar tantos T­WAIT como sean requeridos para darle cumplimiento. Cada T­WAIT adicionado incrementa los valores a la derecha del signo < en T. Otro valor que es necesario compatibilizar es el tiempo que el dispositivo mantiene en el bus el da­ to leído luego de desactivar la señal RD pues si este es muy largo podría superponerse con la nueva dirección presentada por la BIU al iniciar el próximo ciclo y generar un corto circuito. Se tiene: Tghqz = Tohz Tiempo máximo que el dispositivo mantiene los datos en el bus luego de que la

señal RD es desactivada Trhax Tiempo mínimo que el micro deja transcurrir entre que desactiva la señal RD y la

presentación en el bus de una nueva dirección. Generalmente es dado por la hoja de especificaciones del micro. Puede calcularse como T ­ Tclov MAX + TclovMIN pues RD se desactiva al final de T3 y la nueva direccion estará disponible al final de T4

Si Tohz resulta mayor que Trhav podría producirse un corto circuito en el bus. Trhav puede exten­ derse eligiendo para el micro una frecuencia de trabajo menor, Tohz puede achicarse eligiendo una memoria más rápida, o el problema puede resolverse usando un “transceiver” sobre el bus.

7.2.1. AISLANDO EL DATA BUS CON UN BUFFER. BUFFERING THE DATA BUS

La BIU genera dos señales (DEN y DT/R) para el control de un buffer bidireccional o 'transceiver' a ser conectado entre el bus de datos y el periférico. La relación de tiempos entre estas señales se muestra en la siguiente figura

MICROPROCESADORES Y MICROORDENADORES Página 49 de 136 Versión del 29/08/a

DEN Data Enable informa al 'transceiver' que los datos están disponibles en el bus DT/R Data Transmit/Receive. Informa al 'transceiver' la dirección de los datos.

'Transceiver' son requeridos cuando:

A) La carga capacitiva sobre el bus de datos y direcciones es excesiva B) La corriente de carga sobre el bus es excesiva C) Un periférico no es capaz de retirar sus datos a tiempo para prevenir una contención con la nue­

va dirección presentada por la BIU.

El bus de datos existente en el micro y el 'transceiver' se denomina local bus. El bus de datos existente entre el 'transceiver' y el periférico se denomina buffered bus Un sistema donde TODOS sus periféricos están conectados al buffered bus se denomina totalmente buffered. Si los dispositivos periféricos se mezclan entre conectados al local bus y conectados al buffered bus se denomina parcialmente buffered. En un sistema parcialmente buffered la señal DEN debe controlarse con la señal Chip Select de aquellos dispositivos conectados al local bus. De no hacerlo así una dirección correspondiente a un periférico conectado al local bus hará que los datos leídos sean presentados al local bus pero si DEN se activara también el transceiver alimentará al local bus

La figura muestra un ejemplo de conexionado

MICROPROCESADORES Y MICROORDENADORES Página 50 de 136 Versión del 29/08/a

7.3. TIEMPOS DEL CICLO DE BUS PARA UNA GRABACION La siguiente figura muestra el ciclo para un WRITE con los tiempos claves que deben respetarse para una operación correcta

MICROPROCESADORES Y MICROORDENADORES Página 51 de 136 Versión del 29/08/a

La secuencia que implementa el micro es: A) Presentación de una dirección valida en el bus B) Selección del dispositivo correspondiente activando la señal CS. C) Activación de la señal WR. D) Presentación de los datos en el bus. E) La señal WR es desactivada.

De la hoja de especificaciones técnicas del periférico pueden obtenerse los valores correspondientes a las siguientes definiciones Twc = Telwh tiempo mínimo entre un ciclo de grabado y el siguiente. Taw = Tavwh tiempo mínimo entre la presentación de una dirección valida y la grabación del dato que se realiza cuando se desactiva WR Tcw = Telwh tiempo mínimo que se requiere entre la activación de CS y la desactivación de WR Tah = Twhax tiempo mínimo que debe permanecer la dirección valida luego de desactivar WR Tdw = Tdvwhtiempo mínimo que debe presentarse el dato antes de grabar desactivando WR Tdh = Twhdx tiempo mínimo que debe permanecer el dato valido luego de desactivar WR Twp = Twlwhtiempo mínimo que debe permanecer WR activado. Por el lado del micro la secuencia es:

Con este pulso de desactiva el periférico T1 T2 T3 T4

Con este pulso se da cumplimiento al punto E

Con este pulso se da cumplimiento al punto C y al D Con este pulso se dan cumplimiento al punto A y al B

Por lo tanto debe cumplirse con las inecuaciones mostradas en la primer columna de la tabla si­ guiente. En la segunda columna se indica cual es la solución si la inecuación no puede cumplirse.

INECUACION SOLUCION Twc < 4T Insertar WS Taw=Tavwh < 3T­ Tadltch Insertar WS Tcw=Telwh < 3T Insertar WS Tah=Twhax del periférico < Twhlh del micro Usar un clock mas lento Tdw=Tdvwh < 2T Insertar WS Tdh=Twhdx del periférico < Twhdx del micro Usar clock mas lento Twp=Twlwh del periférico < Twlwh del micro Insertar WS

• En el caso del Write no se consideran los valores Tclov y Tclis pues no influyen. Por ejemplo: la memoria exige un tiempo mínimo entre la presencia de un CS valido y la señal de write, el mi­ cro activa CS en el comienzo de T1 ( la activación real se producirá Tclov después) e indica grabar desactivando WR al comienzo de T4 ( la desactivaron se producirá Tclov después)

MICROPROCESADORES Y MICROORDENADORES Página 52 de 136 Versión del 29/08/a

Los valores Twhlh, Twhdx, Twlwh vienen generalmente especificados en la hoja del micro en cuestión. En caso contrario pueden calcularse de la siguiente forma: Twhlh : tiempo entre la desactivación del Write y la desactivación de ALE que genera una nueva dirección disponible. Es el tiempo que permanecerán disponibles los datos a grabar luego de la or­ den de grabar. Será igual a: ½ T – Tclov MAX + TchovMIN Twhdx: Tiempo transcurrido entre la desactivación de WR y la desaparición de los datos a ser gra­ bados en el bus. Tiempo que permanecerán los datos ha ser grabados disponibles en el bus luego de la orden de grabar mediante WR. Será igual a: T – Tclov MAX + TclofMIN Twlwh: duración del WR. Será igual a: 2T ­ Tclov MAX + TclovMIN Los valores obtenidos por calculo suelen diferir de los indicados en las hojas técnicas del micro. Utilizar los calculados únicamente si no se disponen de los indicados por el fabricante

7.4. DEFINICION DE LOS VALORES DE LA HOJA DE ESPECIFICACIONES Tchov: clock high to output valid Tclov: clock low to output valid Tchof: clock high to output float Tclof: clock low to output float

Tchis: imput set previus clock high Tchih imput hold after clock high Tclis: imput set previus clock low Tclih: imput hold after clock low

MICROPROCESADORES Y MICROORDENADORES Página 53 de 136 Versión del 29/08/a

MICROPROCESADORES Y MICROORDENADORES Página 54 de 136 Versión del 29/08/a

7.5. EJEMPLO DE ANALISIS DE LOS TIEMPOS A título de ejemplo se analizará el 80186 modelo 80C186EC­25 a 25 MHz con dos memorias SRAM: MOTOROLA MCM6226A 128 K x 8 Bits Access Time 25 nanosegundos. y PERFOR­ MANCE P4C1024L 128 K x 8 Bits Access Time 70 nanosegundos. Valores característicos del procesador: T = 1/25 MHz = 40 nseg Tclov = 20 nseg Tclis = 10 nseg Twhlh = ½ T – 10 =10 nseg Twhdx = T – 15 = 25 nseg Twlwh = 2T – 5 = 75 nseg Trhax = T – 15 = 25 nseg Se asume Tadltch = 20 nseg Valores característicos de los periféricos:

VALOR MOTOROLA PERFORMANCE Toe 12 35 Tac 25 70 Taa 25 70 Tohz 10 25

Trc = Twc 25 70 Taw 20 60 Tcw 20 60 Tah 0 0 Tdw 12 25 Tdh 0 0 Twp 20 50

Ecuaciones a cumplir:

ECUACION MOTOROLA PERMORMANCE VALORES SOLUCION VALORES SOLUCION

Toe < 2T­Tclov ­Tclis 12 < 50 OK 35 < 50 OK Tac < 3T­Tclov ­Tclis 25 < 90 OK 70 < 90 OK Taa < 3T­Tclov­Tclis­Tadlt 25 < 70 OK 70 < 70 AGREGAR 1 WS Tohz < Trhax 10 < 25 OK 25 < 25 BUFFER Taelwh < 4T 25 < 160 OK 70 < 160 OK Tavwh < 3T 20 < 120 OK 60 < 120 OK Telwh < 3T 20 < 120 OK 60 < 120 OK Twhax < Twhlh 0 < 10 OK 0 < 10 OK Tdvwh < 2T 12 < 80 OK 25 < 80 OK Twhdx < Twhdx 0 < 25 OK 0 < 25 OK Twlwh < Twlwh 20 < 75 OK 50 < 75 OK

MICROPROCESADORES Y MICROORDENADORES Página 55 de 136 Versión del 29/08/a

Hoja de especificaciones del 80186 a 25 Mz

MICROPROCESADORES Y MICROORDENADORES Página 56 de 136 Versión del 29/08/a

MICROPROCESADORES Y MICROORDENADORES Página 57 de 136 Versión del 29/08/a

8. BLOCK DE CONTROL DE PERIFERICOS (PCB). Todos los periféricos que se encuentran integrados en el chip del 80186 son controlados por un conjunto de registros de 16 bits. Estos registros se encuentran ubicados físicamente cada uno en su propio periférico integrado pero ellos son direccionados como un conjunto de 128 direcciones de palabras 16 bits que se denominan PCB. La PCB puede ubicarse en cualquier lugar del espacio de memoria o del espacio de E/S siem­ pre que sea múltiplo de 256. En forma standard se encuentra en el espacio de E/S y cubre las direcciones FF00h hasta FFFFh. La tabla siguiente muestra que registro representa cada una de las 128 entradas que tiene la PCB(cada entrada almacena una palabra de 16 bits, por eso ocupa en total 256 bytes) En términos de desplazamiento contado desde el comienzo de la PCB solo tienen significado los desplazamien­ tos pares. El desplazamiento A8h apunta a un registro muy especial: RELREG. Este registro es el que contie­ ne la información de donde esta ubicada la PCB. Su formato es:

ET debe ser 0 Relacionado con el co­procesador matemático MEN indica si la PCB se ubicará en el espacio de memoria (MEM = 1) o el de E/S (MEM=0). R19:8 es la dirección de comienzo de la PCB. Siempre se completa con 8 bits nulos como bits

menos representativos. Si MEM = 0 por supuesto R19:16 deben ser ceros.

Toda comunicación entre los periféricos integrados y la EU ocurre sobre un bus especial llamado F­Bus de 16 Bits y toda transferencia de información entre los periféricos integrados y la EU se realiza siempre de a 16 Bits. Cuando se requiere una transferencia de datos sobre algún registro direccionado en la PCB, la BIU genera, como siempre un BC cuya información de datos y control es dirigida a los pins externos, pero en este caso además se realiza la transferencia sobre el F­Bus ignorándose el dato que pueda haberse obtenido desde el dispositivo externo. El hecho que toda trasferencia sobre el F­Bus sea de 16 bits, independientemente de cómo sea codificada(por ejemplo OUT 28h, AL transfiere 16 bits, AH y AL desde las direcciones 28h y 29h) obliga a tomar ciertos resguardos. Lectura de una palabra Usar siempre direcciones pares.

Ej. IN AX, DX MOV Reg16, dirección par

Lectura de un byte Pueden usarse direcciones pares o impares. Ej. IN AL; DX MOV Reg8, dirección

Grabación de una palabra Usar siempre direcciones pares. Ej. OUT DX; AX OUT DX, Al (transfiere AX a DX)

MOV dirección par, Reg16 Grabación de un byte Siempre se grabará la palabra completa que este involucrada.

Usar solo direcciones pares. Ej. OUT DX, AL graba AX en la dirección contenida en DX

MICROPROCESADORES Y MICROORDENADORES Página 58 de 136 Versión del 29/08/a

Interrup. MASTER y SLAVE Port2 Refresco de Memorias MPICP0 00h P2DIR 58h Y Alimentacion MPICP1 02h P2PIN 5Ah RFBASE B0h SPICP0 04h P2CON 5Ch RFTIME B2h SPICP1 06hh P2LTCH 5Eh RFCON B4h Reserved 08h Entrada y Salida Serie RFADDR B6h

Interrup.Request Latch Reg. Canal 0 PWRCON B8h SCUIRL 0Ah B0CMP 60h Reserved BAh DMAIRL 0Ch B0CNT 62h STEPID BCh TIMIRL 0Eh S0CON 64h PWRSAV BEh Reserved 10h S0STS 66h Acceso Directo a Memor ia Reserved 12h S0RBUF 68h Canal 0 Reserved 14h S0TBUF 6Ah D0SRCL C0h Reserved 16h Reserved 6Ch D0SRCH C2h Reserved 18h Reserved 6Eh D0DSTL C4h Reserved 1Ah Canal 1 D0DSTH C6h Reserved 1Ch B1CMP 70h D0TC C8h Reserved 1Eh B1CNT 72h D0CON CAh

Watch Dog Register s S1CON 74h Genera les WDTRLDH 20h S1STS 76h DMAPRI CCh WDTRLDL 22h S1RBUF 78h DMAHALT CEh WDTCNTH 24h S1TBUF 7Ah Canal 1 WDTCNTL 26h Reserved 7Ch D1SRCL D0h WDTCLR 28h Reserved 7Eh D1SRCH D2h WDTDIS 2Ah Selección de Chips D1DSTL D4h Reserved 2Ch Chips 0 a 7 D1DSTH D6h Reserved 2Eh GCS0ST 80h D1TC D8h

TIMER0 Register s GCS0SP 82h D1CON DAh T0CNT 30h GCS1ST 84h Reserved DCh T0CMPA 32h GCS1SP 86h Reserved DEh T0CMPB 34h GCS2ST 88h Canal 2 T0CON 36h GCS2SP 8Ah D2SRCL E0h

TIMER1 Register s GCS3ST 8Ch D2SRCH E2h T1CNT 38h GCS3SP 8Eh D2DSTL E4h T1CMPA 3Ah GCS4ST 90h D2DSTH E6h T1CMPB 3Ch GCS4SP 92h D2TC E8h T1CON 3Eh GCS5ST 94h D2CON EAh

TIMER2 Register s GCS5SP 96h Reserved ECh T2CNT 40h GCS6ST 98h Reserved EEh T2CMPA 42h GCS6SP 9Ah Canal 3 Reserved 44h GCS7ST 9Ch D3SRCL F0h T2CON 46h GCS7SP 9Eh D3SRCH F2h

Entrada Salida Para lelo Chip en Direccion Baja D3DSTL F4h Por t3 LCSST A0h D3DSTH F6h

P3DIR 48h LCSSP A2h D3TC F8h P3PIN 4Ah Chip en Direccion Alta D3CON FAh P3CON 4Ch UCSST A4h Reserved FCh P3LTCH 4Eh UCSSP A6h Reserved FEh

Por t1 Registro de Reub. de la PCB P1DIR 50h RELREG A8h P1PIN 52h Reserved AAh P1CON 54h Reserved ACh P1LTCH 56h Reserved AE h

MICROPROCESADORES Y MICROORDENADORES Página 59 de 136 Versión del 29/08/a

9. UNIDAD SELECTORA DE CHIPS. CHIP SELECT UNIT (CSU) 9.1. DECRIPCION FUNCIONAL Esta unidad es la encargada de asignar el espacio de memoria y el espacio de E/S entre los distin­ tos periféricos que pueda tener el micro. De esta forma cada periférico es “mapeado” sobre un in­ tervalo definido del espacio de direcciones de forma tal que operaciones de entrada/salida que se realicen sobre dicho espacio serán en realidad realizadas sobre el periférico en cuestión. El espacio de direcciones de memoria esta formado por 1Mbytes de direcciones diferentes. El espacio de direcciones de E/S esta formado por 64 Kbytes de direcciones diferentes. Cuando se apunta a una dirección puede solicitarse la lectura o escritura de un byte o de una pala­ bra. Como ejemplo supongamos tener los siguientes periféricos disponibles:

Memoria RAM estática compuesta por dos bancos de 8 bits cada uno que cubren 4096 direcciones de 8 bits.

DIRECCIONES A11:0 SRAM

CS 2048 x 2 x 8 Bits D15:0 DATOS BHE WR OE

Memoria ROM compuesta por dos bancos de 8 bits cada uno que cubren 1024 direcciones de 8 bits.

DIRECCIONES A9:0 ROM

CS 512 x 2 x 8 Bits D15:0 DATOS BHE WR OE

Memoria RAM dinámica compuesta por dos bancos de 8 bits cada uno que cubren 16K direcciones de 8 bits.

DIRECCIONES A13:0 DRAM

CS 8K x 2 x 8 Bits D15:0 DATOS BHE WR OE

MICROPROCESADORES Y MICROORDENADORES Página 60 de 136 Versión del 29/08/a

Dispositivo periférico de entrada salida con un buffer de 512 direcciones de 8 bits

DIRECCIONES A8:0 UNIDAD DE E/S

CS 512 x 8 Bits D15:0 DATOS BHE WR OE

OBSERVACIONES: CON 12 BITS SE PUEDE DIRECCIONAR HASTA 0FFFh= 4095 CON 10 BITS SE PUEDE DIRECCIONAR HASTA 03FFh= 1023 CON 14 BITS SE PUEDE DIRECCIONAR HASTA 3FFFh= 16383 CON 9 BITS SE PUEDE DIRECCIONAR HASTA 01FFh= 511

Se asignará el espacio de direcciones de memoria de la siguiente manera

FFFFF ROM OCUPA ENTRE FFC00 Y FFFFF 1024 POSICIONES FFC00

ESPACIO DE DIRECCIONES LIBRE ENTRE 05400 Y FFC00

053FF PERIFERICO OCUPA ENTRE 05000 Y 053FF 1024 POSIC. 05000 04FFF

RAM DINAMICA OCUPA ENTRE 01000 Y 05000 16385 POSICIONES

01000 00FFF 00000 RAM ESTATICA OCUPA ENTRE 0000 Y 00FFF 4096 POSIC.

MICROPROCESADORES Y MICROORDENADORES Página 61 de 136 Versión del 29/08/a

Ante una dirección física determinada se debe actuar de la siguiente manera:

Dirección Entre 00000 ACTIVAR CSSRAM Y 00FFF

Dirección Entre 00000 ACTIVAR CSDRAM Y 00FFF

Dirección Entre 00000 ACTIVAR CSPERIF Y 00FFF

Dirección Entre 00000 ACTICAR CSROM Y 00FFF

La CSU es la unidad que se encarga de generar las señales de selección de chips. El 80186 tiene 10 señales:

UCS selecciona el periférico que mapea en las posiciones más altas del espacio de direcciones. Generalmente se reserva para el dispositivo de “booteo”.

LCS selecciona el periférico que mapea las posiciones mas bajas del espacio de direcciones. Generalmente se reserva a la memoria estática que almacena la tabla de interrupciones, el STACK y los datos.

GCS7:0 son 8 bits para mapear 8 dispositivos adicionales.

9.2. RESGISTROS DE CONTROL DE LA CSU Para realizar su trabajo la CSU cuenta con dos registros para cada bit de control que se direccionan en la PCB y se denominan START y STOP. El registro START define la dirección de arranque del espacio mapeado y la cantidad de wait state que se insertaran en todo BC que se genere para el dispositivo en cuestión. El registro STOP define la dirección donde termina el espacio mapeado y las variables de control:

CSEN Si cero esta salida esta “disable”. Si uno “enable”.

SI

SI

SI

SI

MICROPROCESADORES Y MICROORDENADORES Página 62 de 136 Versión del 29/08/a

ISTOP Si cero se ignora la dirección de terminación del espacio mapeado. El espacio termina en 0FFFFFh (memoria) o 0FFFFh (E/S)

MEM Si uno se mapea en el espacio de memoria. Si cero se mapea en el espacio de E/S RDY Si cero, el BIU insertará la cantidad de T­Wait indicada en el registro START y luego in­

dependientemente de si el periférico activó o no la señal de READY el BC es terminado. Si uno, el BIU una vez insertada la cantidad de T­WAIT indicada en el registro START sigue insertando T­Wait hasta que el periférico active la señal READY.

Las siguientes figuras muestran el formato detallado de los registros START y STOP:

Para el ejemplo planteado los valores correctos para cada uno de los módulos a conectar es mostra­ do en la tabla siguiente:

MÓDULO REG DIRECC START

DIRECC. STOP

CANT. T­WAIT

CSEN ISTOP MEM ESPC

RDY

ROM UCS FFCOOh 0h 5 S N S N PERIFERICO GCS1 5000h 5400h 0 S S S S RAM DINAMICA GCS0 1000h 5000h 3 S S S N RAM ESTATICA LCS 0h 1000h 0 S S S N

MICROPROCESADORES Y MICROORDENADORES Página 63 de 136 Versión del 29/08/a

10. UNIDAD DE CONTROL DE INTERRUPCIONES (ICU) 10.1. DESCRIPCION FUNCIONAL Existen dos caminos distintos para procesar los requerimientos de los periféricos de E/S. : polling e interrupciones. Polling requiere que la CPU pregunte periódicamente a cada uno de los dispositivos de E/S si requiere atención. Si el dispositivo en cuestión es lento la CPU preguntara un montón de veces antes de obtener una respuesta afirmativa. Esto implica que la CPU estará ocupada en tareas no productivas un alto porcentaje de su tiempo. Bajo el esquema de interrupciones, en cambio, el dispositivo que requiere atención tiene la posibilidad de interrumpir a la CPU; esta lo atiende dejando en suspenso lo que estuviese haciendo y luego retoma su trabajo. El 80186 tiene una única señal de entrada de interrupciones enmascarable. Expandir esta capacidad requiere un controlador de interrupciones. El controlador actúa como un filtro entre varias señales de interrupción y la única que admite el 80186 presentándole a este la más prioritaria de entre las presentes. Cuando la CPU recibe una interrupción comienza un BC denominado INTERRUP ACKNOWLEDGE CYCLE o INTA CYCLE (IC). Un INTA CYCLE es un ciclo de lectura especial durante el cual la CPU carga el tipo de interrupción desde el controlador de interrupciones. Una vez que la CPU conoce el tipo de interrupción que debe atender realiza la siguiente secuencia: 1) salva la Processor Status Word (PSW) en el STACK. 2) Blanquea los bits TRAP FLAG e INTERRUP ENABLE en la PSW. (Esto anula la posibilidad

de single – step y nuevas interrupciones mientras se este atendiendo a la presente) 3) Salva el contenido de los registros CS e IP en el STACK 4) Carga en los registros CS e IP las direcciones obtenidas desde la INTERRUP VECTOR

TABLE en función de tipo de interrupción a procesar

10.2. PRIORIDADES Y ENMASCARAMIENTOS Un esquema de manejo de interrupciones debe contemplar las siguientes funciones: a) Manejo de prioridades: Define el criterio de selección entre los pedidos de interrupción activos en un momento determinado. Aquella que tenga la mayor prioridad será atendida primero. b) Manejo del enmascaramiento: Muy frecuentemente se presenta la necesidad de enmascarar una interrupción. Enmascarar implica ingnorarla totalmente. Mientras una señal de interrupción permanezca enmascarada por mas que ella sea activada nunca deberá generar una interrupción a la CPU. Existen algunos esquemas de trabajo que debido a que son utilizados muy frecuentemente tienen nombre propio. FULLY NESTED En este esquema el atender una interrupción determinada implica automáticamente enmascarar todas aquellas de igual o menor prioridad. Dicho en otras palabras una rutina de servicio podrá ser

MICROPROCESADORES Y MICROORDENADORES Página 64 de 136 Versión del 29/08/a

interrumpida, para atender otra interrupción, solo si esta es de mayor prioridad. Nunca una rutina de servicio podrá ser interrumpida para atender una interrupción de menor o igual prioridad. SPECIAL FULLY NESTED. Es similar al anterior pero el igual cambia de lugar. Una rutina de servicio puede ser interrumpida solo para atender a otra interrupción de igual o mayor prioridad. Este esquema requiere especial atención para no caer en un círculo reiterativo. Producida una interrupción se inicia su rutina de servicio y esta podría ser interrumpida inmediatamente por su misma señal de interrupción. Mas adelante se aclarara cuando es interesante utilizar este esquema. SPECIAL MASK MODE Este esquema responde a un modelo libre. El sistema provee la posibilidad de enmascarar o no libremente cualquiera de las interrupciones vía programación. El 80186 basa su unidad de control de interrupciones en el módulo 8259A

10.3. ARQUITECTURA DEL 8259A La figura muestra el esquema básico de un 8259A.

El bloque DATA BUS BUFFER y R/D LOGIC constituye la inteface entre el 8259A y la CPU. Este bloque es el que coloca el tipo de interrupción en el bus durante el INTA CYCLE. Requerimientos de interrupción pendientes son almacenados en el INTERRUP REQUEST REGISTER. Este registro contiene un bit por cada una de las 8 señales de interrupción IRx.

MICROPROCESADORES Y MICROORDENADORES Página 65 de 136 Versión del 29/08/a

El registro puede programarse para que reconozca un nivel alto o una transición de cero a uno. El PRIORITY SOLVER decide cual de todas las interrupciones presentes es la más prioritaria basado en el modo operativo que se haya programado y en el esquema de prioridades vigente y manejara en consecuencia la salida INT. Por default IR0 es la más prioritaria y IR7 la menos. El INTERRUP SERVICE REGISTER almacena para cada señal de interrupción un bit que indica si la correspondiente interrupción esta siendo atendida. Esto le permite al PRIORITY SOLVER conocer si una interrupción más prioritaria esta siendo atendida cuando llega una nueva. La rutina de servicio debe explícitamente borrar el bit correspondiente en el INTERRUP SERVICE REGISTER antes de devolver el control al programa principal. El INTERRUP MASK REGISTER contiene un bit para cada señal de interrupción IR0 a IR7 el cual permite habilitar o inhabilitar la señal correspondiente. 10.3.1. SECUENCIA TIPICA EN EL PROCESO DE INTERRUPCIONES. Supónganse las siguientes condiciones iniciales: a) el 8259A ha sido recién inicializado b) no existen interrupciones pendientes. c) Ninguna interrupción ha sido enmascarada d) Se usara el modo de operación FULLY NESTED

Una secuencia típica sería:

1) la presencia de una señal en IR4 hace uno el bit 4 del INTERRUP REQUEST REGISTER. 2) El PRIORITY SOLVER chequea si algún bit correspondiente a interrupciones más prioritarias

esta activado en el INTERRUP REQUEST REGISTER. No hay ninguno. 3) Puesto que el modo de operación es FULLY NESTED el PRIORITY SOLVER chequeara si

alguna interrupción con prioridad mayor o igual a IR4 tiene su bit en uno en el INTERRUP SERVICE REGISTER. Esto evita que una interrupción interrumpa la rutina de servicio de otra de mayor o igual prioridad.

4) En este punto el PRIORITY SOLVER ha determinado que IR4 tiene la suficiente prioridad como para interrumpir a la CPU y por lo tanto la señal INT será activada.

5) Respetando sus propias prioridades la CPU iniciara en cuanto pueda un INTA CYCLE. 6) Con el primer frente de onda negativo de la señal INTA el 8259A hará uno el bit 4 del

INTERRUP SERVICE REGISTER y cero el bit 4 del INTERRUP REQUEST REGISTER. 7) Con el segundo frente negativo de la señal INTA el 8259A pone en el Bus de Datos la

información del tipo de interrupción solicitado. 8) Con los datos obtenidos la CPU ejecuta la secuencia correspondiente a la interrupción tipo 4

iniciándose de esa forma la rutina de servicio correspondiente. 9) Supóngase que durante la ejecución de la rutina de servicio de IR4 se presenta la señal de

interrupción IR9 10) El bit 9 del INTERRUP REQUEST REGISTER se hará igual a uno 11) El PRIORITY SOLVER detecta que IR9 es de menor prioridad que IR4 y por lo tanto no

interrumpirá a la CPU 12) Cuando la rutina de servicio de IR4 finaliza envía al 8259A un comando END OF INTERRUP

el cual hace que el bit 4 del INTERRUP SERVICE REGISTER sea igualado a cero. Esto da por terminado el proceso de IR4.

MICROPROCESADORES Y MICROORDENADORES Página 66 de 136 Versión del 29/08/a

13) El PRIORITY SOLVER detecta que IR9 esta pendiente y como ahora no hay ninguna otra más prioritaria en servicio iniciara otra solicitud de un ciclo de interrupción vía INT.

10.4. ACTIVACION DE LA SEÑAL INT El PRIORITY SOLVER define si se debe activar la señal INT en base a: 1) el modo de operación y el esquema de prioridades 2) el estado de los bits de los registros INTERRUP REQUEST REGISTER, INTERRUP

SERVICE REGISTER, INTERRUP MASK REGISTER 10.4.1. ESQUEMA DE PRIORIDADES Luego de la inicialización del 8259A fija las prioridades de las interrupciones en el esquema default que corresponde a IR0 la más prioritaria; IR7 la menos. Es posible por programa variar este esquema definiendo cual interrupción se desea sea la menos prioritaria. Las restantes SIEMPRE se ordenaran en un esquema circular. Por ejemplo si IR5 es programada como la de menor prioridad las otras se ordenan con prioridades de mayor a menor: IR6, IR7, IR0, IR1, IR2, IR3, IR4, IR5. Las figuras que siguen muestran el esquema default y el modificado.

ESQUEMA DEFAULT ESQUEMA MODIFICADO Por programa puede activarse también un procedimiento llamado ROTACION AUTOMATICA. Cuando este procedimiento esta activo cada vez que una rutina de servicio finaliza se le asigna a la interrupción asociada la menor prioridad. Esta asignación por supuesto genera la rotación de todas las restantes. Supóngase que IR0 era la más prioritaria cuando entro a ejecutarse la rutina de servicio correspondiente a IR4. Cuando esta finalice la menor prioridad será asignada a IR4 y por lo tanto IR5 será la más prioritaria, continuando con IR6, IR7, IR0, etc. La figura muestra dicha transición

MICROPROCESADORES Y MICROORDENADORES Página 67 de 136 Versión del 29/08/a

Este esquema es útil cuando se tienen varios dispositivos a los cuales se les quiere asignar prioridades iguales. 10.4.2. MODO DE OPERACIÓN El 8259A permite tres modos de operación FULLY NESTED, SPECIAL FULLY NESTED y SPECIAL MASK MODE. 10.4.3. ESTADO DE LOS BITS DEL IRR, ISR Y IMR De entre todos los bits en uno del INTERRUP REQUEST REGISTER se procesara aquel que tenga mayor prioridad. Supóngase que aplicando este criterio se selecciona IRx El PRIORITY SOLVER determinará activar INT de acuerdo al siguiente esquema

Si el modo de operación es FULLY NESTED si no hay ningún bit en el INTERRUP SERVICE REGISTER igual a uno correspondientes a interrupciones con igual o mayor prioridad que IRx.

Si el modo de operación es SPECIAL FULLY NESTED si no hay ningún bit en el INTERRUP SERVICE REGISTER igual a uno correspondientes a interrupciones con mayor prioridad que IRx.

Y además El bit correspondiente a IRx en el INTERRUP MASK REGISTER esta en cero

Una vez activada la señal INT la CPU iniciara el INTA CYCLE cuya ejecución desencadenara el proceso necesario para iniciar la rutina de servicio correspondiente. Durante el INTA CYCLE el bit IRx del INTERRUP REQUEST REGISTER fue blanqueado y el del INTERRUP SERVICE REGISTER fue seteado. Para cerrar el ciclo es necesario blanquear el bit de IRx en el INTERRUP SERVICE REGISTER cuando la rutina de servicio finalice.

10.5. BLANQUEO DEL BIT EN EL INTERRUP SERVICE REGISTER Si un bit determinado en el INTERRUP SERVICE REGISTER esta en uno indica que la rutina de servicio correspondiente a dicha interrupción está en proceso (activa o suspendida pero no finalizado aun). El comando END OF INTERRUP, el cual puede ser enviado al 8259A por la CPU o generado automáticamente por el 8259A es el encargado de blanquear estos bits. Existen distintos tipos de comandos 1) Comando END OF INTERRUP NO ESPECIFICO

Cuando es recibido por el 8259A este blanquea el bit más prioritario de los que se encuentran en uno dentro del INTERRUP SERVICE REGISTER. Cuando se opera en FULLY NESTED el bit en uno más prioritario corresponde a la rutina de servicio que esta activa y por lo tanto el comando no es necesario indicar en el comando cual es el bit a blanquear.

2) Comando END OF INTERRUP ESPECIFICO En este caso el comando informa en forma explícita cual es el bit a blanquear.

3) comando END OF INTERRUP AUTOMATICO Es generado automáticamente por el 8259A al final del INTA CYCLE. Por lo tanto los bits de INTERRUP SERVICE REGISTER permanecen en uno solamente durante cierto tiempo del INTA CYCLE. Ellos son blanqueados antes que la rutina de servicio correspondiente sea iniciada.

MICROPROCESADORES Y MICROORDENADORES Página 68 de 136 Versión del 29/08/a

Este comando solo puede ser usado por el módulo 8259A MASTER en un sistema conectado en cascada.

10.6. CONECCION EN CASCADA DEL 8259A El 8259A permite que en cada una de sus entradas de interrupción sea conectado otro módulo 8259A conformando así una conexión en cascada. El primero recibe el nombre MASTER, los otros de SLAVEs Si se tienen 8 SLAVEs la cantidad de señales distintas de interrupciones posibles asciende a 8 x 8 = 64 La figura muestra la conexión en cascada utilizada por el 80186 donde un 8259A es conectado a la entrada IR7 de 8259A MASTER

El MASTER controla el accionar del SLAVE vía el CASCADE BUS (CAS2:0). Cada SLAVE en un sistema debe tener un ID que lo identifique unívocamente y que debe coincidir con el número de la línea IRx a la cual se encuentra conectado. El ejemplo siguiente muestra la interacción entre el MASTER y el SLAVE Asúmase que: 1) el 8259A MASTER es programado para operación en cascada, con un SLAVE conectado en

IR7 y el esquema de prioridades default

MICROPROCESADORES Y MICROORDENADORES Página 69 de 136 Versión del 29/08/a

2) el 8259A SLAVE es programado para operación en cascada, con un ID=7 y el esquema de prioridades default

3) ambos módulos han sido inicializados recientemente y no hay interrupciones pendientes. 4) Todas las interrupciones en ambos módulos tienen sus bits de enmascaramiento iguales a cero. Una secuencia típica podría ser: 1) una interrupción setea el bit 2 en el INTERRUP REQUEST REGISTER del SLAVE 2) El PRIORITY SOLVER del SLAVE chequea si otros bits más prioritarios están seteados en el

INTERRUP REQUEST REGISTER. Esto no es así. 3) El PRIORITY SOLVER del SLAVE chequea si otros bits correspondientes a interrupciones de

mayor o igual prioridad que IR2 están seteados en INTERRUP SERVICE REGISTER. Esto no ocurre.

4) En este momento el PRIORITY SOLVER del SLAVE ha determinado que IR2 tiene suficiente prioridad como para requerir una in por lo que activara IR7 del MASTER.

5) El bit IR7 del INTERRUP REQUEST REGISTER del MASTER será seteado 6) El PRIORITY SOLVER del MASTER chequeara si IR7 tiene suficiente prioridad para solicitar

una in (lo que en este caso resulta afirmativo) y por lo tanto se activara INT. 7) La CPU iniciara un INTA CYCLE. 8) En el primer frente negativo de INTA se:

a) Blanqueará IR7 del INTERRUP REQUEST REGISTER del MASTER. b) Seteará IR7 del INTERRUP SERVICE REGISTER del MASTER. c) Como el MASTER conoce que sobre la línea 7 existe un SLAVE coloca en CAS2:0 el

ID del SLAVE correspondiente, en este caso “7” d) Como el SLAVE reconoce en CAS2:0 su propio ID se encargará de blanquear su bit 2

en el INTERRUP REQUEST REGISTER y seteará su bit 2 en el INTERRUP SERVICE REGISTER.

9) En el segundo frente negativo de INTA. a) el SLAVE presentará sobre el data bus el tipo de interrupción solicitado, en este caso

IR2 b) el MASTER reconoce que la interrupción proviene de un SLAVE y por lo tanto presenta

alta impedancia al bus de datos durante este INTA CYCLE. 10) La CPU ejecutará la secuencia correspondiente al tipo de interrupción IR2 e iniciará la rutina de

servicio correspondiente. 11) Cuando la rutina de servicio finaliza en este caso debe emitir dos END OF INTERRUP; uno

para el MASTER y otro para el SLAVE. Estos dos END OF INTERRUP blanquearan el bit IR7 del INTERRUP SERVICE REGISTER

del MASTER y el bit IR2 del INTERRUP SERVICE REGISTER del SLAVE. Es en este caso que resulta de utilidad el modo de operación SPECIAL FULLY NESTED. Así como están planteadas las cosas si ambos módulos usaran el modo FULLY NESTED mientras se procesa la rutina de servicio correspondiente a IR2 toda nueva in en las señales del SLAVE será ignoradas pues por mas que el PRIORITY SOLVER del SLAVE determine que son más prioritarias que IR2 al setear IR7 en el MASTER el PRIORITY SOLVER del MASTER las ignorará pues el bit 7 del INTERRUP SERVICE REGISTER del MASTER esta en uno. Especificando para el MASTER el modo de operación SPECIAL FULLY NESTED se resuelve el problema pero se genera otro que debe ser tenido en cuenta en la programación. Se ha dicho que cuando la rutina de servicio finaliza debe emitir dos END OF INTERRUP, uno para el SLAVE y el otro para el MASTER. El END OF INTERRUP para el MASTER solo debe

MICROPROCESADORES Y MICROORDENADORES Página 70 de 136 Versión del 29/08/a

enviarse si la rutina de servicio corresponde a un único bit en uno en el INTERRUP SERVICE REGISTER de SLAVE. El procedimiento a seguir sería: a) Enviar un END OF INTERRUP especifico al SLAVE indicando el ir al que corresponde la

presente rutina de servicio. b) Solo si el INTERRUP SERVICE REGISTER del SLAVE tiene todos ceros enviar el END OF

INTERRUP al MASTER. c) Queda claro que el modo de operación SPECIAL FULLY NESTED solo puede ser usado por el

módulo MASTER en un sistema en cascada.

10.7. ESQUEMA DE LA UNIDAD DE CONTROL DE INTERRUPCIONES EN EL 8259A En el 80186 la unidad de control de interrupciones esta compuesta por dos módulos 8259A conectados en cascada y tres registros (Request Latch Register). El módulo SLAVE controla 7 fuentes de interrupciones internas y una fuente de in externa (INT7). El módulo MASTER controla al SLAVE y 7 fuentes de interrupciones externas (INT0 a INT7). La siguiente figura muestra el esquema correspondiente

MICROPROCESADORES Y MICROORDENADORES Página 71 de 136 Versión del 29/08/a

10.8. PROGRAMANDO EL MODULO 8259A El conjunto de registros de comandos que controlan al 8259A se divide en dos grupos: INITIALIZATION COMMAND WORDS (ICW) y OPERATION COMMAND WORDS (OCW). Los primeros son programados generalmente una única vez durante la inicialización del sistema mientras que los segundos son programados en distintos momentos durante la ejecución de un programa. Todos los registros son vistos a través de solo dos registros que se ubican en la PCB. En la escritura el registro a grabar queda determinado por: a) el registro dentro de la PCB seleccionado b) el valor de algunos bits a grabar c) la secuencia a través de la cual se graba d) En el caso de lectura, primero es necesario enviar un comando de lectura y luego leer el registro

de la PCB que corresponda. 10.8.1. REGISTROS DE CONTROL Y COMANDOS DEL 8259A

Como en el caso del 80186 bajo estudio existen dos módulos 8259A en la PCB existirán dos juegos de registros de control. Para le módulo MASTER: MPICP0 y MPICP1 Para el módulo SLAVE. SPICP0 y SPICP1

10.8.2. SECUENCIA DE INICIALIZACION Los módulos 8259A deben ser inicializados. El contenido de sus registros es indefinido luego del reset. El diagrama que sigue muestra la secuencia obligatoria que debe seguirse en el proceso de inicialización

MICROPROCESADORES Y MICROORDENADORES Página 72 de 136 Versión del 29/08/a

10.8.2.1.ICW1 La grabación de ICW1 se logra grabando el registro xPICP0 con el bit 4 igual a 1. Al grabar ICW1 se realizan las siguientes acciones

a) El INTERRUP MASK REGISTER es blanqueado b) El IR7 es asignado a la prioridad más baja. c) El modo de operación SPECIAL MASK MODE es inhibido d) El bit de lectura de estados es seteado de forma tal que las lecturas sucesivas direccionarán al

INTERRUP REQUEST REGISTER.

Además según el valor de ciertos bits:

e) Se selecciona si la detección de las interrupciones será vía nivel o por frente(bit 3). f) Se define la presencia del módulo SLAVE (bit 1). g) Se identifica que existirán ICW4 (bit 0).

El formato del registro a grabar es: Bit 0 IC4 si = 1 existirá ICW4. Es obligatorio en un sistema cascada. Bit 1 SNGL si = 1 indica que no hay SLAVEs. Bit 3 LTIM si = 1 la detección será por nivel Bit 4 debe ser uno Los bits 2, 5, 6 y 7 deben ser cero, los otros no son representativos pero se recomienda que sean cero por cuestiones de compatibilidad futura. 10.8.2.2.ICW2 Se graba accediendo al registro xP1CP1. Solo son de significación los bits 3 a 7 donde debe indicarse la dirección base para el cálculo del tipo de interrupción que informará el módulo. Durante el INTA CYCLE el módulo debe informar a la CPU el tipo de interrupción que solicito la atención. El tipo de interrupción será calculado como: Dirección base * 8 + número de la línea que genera la interrupción Ejemplo: Bit 7 a 3 = 00101= 5 Dirección base = 5 * 8 = 40 Si la in la genera IR3 el 8259A informara como tipo de interrupción el 43 por lo que la CPU iniciara la rutina de servicio ubicada en la dirección CS:IP con IP igual al contenido del offset 43 * 4 = 172 dentro de la Interrupt Control Table y CS igual al contenido del offset 173 dentro de dicha tabla. Nota: los tipo de interrupción números 0 a 31 son reservados por INTEL 10.8.2.3.ICW3 También se graba accediendo al registro xP1CP1. Solo tiene sentido en un sistema donde existan SLAVEs. La secuencia fija el registro de destino, la segunda grabación sobre xP1CP1 indica que es ICW3. El significado de los bits a grabar cambia si se trata de un módulo MASTER o de SLAVE.

MICROPROCESADORES Y MICROORDENADORES Página 73 de 136 Versión del 29/08/a

Para el MASTER solo tienen significado los bit 0 a 7 y aquellos iguales a uno indicaran la presencia de un SLAVE en el IR correspondiente. Para un SLAVE solo tienen significado los bits 0 a 2 y representan el ID del SLAVE. 10.8.2.4.ICW4 También se graba accediendo al registro xP1CP1. Para el SLAVE siempre debe ser 0001h Para el MASTER solo los bits 0, 1 y 4 tienen significado: Bit 0 debe ser uno Bit 1 AEOI Si = 1 se selecciona el modo automático de generación de END OF INTERRUP Bit 4 SFNM si = 1 se selecciona el modo de operación SPECIAL FULLY NESTED. 10.8.3. COMANDOS DE OPERACIÓN Existen tres comandos diferentes OCW1, OCW2 y OCW3 10.8.3.1.OCW1 Se graba accediendo a xP1CP1 y fija los valores del INTERRUP MASK REGISTER. Un bit igual a UNO inhibe toda interrupción desde el IR correspondiente. Los valores actuales del INTERRUP MASK REGISTER pueden ser leídos leyendo directamente el registro cP1CP1. 10.8.3.2.OCW2 Se graba accediendo al registro xP1CP0 con los bit 3 y 4 iguales a cero. Los bits 5, 6 y 7 (EOI, SL, R) definen la operación deseada de acuerdo a la siguiente tabla.

Los bits 0, 1 y 2 (L0, L1 Y L2) solo tienen significado en aquellos operaciones que así lo indican en la tabla precedente con un * y representan el número de la interrupcion 10.8.3.3.OCW3 Se graba accediendo al registro xP1CP0 con el bit 3 igual a uno y el bit 4 igual a cero. Permite seleccionar el modo de operación SPECIAL MASK MODE y definir cual registro será leído cuando se lea xP1CP0. Los bits que proveen esta información tienen cada uno un bit de control que habilita o deshabilita la posibilidad de grabación del bit en cuestión para evitar posibles grabaciones por error. Bit 6 ESMM debe ser = 1 para poder modificar SPECIAL MASK MODE Bit 5 SMM selecciona SPECIAL MASK MODE. Bit 1 ERR debe ser = 1 para poder modificar RSEL. Bit 0 RSEL determina que registro será leído al leer xP1CP0

Si = 1 se leerá INTERRUP SERVICE REGISTER; si = 0 se leerá INTERRUP REQUEST REGISTER.

Bit 3 debe ser igual a uno Bit 2, 4 y 7 deben ser cero.

MICROPROCESADORES Y MICROORDENADORES Página 74 de 136 Versión del 29/08/a

10.8.4. FUENTES DE INTERRUPCION INTERNAS El 80186 tiene 11 fuentes de interrupciones internas. Tres corresponden a la unidad de temporizadores, 4 a la unidad de acceso directo a memoria y 4 a la unidad de entrada salida serie. Estas señales son manejadas por tres registros llamados Interrupt Request Latch Register que están representados en la PCB en las posiciones TIMIRL, DMAIRL SCUIRL La figura muestra el esquema correspondiente

El formato de los tres registros INTERRUP REQUEST LATCH REGISTER es: DMAIRL Bits 0 a 3 representan los cuatro canales DMA. Un valor igual a uno significa que el canal

correspondiente esta solicitando una interrupción. Bits 8 a 11 son bits de control que habilitan o deshabilitan la posibilidad de grabar los cuatros

menos significativos. Solo si son iguales a uno habilitan la modificación del correspondiente bit del otro grupo.

SCUIRL Bits 0 a 3 representan los cuatro canales SERIE. Un valor igual a uno significa que el canal

correspondiente esta solicitando una interrupción. Bits 8 a 11 son bits de control que habilitan o deshabilitan la posibilidad de grabar los cuatros

menos significativos. Solo si son iguales a uno habilitan la modificación del correspondiente bit del otro grupo.

MICROPROCESADORES Y MICROORDENADORES Página 75 de 136 Versión del 29/08/a

TIMIRL Bits 0 a 2 representan los tres temporizadores. Un valor igual a uno significa que el temporizador

correspondiente esta solicitando una interrupción. Bits 8 a 10 son bits de control que habilitan o deshabilitan la posibilidad de grabar los tres menos

significativos. Solo si son iguales a uno habilitan la modificación del correspondiente bit del otro grupo.

Los bits menos significativos pueden leerse y/o grabarse, los que representan a las mascaras son solo de lectura. La rutina de servicio que maneja la in generada por un periférico integrado debe blanquear antes de devolver el control el bit que le corresponda en el INTERRUP REQUEST LATCH REGISTER pues sino la línea IR permanecerá alta y se requerirá otra interrupción. Por ejemplo antes de finalizar la rutina de servicio de una in generada por el temporizador TIME1 debe blanquearse el bit correspondiente grabando en el registro de la PCB TIMIRL el valor 0200h.

10.9. EJEMPLOS DE PROGRAMAS El primer programa muestra la secuencia de instrucciones necesarias para inicializar la unidad de control de interrupciones.

MOD186

NAME 80C186EC_ICU_INITIALIZATION_TEMPLATE

; El siguiente código debería encontrarse típicamente en la sección de booteo de un sistema. ; se asume que las instrucciones que asignan valor a los mnemotécnicos correspondientes a los ; registros de la PCB se encuentran en el archivo “ pcb_equates.inc”

$INCLUDE (PCB_EQUATES.INC)

BOOT_ROM SEGMENT ;es el nombre del segmento ASSUME CS:BOOT_ROM, DS:NOTHING

; se blanquea el bit que habilita las interrupciones en la CPU CLI

; Se ajustará la Interrupt Vector Table. ; Solamente se mostrara el código para la inicialización de la interrupción del TIME0, para el cual se ; usará el tipo de interrupción número 28h

;inicialización. ;

XOR AX, AX ;Clear MOV DS, AX ;CS apunta al Vector Table MOV AX, OFFSET TIM0_HANDLER MOV BX, 28H*4 MOV DS:[BX], AX ;Almacena el offset del handler MOV AX, SEG TIM0_HANDLER MOV BX, 28H*4+2 MOV DS:[BX], AX ;Almacena el segmento del handler

MICROPROCESADORES Y MICROORDENADORES Página 76 de 136 Versión del 29/08/a

;El resto de los vectores debería inicializarse en forma similar. ;Comienza la inic ialización del módulo 8259A SLAVE

MOV DX, SPICP0 ;ICW1 vía SPICP0 XOR AH, AH ;blanquea los bits reservados MOV AL, 10001B ;Detección por flanco, cascada ,requiere IC4 OUT DX, AL

;se define como dirección base 28h en el SLAVE vía ICW2 MOV DX, SPICP1 ;ICW2 vía SPICP1 MOV AL, 28H ;Dirección base es 28H (Type 40) OUT DX, AL

; En ICW∙ se define como ID del SLAVE “ 7” . MOV DX, SPICP1 ;ICW3 vía SPICP1 MOV AL, 7 ;ID=7 OUT DX, AL

; se completa la inicialización con ICW4 MOV DX, SPICP1 ;ICW4 vía SPICP1

MOV AL, 1 ;No special fully nested mode ;No AEOI mode

OUT DX, AL

;La inic ialización del módulo SLAVE esta terminada

;Comienza la inic ialización del módulo MASTER MOV DX, MPICP0 ;ICW1 vía MPICP0 XOR AH, AH ;se blanquean los bits reservados MOV AL, 10001B ;Detección por flancos, cascada,

;requiere ICW4 OUT DX, AL

;Se define como dirección base para el MASTER 20h ; Esto creara un block contiguo de direcciones para la unidad de control de interrupciones desde el tipo de interrupción 20h hasta el 2fh.

MOV DX, MPICP1 ;ICW2 vía MPICP1 MOV AL, 20H ;Dirección base 20H (Type 32) OUT DX, AL

;Se continua con ICW3MOV DX, MPICP1 ;ICW3 vía MPICP1 MOV AL, 80H ;el módulo SLAVE esta en IR7 OUT DX, AL

;ICW4 termina la inic ialización MOV DX, MPICP1 ;ICW4 vía MPICP1 MOV AL, 1B ;No special fully nested mode,

;no AEOI mode OUT DX, AL

;Inicialización es completa ; Se desenmascaran las interrupciones.

STI BOOT_ROM ENDS

El segundo muestra la codificación de una rutina de servicio.

INT_HNDLERS SEGMENT ASSUME CS:INT_HNDLRS

MICROPROCESADORES Y MICROORDENADORES Página 77 de 136 Versión del 29/08/a

TIM0_HANDLER PROC FAR STI ;Necesario s i se desea anidar interrupciones

;Aquí debería insertarse el código especifico para el tratamiento de la interrupción

; instrucciones requeridas al final de la rutina MOV DX, TIMIRL ;Blanquea la interrupción en el registro IRLR MOV AX, 0100H ;TIMER 0 (MSK0=1, TIR0=0) OUT DX, AL ; MOV DX, MPICP0 ;Comando EOI vía OCW2 MOV AX, 20H , No especifico al MASTER OUT DX, AL MOV DX, SPICP0 ;Comando EOI vía OCW2 MOV AX, 20H ;No especifico OUT DX, AL ;al SLAVE IRET ;Return

TIM0_HANDLER ENDP INT_HNDLRS ENDS

10.10. EXPANDIENDO LA CANTIDAD DE SEÑALES DE INTERRUPCION. Si se deseara expandir la capacidad de manejo de interrupciones del 80186 más allá de las 8 aceptadas en su estructura interna podrían conectarse dispositivos 8259A externamente a cada una de las señales IR0 a IR6 del 80186. Supóngase el caso de conectarlo a IR6. La figura muestra el conexionado requerido:

Define al 8259A como SLAVE

GSC – CS es la conexión que habilita la programación del 8259A.

MICROPROCESADORES Y MICROORDENADORES Página 78 de 136 Versión del 29/08/a

Como se ha visto anteriormente toda la programación se realiza solo a través de dos direcciones. Cuando se trata de los dispositivos 8259A integrados dichas direcciones eran xPICP0 y xPICP1 que se encuentran en la PCB. Cuando el 8259A es externo también se le deben asignar dos direcciones pares, de 16 bits cada una y consecutivas. Aquella que tenga A1 igual a cero corresponderá a SPICP0 y la que tenga A1 igual a uno a SPICP1. Cuando dichas direcciones se encuentren presentes en el bus de direcciones la señal CS deberá activarse. Siguiendo los procedimientos descriptos anteriormente podrá entonces generarse las ICW de inicialización y las OCW de operación que se requieran para la programación del módulo 8259A. Si se decide utilizar la unidad selectora de chips para seleccionar al 8259A esta debe configurarse en consecuencia. Como el mínimo espacio de direcciones mapeado por una de las señales de GCS es de 64 direcciones en este caso se desperdician 62 (solo se usan dos registros de 16 bits cada uno). Cuando una de las señales IR0 a IR7 de este 8259A se activa, el módulo establece si tiene entidad como para activar INT. En caso afirmativo esto genera una activación en IR6 del MASTER del 80186 el cual solicitará un INTA CYCLE. Cuando la CPU genere el INTA CYCLE el MASTER reconoce que para IR6 tiene un SLAVE conectado y entonces genera el ID correspondiente en CAS2:0 el cual también se presentará en AD15:13 y por lo tanto transferido al SLAVE externo. Este reconoce su propio ID y responderá entregando en el bus de datos (los 8 bits menos representativos) el tipo de interrupción requerido. Si de acuerdo con las características técnicas del dispositivo utilizado es necesario generar WAIT STATES se puede usar la facilidad que en ese sentido brinda la unidad de selección de chips.

MICROPROCESADORES Y MICROORDENADORES Página 79 de 136 Versión del 29/08/a

11. UNIDAD TEMPORIZADORA Y DE CONTADORES. 11.1. DESCRIPCION FUNCIONAL. La unidad temporizadora y de contadores permite tener un adecuado manejo del tiempo. Aplicaciones típicas que requieren esta funcionalidad son:

1) Actualización de una variable cada x milisegundos. 2) Generación de ondas cuadradas o rectangulares. 3) Generación de ondas tipo UN­Disparo. 4) Medición del tiempo transcurrido entre dos eventos. 5) Generación de un evento determinado tiempo después de producido otro o con una frecuencia

especifica. La figura muestra el esquema general de la unidad correspondiente al 80186

Los tres contadores TIMER0, TIMER1, TIMER2 son manejados indistintamente por la CPU o por el Counter Element pero en forma sincronizada. Cada contador es servido en un bit time diferente de un ciclo de 4 bits time. Durante los tres primeros bits time son servidos los contadores TIMER0, TIMER1 y TIMER2 respectivamente, reservándose el cuarto bit time como IDLE. Cuando un TIMER es servido su valor corriente es incrementado si corresponde y comparado con uno o dos valores máximos que el TIMER puede tener asociados. Por programa se define que hacer cuando la comparación resulta por igual. Las alternativas son:

Bloquear el TIMER para impedir que siga trabajando(un único ciclo) o dejarlo habilitado y permitir un trabajo cíclico.

MICROPROCESADORES Y MICROORDENADORES Página 80 de 136 Versión del 29/08/a

Interrumpir o no a la CPU. Por otro lado el valor corriente del contador siempre será reseteado a cero TIMER0 y TIMER1 son similares pero en cambio TIMER2 solo tiene un subconjunto de las funciones de TIMER0 o TIMER1. En cambio es el único que puede funcionar como disparador para los otros dos cuando su propio valor corriente alcanza su máximo valor. Cada TIMER tiene asociado tres registros básicos: TxCON registro que controla el funcionamiento del t. TxCNT registro que almacena el valor corriente del t. TxCMPA registro que almacena el valor máximo del t. Los TIMERS 0 y 1 tienen un segundo registro para almacenar un valor máximo llamado TxCMPB. Según el valor de uno de los bits de TxCON el valor corriente será comparado con TxCMPA o con TxCMPB.

11.2. DIAGRAMA OPERACIONAL El diagrama de flujo que sigue muestra la actividad desarrollada tanto para TIMER0 como para TIMER1 cada vez que el TIMER correspondiente sea servido. En primer lugar se determina si el valor corriente debe ser o no incrementado.

1

2

4

3

5

6

MICROPROCESADORES Y MICROORDENADORES Página 81 de 136 Versión del 29/08/a

2

3

4

5

EN bit de TxCON que indica si el TIMER esta habilitado o no.

EXT bit en TxCON que indica si el TIMER será activado EXTERNA o INTERNAMENTE Si EXTERNAMENTE cuando la señal TxIn transite de cero a uno.

RTG bit de TxCON que solo tiene significado si EXT = 1 e indica que si TxIn pasó de cero a uno el contador debe ser reseteado.

Si EXT = 0 la señal TxIn debe permanecer en uno para que el TIMER sea servido. Mientras TxIn sea cero el valor corriente del TIMER permanecerá constante.

P bit del TxCON que indica si el TIMER será pre – escalado. Si el TIMER es activado internamente será normalmente servido a una frecuencia igual a CLKOUT / 4. Si se desea trabajar a frecuencias menores se debe hacer P = 1 y colocar en valor máximo de TIMER2 el divisor deseado. Con P = 1 el valor corriente de TIMER0 o TIMER1 solo será incrementado si además de cumplirse el resto de los requisitos establecidos resulta que TIMER2 –alcanzo su máximo valor durante el tiempo transcurrido desde la ultima vez que el TIMER en cuestión fue servido y este servicio.

Luego de tomada la decisión acerca de si debe o no incrementarse el valor corriente se analizan las restantes acciones a ejecutar de acuerdo al siguiente diagrama:

No

Yes

Set MC = 1 Set MC = 1 Set MC = 1

1

7

6

9

9 8

9

11

10 10

MICROPROCESADORES Y MICROORDENADORES Página 82 de 136 Versión del 29/08/a

ALT bit de TxCON que indica si se está usando un único valor máximo o dos. Trabaja en asociación con:

RIU bit de TxCON que indica en el caso de trabajar con dos valores máximos contra cual de ellos deberá compararse el valor corriente actual. Si RIU = 0 se compara contra TxCMPA; si RIU = 1 se compara contra TxCMPB.

Si no se alcanzó el valor máximo correspondiente no hay mas nada que hacer. En caso contrario se fija el valor de la señal de salida TxOUT, se fija MC = 1, se determina si se dará por terminado el ciclo o se iniciará automáticamente uno nuevo y por ultimo si debe generarse o no una interrupción a la CPU.

CON bit de TxCON que indica si se desea trabajar en modo continuo o único ciclo. En este ultimo caso, completado el ciclo el TIMER se inhabilita.

INT bit de TxCON que indica si se desea interrumpir a la CPU cada vez que termina un ciclo.

Cada vez que el TIMER alcanza su valor máximo es reseteado haciendo que su valor corriente sea cero.

TIMER2 es un caso particular dentro de los TIMERS. No tiene señal de entrada ni de salida asociadas por lo que no puede generar ninguna señal de salida

y solo puede ser activado permanentemente en forma interna. Además solo admite un único valor máximo.

Los bits EXT; RTG; P; ALT y RIU no existen en el registro T2CON.

11.3. REGISTROS ASOCIADOS A CADA CONTADOR O TIMER. Las figuras que siguen muestran los formatos de los registros mencionados previamente. T0CON y T1CON

T2CON

12 7

8

10

9

11

12

MICROPROCESADORES Y MICROORDENADORES Página 83 de 136 Versión del 29/08/a

MC: Este bit es seteado a uno cuando el contador alcanza su máximo valor. El debe ser reseteado grabando el registr o que lo contiene. Esto no es hecho en forma automática INH: Es el bit que habilita la posible grabación del bit EN. Este ultimo solo podrá grabarse si simultáneamente se fija INH = 1.

T0CNT, T1CNT y T2CNT

T0CMPA, T0CMPB, T1CMPA, T1CMPB y T2CMPA

11.4. PROGRAMACION DE LA UNIDAD TEMPORIZADORA Y DE CONTADORES. La secuencia de inicialización recomendada es la siguiente: 1) Si se usará interrupciones programar la INTERRUP VECTOR TABLE en correspondencia. 2) Blanquear el correspondiente TxCNT. Luego del reseteado el sistema los valores asumidos por

cada uno de los contadores es indeterminado. 3) Grabar los valores requeridos en TxCMPA y TxCMPB según corresponda. 4) Grabar TxCON con los bits adecuados. Entre ellos por supuesto deberá estar EN para habilitar

al contador. Si se usará TIMER2 para pre – escalar es necesario habilitarlo a posteriori del TIMER que lo requerirá.

11.5. COMENTARIOS ADICIONALES 11.5.1. FUENTES PARA LA OBTENCION DEL CLOCK DE LOS CONTADORES. Los contadores son incrementados una vez en cada evento. Un evento puede ser la transición de cero a uno de la señal que alimenta al pin de entrada (casos de TIMER0 y TIMER1), un pulso generado cada cuatro ciclos del clock de la CPU o un pulso generado por TIMER2 al alcanzar su valor máximo. TIMER0 y TIMER1 pueden contar las transiciones de cero a uno de la señal de entrada si son programados con EXT = 1. Las transiciones del pin externo son sincronizadas por el clock de la CPU antes de ser presentadas a los circuitos de la unidad temporizadora. 11.5.2. MODOS DE OPERACIÓN DE LOS CONTADORES Cuando el valor corriente de un contador iguala su máximo valor es reseteado a cero. El máximo valor nunca será grabado en el registro pues la comparación y el reseteo se realizan en el mismo bit time. Es importante destacar que la comparación es solo por igual y no por igual o mayor . Si en el inicio resultara que el valor corriente es superior al valor máximo el contador seguirá incrementándose

MICROPROCESADORES Y MICROORDENADORES Página 84 de 136 Versión del 29/08/a

hasta alcanzar el valor 0FFFFh, luego asumirá el valor cero y seguirá hasta v alcanzar finalmente el valor máximo. Cuando el valor corriente resulta igual al valor máximo se setea en uno el bit MC. Este bit no es reseteado automáticamente y es necesario hacerlo manualmente (grabando el registro TxCON) si así se lo requiere. El valor máximo puede ser modificado en cualquier momento grabando el registro correspondiente. 11.5.3. RE – INICIALIZACION. La señal de entrada presente en el pin TxIn afecta al contador de tres formas diferentes dependiendo del valor que asuman los bits EXT y RTG en el TxCON correspondiente. EXT = RTG = 0 En este caso el contador reacciona a eventos internos y es sensitivo al valor de la señal TxIn y no a sus transiciones. TxIn actúa como una señal de inhibición externa. Si es igual a uno el contador esta habilitado, en caso contrario el contador esta inhibido. EXT= 0, RTG = 1 en este caso el contador reacciona a eventos internos pero la señal TxIn actúa como reinicializadora. Una transición de cero a uno en TxIn hará que el contador sea reseteado a cero. Luego de que el contador sea habilitado con EN = 1 la cuenta comenzará con la primera transición de cero a uno de TxIn. En el modo con dos valores máximo el reseteo debido a TxIn no modifica la variable RIU. EXT = 1 la señal en TxIn actúa directamente como si fuera el clock del contador. 11.5.4. ONDAS RECTANGULARES Y UN – DISPARO. La señal de salida asociada a los TIMER0 y TIMER1 puede adoptar dos formatos distintos. Cuando el contador tiene un único valor máximo asociado la señal tiene la forma de un único pulso de duración igual a un bit time el cual indica la finalización de un ciclo. Esta salida ocurre durante el bit time posterior a aquel en el que el contador alcanzó su valor máximo. La siguiente figura muestra esta situación:

Cuando existen dos valores máximos la señal tiene la forma de una onda rectangular que representa a la variable RIU. Mientras RIU = 0 se usara como valor de comparación TxCMPA y la señal de salida será uno, mientras RIU = 1 se usará TxCMPB y la señal de salida será cero. Por ejemplo si TxCMPA = 10, TxCMPB = 20 y CLKOUT es 12,5 MHz, el contador trabajara a una frecuencia de 12,5 / 4 = 3.125 MHz y como se necesitaran 30 pulsos para completar un ciclo la onda de salida será de una frecuencia de 104,166 KHz. Permanecerá el 33,33 % en un valor y el 66,66% en el otro.

MICROPROCESADORES Y MICROORDENADORES Página 85 de 136 Versión del 29/08/a

11.5.5. HABILITANDO Y DESHABILITANDO LOS CONTARORES. Cada contador tiene asociado en el registro TxCON el bit EN que habilita o deshabilita el funcionamiento del contador. El bit INH controla el acceso al bit EN. Si EN = 0 el contador no es incrementado cuando es servido. El valor de EN puede ser manejado por programa o por el sistema. La unidad de contadores hace EN = 0 al finalizar un ciclo si el bit CONT es cero. La finalización de un ciclo se produce cuando el valor corriente del contador iguala al valor máximo especificado en TxCMPA si se trata de una operación con un solo valor máximo (ALT = 0) o cuando el valor corriente alcanza el valor máximo especificado en TxCMPB si ALT = 1. Para el TIMER0 y el TIMER1 cuando trabajan activados por el clock interno la señal TxIn también puede actuar como inhibidora. Si RTG = 0 un nivel cero en TxIn inhibe el funcionamiento del contador, mientras que si RTG = 1un frente de onda de cero a uno lo resetea. Si la señal actuará por nivel su valor debe permanecer al menos cuatro bits time del clock de la CPU. 11.5.6. INTERRUPCIONES Todos los contadores pueden generar interrupciones a la CPU. Si bien todos comparten un único interrupt request cada uno tiene su propia ubicación en la INTERRUP VECTOR TABLE y su prioridad. TIMER0 tiene la mayor prioridad y TIMER2 la menor. La interrupción se generará en función del valor que asuma el bit INT en el registro TxCON. Si ALT = 0 la interrupción se generará cuando el valor corriente alcance al valor de TxCMPA. Si ALT = 1 la interrupción se generará tanto cuando el valor corriente alcance TxCMPA como cuando alcance TxCMPB. 11.5.7. TIEMPOS DE SETUP Y RETENCION DE LAS SEÑALES DE ENTRADA Para asegurar el correcto desempeño de los contadores la señal de entrada debe satisfacer ciertos requerimientos respecto del frente de onda del clock del sistema. La señal de entrada debe ser valida Tchis antes del flanco positivo de CLKOUT y debe permanecer valida al menos Tchih luego de dicho pulso. Si estos requerimientos no son satisfechos la señal de entrada no será reconocida hasta el próximo frente de onda del clock.

11.6. EJEMPLOS 11.6.1. IMPLEMENTACION DE UN RELOJ 11.6.1.1. Descr ipcion General Supóngase que se desea tener en memoria tres variables que representen la hora, los minutos y los segundos que lleva un programa en ejecución. CLKOUT = 16 Mhz Frecuencia de servicio de contadores = 16 / 4 = 4 Mhz 1/f = 0,25 10 ­6 seg. = 250 10 ­6

milisegundos Mínimo intervalo exigido para la actualización = 10 milisegundos. Se usara t2. T2CMPA = 10 / 250 10 ­6 =10.000.000 / 250 = 40.000 Inicialización de la Unidad de Control de Interrupciones

a) Blanquear el INTERRUP REQUEST LATCH REGISTER de la unidad de temporizadores (TIMIRL) y las variables que almacenaran horas, minutos y segundos (HOR; MIN; SEG)

b) SLAVE ICW1 se elige flanco, presencia de SLAVE e ICW4

MICROPROCESADORES Y MICROORDENADORES Página 86 de 136 Versión del 29/08/a

ICW2 dirección base para el SLAVE = 104 ICW3 id del SLAVE = 7 ICW4 valor fijo = 0001h

c) MASTER ICW1 se elige flanco, presencia de SLAVE e ICW4 ICW2 dirección base para el MASTER = 96 ICW3 identifica al SLAVE en el IR7 ICW4 valor en 0011h modo SPECIAL FULLY NESTED

Con las direcciones base especificada para el SLAVE (104) y el MASTER (96) se ha generado el siguiente block de tipo de interrupciones:

8259A IR TIPO DE FUNCION DESPLAZAM INTERRUPCION DENTRO DE

LA IVT MASTER 0 96 INT0 96*4=384d=180h MASTER 1 97 INT1 184h MASTER 2 98 INT2 188h MASTER 3 99 INT3 18Ch MASTER 4 100 INT4 190h MASTER 5 101 INT5 194h MASTER 6 102 INT6 198h MASTER 7 103 SLAVE 19Ch SLAVE 0 104 TIMER0 1A0h SLAVE 1 105 TIMER1 1A4h SLAVE 2 106 DMA2 1A8h SLAVE 3 107 DMA3 1ACh SLAVE 4 108 TIMER2 1B0h SLAVE 5 109 RX 0 1B4h SLAVE 6 110 TX 0 1B8h SLAVE 7 111 INT 7 1BCh

Inicialización de la tabla de vectores de interrupciones

c) colocar en el desplazamiento 1B0 de la IVT el desplazamiento de la dirección donde se alojará la ISR que tratará la interrupción y en el desplazamiento 1B2 de la IVT el segmento de la dirección donde se alojará la ISR que tratará la interrupción.

e) Inicialización del TIMER2 T2CNT = 0 T2CMPA = 40.000d = 9C40h T2CON = 1110 0000 0000 0001

Habilita interrupción Modo continuo

MICROPROCESADORES Y MICROORDENADORES Página 87 de 136 Versión del 29/08/a

Permite habilitar al contador Habilita al contador

f) Habilitar interrupciones haciendo uno el bit correspondiente en la PSW En la dirección SEG:DESPLAZ especificada se codificará la rutina de servicio de la interrupción. g) ProcesoInterrupcionTimer2 (cada 10 milisegundos)

Sumar 1 a MILISEG Si MILISEG = 100 hacer MILISEG = 0; SEG = SEG + 1 Si SEG = 60 hacer SEG = 0; MIN = MIN + 1 Si MIN = 60 hacer MIN = 0; HOR = HOR + 1

h) Blanquear en el INTERRUP REQUEST LATCH REGISTER el bit correspondiente a TIMER2

i) Enviar un SPECIFIC EOI de TIMER2 al SLAVE Si todos los bits del ISR del SLAVE están en cero enviar un SPECIFIC EOI de IR7 al MASTER Emitir IRET instrucción que finaliza toda rutina de servicio de interrupciones.

11.6.1.2. Programa $ TITLE (82C59 Programming Example) $ MOD186 NAME ICU_DEMO $INCLUDE (C:\EV186EC\ECPCB.INC) ; CONTIENE TODAS LAS DEFINICIONES DE LA PCB MASTER_BASE_TYPE EQU 96 ;TYPE*4 = BASE ADDR OF MASTER SLAVE_BASE_TYPE EQU 104 ;TYPE*4 = BASE ADDR OF SLAVE INT_TIMER2_TYPE EQU SLAVE_BASE_TYPE + 4

DATA SEGMENT PUBLIC ’DATA’ PUBLIC HOR, MIN, SEGU, MILISEG

HOR DB ? MIN DB ? SEGU DB ? MSEG DB ? DATA ENDS EC_CODE SEGMENT AT 0100H ;PUT CODE IN SRAM

ASSUME CS:EC_CODE MAIN: CLI ;DISABLE INTERRUPTS

CALL INIT_ICU ;INITIALIZE INTERRUPT CONTROL ;UNIT

CALL SETVECT ;INITIALIZE INTERRUPT VECTORS CALL SETTIMER2 STI ;ENABLE INTERRUPTS JMP $ ;WAIT FOR INTERRUPTS

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ;;THIS PROCEDURE INITIALIZES THE INTERNAL MASTER AND SLAVE 82C59 OF THE ;80C186EC PROCESSOR ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ INIT_ICU PROC ;ALL OF THE INTERNAL PERIPHERAL INTERRUPT REQUEST LATCHES SHOULD ;BE CLEARED FOR SAFE MEASURE

MOV DX, SCUIRL MOV AX, 0F00H OUT DX, AX

MICROPROCESADORES Y MICROORDENADORES Página 88 de 136 Versión del 29/08/a

MOV DX, TIMIRL OUT DX, AX MOV DX, DMAIRL OUT DX, AX

;INITIALIZE SLAVE 82C59 MODULE MOV DX, SPICP0 ;ICW1 ­>SPICP0 XOR AH, AH ;CLEAR RESERVED BITS MOV AL, 11H ;EDGE TRIG, CASCADE, IC4 REQRD OUT DX, AL

;SET BASE INTERRUPT TYPE AT 104 FOR SLAVE MOV DX, SPICP1 ;ICW2 ­>SPICP1 MOV AL, SLAVE_BASE_TYPE ;BASE ADDRESS AT 01A0H OUT DX, AL

;SLAVE ID MOV DX, SPICP1 ;ICW3 ­>SPICP1 MOV AL, 7 ;ID=7 ALLWAYS FOR INTERNAL ;

;SLAVE OUT DX, AL MOV DX, SPICP1 ;ICW4 ­>SPICP1 MOV AL, 1 ;NO SFNM, NO AEOI, FACTORY TEST

;CODES SET OUT DX, AL MOV DX, SPICP1 ;OCW1 ­>SPICP1 MOV AL, 07FH ;UNMASK INT7 (IR7 OF SLAVE) OUT DX, AL

;INITIALIZE MASTER MODULE MOV DX, MPICP0 ;ICW1 ­>MPICP0 XOR AH, AH MOV AL, 11H ;EDGE TRIG, CASCADE, IC4 REQRD OUT DX, AL MOV DX, MPICP1 ;ICW2 ­>MPICP1 MOV AL, MASTER_BASE_TYPE ;BASE TYPE FOR MASTER OUT DX, AL ;BASE ADDRESS AT 0180H MOV DX, MPICP1 ;ICW3 ­>MPICP1 MOV AL, 80H ;SLAVE MODULE IS ALWAYS ON IR7 OUT DX, AL MOV DX, MPICP1 ;ICW4 ­>MPICP1 MOV AL, 1 ;NO SFNM, NO AEOI, FACTORY TEST

;CODES OUT DX, AL MOV DX, MPICP1 ;OCW1 ­>MPICP1 MOV AL, 0H ;UNMASK ALL MASTER IR LINES OUT DX, AL RET

INIT_ICU ENDP ; ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ;SET INTERRUPT VECTOR TABLE ; ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ SETVECT PROC

PUSH AX ;SAVE REGISTERS USED PUSH DS PUSH DI XOR AX, AX ;CLEAR ACCUMULATOR

MICROPROCESADORES Y MICROORDENADORES Página 89 de 136 Versión del 29/08/a

MOV DS, AX ;CLEAR DATA SEGMENT MOV DI, INT_TIMER2_TYPE * 4 ;MOVE BASE ADDRESS OF

;TIMER2 VECTOR IN TO DI MOV WORD PTR DS:[DI], OFFSET INT_TIMER2_ISR MOV WORD PTR DS:[DI+2], SEG INT_TIMER2_ISR POP DI POP DS POP DX RET

SETVECT ENDP ; ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ;SET TIMER2 ROUTINE ; ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ SETTIMER2 PROC FAR

PUSH AX ;SAVE REGISTERS USED PUSH DX MOV DX, T2CNT ;CLEAR COUNT REGISTER XOR AX, AX OUT DX, AL MOV DX, T2CMPA ;SET MAXIMUM COUNT VALUE MOV AX, 40000 OUT DX, AL MOV DX, T2CON ;SET UP THE CONTROL WORD: MOV AX, 0E001H ;ENABLE COUNTING, OUT DX, AL ;GENERATE INTERRUPT ON MC,

;CONTINUOUS COUNTING POP DX POP AX IRET

SETTIMER2 ENDP

;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ;INTERRUPT SERVICE ROUTINE: INT_TIMER2_ISR ; ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ INT_TIMER2_ISR PROC FAR

PUSH AX ;SAVE REGISTERS USED PUSH DX CMP _MSEC, 99 ;HAS 1 SEC PASSED? JAE BUMP_SECOND ;IF ABOVE OR EQUAL... INC MILISEG JMP SHORT RESET_INT_CTL

BUMP_SECOND: MOV _MSEC, 0 ;RESET MILLISECOND CMP MIN, 59 ;HAS 1 MINUTE PASSED? JAE BUMP_MIN INC SEGU JMP SHORT RESET_INT_CTL

BUMP_MIN: MOV SEGU, 0 ;RESET SECOND CMP MIN, 59 ;HAS 1 HOUR PASSED? JAE BUMP_HOUR INC MIN

MICROPROCESADORES Y MICROORDENADORES Página 90 de 136 Versión del 29/08/a

JMP SHORT RESET_INT_CTL BUMP_HOUR:

MOV MIN, 0 ;RESET MINUTE INC HOR JMP RESET_INT_CTL

RESET_INT_CTL: MOV DX, SPICP0 ;CLEAR IN­SERVICE BIT OF SLAVE

;BY ISSUING EOI SPECIFIC FOR ;TIMER2

MOV AL, 64H OUT DX, AL MOV DX,SPICP0 ;SET ISR FOR READ MOV AL,0BH OUT DX,AL MOV DX,SPICP0 IN AL,DX :READ ISR CMP AL,0 JNE END_RDS MOV DX, MPICP0 ;CLEAR IN­SERVICE BIT OF MASTER

;BY ISSUING EOI MOV AL, 20H OUT DX, AL

END_RDS POP DX POP AX IRET

INT_TIMER2_ISR ENDP EC_CODE ENDS

END MAIN

11.6.2. GENERAR UNA ONDA RECTANGULAR. Se desea generar la siguiente forma de onda:

30 miliseg. 20 miliseg

Se asume CLKOUT = 16 MHz, por lo tanto la frecuencia de servicio a los contadores será de 4 MHz. En 30 miliseg el contador alcanzará el valor de 30/250x10 ­6 = 120.000d = 1D4C0 y por lo tanto se excede la capacidad del contador. La solución es usar a TIMER2 como pre – escala. Si se fija como valor máximo de TIMER2 el valor 9C40h = 40.000d y se lo usa como pre – escala de TIMER1 resultará que TIMER1 alcanzará el valor 3 luego de 120.000 servicios de contadores. Para que transcurran 20 miliseg, deben registrarse 80.000d pulsos. Como TIMER2 genera uno cada 40.000, TIMER1 alcanzará el valor de 2 en ese tiempo. Tomando como base el esquema del ejemplo anterior deberán cambiarse los siguientes ítems.

MICROPROCESADORES Y MICROORDENADORES Página 91 de 136 Versión del 29/08/a

d) como no se usaran interrupciones no es necesario inicializar la tabla del vector de interrupciones.

e) inicialización de los TIMERs T1CNT = 0 T1CMPA = 3 T1CMPB = 2 T1CON = 1100 0000 0000 1011

No interrupt modo continuo Permite habilitar dos valores máximos Habilita pre – escala

T2CNT = 0 T2CMPA = 9C40h = 40.000d T2CON = 1100 0000 0000 0001

No interrupt modo continuo Permite habilitar

Habilita

Como se especifico no interrumpir estas no se generaran cada vez que TIMER1 alcance alguno de los valores máximos especificados pero la señal T1OUT irá asumiendo los valores cero y uno de acuerdo a lo solicitado.

MICROPROCESADORES Y MICROORDENADORES Página 92 de 136 Versión del 29/08/a

12. PREGUNTAS, PROBLEMAS Y ALGUNAS SOLUCIONES

1) Cual es la posición de memoria mas alta en la que puede comenzar un bloque si se lo quiere seleccionar con la Chip Select Unit del 80186. Resp: FFC00 pues todo bloque debe comenzar en una dirección cuyos últimos 10 dí­ gitos sean ceros.

2) En el 80186 cual es el máximo numero posible de interrupciones externas que pueden manejar­ se A) en forma standard, usando solo el 80186 B) en total, usando dispositivos adicionales. Resp: A) 8 B) 7 8259A conectados a las 7 inter rupciones externas de la 0 a la 6 dan 56 mas la IR7 son 57 en total

3) Describa las características de cada una de las tres formas posibles de manejar las prioridades en las interrupciones del 80186. Resp: Full nested pr ior ity una rutina de servicio solo puede ser inter rumpida por

otr a de mayor pr ior idad Special full nested pr ior ity idem pero de mayor o igual pr ior idad Special Mask mode el usuar io maneja el esquema que desea.

4) Escriba las instrucciones que permitan inicializar el chip select número 4 de forma tal que ma­ pee sobre las direcciones desde 2400h y 2C00h del espacio de direcciones de memoria. Se pre­ tende intercalar 5 WAIT­STATES cada ves que se realicen operaciones de I/O sobre este dispo­ sitivo. Resp: Los r egistr os deben quedar con la siguiente configuración

Star t register : 0245 Stop register : 02CE Programa: STAR4 EQU FF00 + 90 STOP4 EQU FF00 + 92

MOVE DX,STAR4 MOVE AX,0245h OUT DX,AX MOVE DX,STOP4 MOVE AX,02CEh OUT DX,AX

5) Como se entera la unidad de control de interrupciones que ha terminado la rutina de servicio que procesa una interrupción determinada. Resp: Es responsabilidad del programador emitir los END OF INTERRUP que sean necesar ios para blanquear los bits correspondientes en el IN SERVICE Register . Si esta involucr ado un slave son necesar ios dos EOI.

6) Por que razón es conveniente que mientras se procesa la rutina de servicio de una interrupción determinada dicha interrupción permanezca INHIBIDA. Resp: Pues sino al ejecutar la pr imera instrucción de la r utina de servicio la misma ser ía nuevamente inter rumpida pues aun permanecer ía en ON el bit corr espondiente y se entrar ía en un loop. Por programación puede evitarse este problema y si se trabaja con cuidado puede no inhibirse.

7) Cuantos bit­times tiene como mínimo todo ciclo de bus.

MICROPROCESADORES Y MICROORDENADORES Página 93 de 136 Versión del 29/08/a

Resp: Cuatro.

8) Como se establece la relación entre una interrupción externa determinada y la dirección donde se entregará el control cuando dicha interrupción se produzca. Resp: El 8259A tiene asignada una dirección base. Cuando el inta cicle requiere datos la 8259A entrega un valor equivalente a la dir ección base mas el numero de la inter rup­ ción activada. El micro multiplica por 4 este valor y obtiene el desplazamiento cor res­ pondiente dentro de la IVT del SEGMENTO y dos mas ar r iba esta el OFFSET. SEG­ MENTO:OFFSET constituyen la dirección de la r utina de servicio que se llamará.

9) Supóngase un 80186 trabajando a 25 MHz. Como deben configurarse (mostrar el valor binario de cada uno de sus bits) los registros de la unidad de control de tiempos para lograr en la salida T1OUT una onda como la siguiente:

50 mseg

Resp: Frecuencia de servicio de los contadores = 25.000.000 / 4 = 6.250.000 Hz

Valor del bit­time = 1 / 6,250 10 ** 6 = 0,16 10 ** ­6 seg. = 160 10 ** ­6 mseg En 50 mseg se generar an (50 / 160 ) * 10 ** 6 actualizaciones, es decir 312500 actuali­

zaciones Como 312500 cor responde a 4B4C4 en hexadecimal, no alcanza con un solo contador .

Se deben encadenar T1 con T2. En 10 mseg se generar an (10 / 160) * 10 ** ­6 actualizaciones, es decir 62500, es decir F424h Por lo tanto se fijar á valor máximo de T2 en F424 y valor máximo de T1 en 5. Inicialización de T2. T2CNT = 0 T2CMPA = F424 T2CON = 1100 0000 0000 0001 Habilita MODO CONTINUO

Permite habilitar Inicialización de T1 T1CNT = 0 T1CMPA = 0005 T1CON = 1100 0000 0000 1000 Habilita MODO UNICO

Permite habilitar PRE­ESCALA

10) Se dispone de una memoria estática RAM con las siguientes características:

a) Tiempo mínimo requerido para presentar los datos de salida luego de que todas las señales requeridas se encuentran presentes (dirección, chip select, read) 80 nseg b) Tiempo máximo que el dispositivo sigue entregando datos luego de desactivada la señal de OUTPUT ENABLE 30 nseg

MICROPROCESADORES Y MICROORDENADORES Página 94 de 136 Versión del 29/08/a

c) Todas las señales requeridas previas al WRITE (dirección, datos, chip select) deben estar presentes al menos 80 nseg antes del momento de ordenar la grabación(write)

d) Los datos y la dirección presentadas deben permanecer validas al menos 5 nseg luego de la orden de grabar. e) La señal de Write activo debe permanecer al menos 70 nseg

Se la pretende conectar a un micro 80186 trabajando a 25 Mhz y cuya características de tiempo se muestran en la tabla siguiente:

Símbolo Descr ipción Min Max Unidad Tclov Clock low output valid 3 17 ns Tclis Clock low input setup 10 ns Twhlh WR rising to next ALE rising ½ T –10 ns Tplll Chip select valid after ALE falls ½ T ­ 10 ns Twhdx Output data hold after WR rising T – 15 ns Tafrl Address float to RD falling 0 ns Trlrh RD active pulse width 2T – 6 ns Twlwh WR active pulse width 2T – 5 ns Trhax RD rising to nex address active T ­ 15 ns Tadic.latch Output enable after latch 10 20 ns

Determinar cuantos Wait­States son necesarios insertar en cada operación de entrada­salida y si es necesario o no intercalar un transceiver entre la salida de la memoria y el bus de datos del micro. Justifique. Resp: T = 1 / 25 Mhz = 40 nseg a) dirección 80 <= 3T –Tclov –Tclis –Tadllatc <= 120 – 17 – 10 –20 = 73

r equiere un WS chip select 80 <= 3T –Tclov –Tclis <= 120 – 17 – 10 <= 93

sin problema output enable80 <= 2T –Tclov –Tclis <= 80 – 17­ 10 <= 53

r equiere un WS b) 30 nseg <= Trhax = 40 – 15 = 25 nseg r equiere transceiver c) dirección 80 ms <= 3T – Tadllatch= 120 – 20 = 100 sin problema

datos 80 ms <= 2T = 80 nseg r equiere un WS chip select 80 ms <= 3T = 120 nseg sin problema

d) dirección 5 nseg <= Twhlh = ½ T – 10 =10 sin problema datos 5 nseg <= Twhdx =T – 15 = 25 sin problema

e) señal write 70 nseg <= 2T – 5 = 75 nseg sin problema

Se requier e inser tar un WS y usar transceiver .

11) Se ha diseñado una aplicación industrial con un 80186 que requiere 12 niveles de interrupcio­ nes diferentes usando las interrupciones IR1, IR2, IR3, e IR4 estándares en el micro y conec­ tando un 8259A en IR0 para que provea las 8 restantes. Las interrupciones que ingresen por el

MICROPROCESADORES Y MICROORDENADORES Página 95 de 136 Versión del 29/08/a

8259A mencionado se denominaran desde IR5 hasta IR12 y se conectaran desde el IR0 hasta el IR7 del 8259A. a) Si en la inicialización no se ha alterado el registro de asignación de prioridades cual será en

definitiva dicho esquema entre las 12 interrupciones. b) Prevé algún inconveniente en el esquema planteado?? Resp: a) De mayor a menor

IR5 IR6 IR7 IR8 IR9 IR10 IR11 IR12 IR1 IR2 IR3 IR4 b) al conectar el 8259A a la IR0 se generará un conflicto pues cuando se procese una inte­ r rupción que no cor responda a ningún 8259A slave en el cas apar ecerán 000 y al ser el id del slave del IR0 igual a 000 se dar á por identificado.

12) Se dispone de un dispositivo de E/S que para ser controlado dispone de 4 registres de 16 bits cada uno que cumplen las siguientes funciones R0 = RCE = Registro de control de la entrada R1 = RDE = Reg de datos de la Entrada R2 = RCS = Reg de control de la Salida R3 = RDS = Reg de datos de la Salida Mapearlo sobre el Espacio de direcciones de E/S comenzando en la posición 1000h, usando el chip select 3. Mostrar el contenido de los registros de control del CS 3 y las ocho instrucciones que se usarían cuando se requiera leer y grabar sobre los cuatro registros del periférico.

13) Cuando se agregan T­WAITs en un ciclo de bus, entre cuales de los bit­times (T1, T2, T3, T4) se los inserta.

14) Que cosas hace el micro entre el momento que decide atender una interrupción determinada y el momento en que le pase el control a la primera instrucción de la rutina de servicio correspon­ diente.

15) Si la codificación de una instrucción no especifica segmento alguno ¿ Como se determina cual ha de usarse?

16) Cuales son todas las formas en que una instrucción puede especificar la dirección de un operan­ do que reside en memoria

17)Mediante un circuito combinaciones que relacione T1OUT y T0OUT se quiere obtener la si­ guiente onda:

30 mseg 20 10 40 se repite cíclicamente

A) mostrar el circuito combinacional requerido B) mostrar los valores con que se inicializaran los registros de control de la unidad tempo­

rizadora C) describir como seria el proceso de inicialización.

18) Especificar el máximo valor permitido para cada uno de los parámetros especificados a conti­ nuación para una memoria que será conectada al micro especificado sin TRANSCEIVER y con tres WAIT­STATEs intercalados en toda operación de E/S.

MICROPROCESADORES Y MICROORDENADORES Página 96 de 136 Versión del 29/08/a

Características del micro: Reloj = 100 Mhz

Símbolo Descr ipción Min Max Unidad Tclov Clock low output valid 3 5 ns Tclis Clock low input setup 10 ns Twhlh WR rising to next ALE rising ½ T –2 ns Tplll Chip select valid after ALE falls ½ T ­ 2 ns Twhdx Output data hold after WR rising T – 3 ns Tafrl Address float to RD falling 0 ns Trlrh RD active pulse width 2T – 2 ns Twlwh WR active pulse width 2T – 2 ns Trhax RD rising to nex address active T ­ 3 ns Tadic.latch Output enable after latch 4 6 ns

Parámetros de la memoria a) Tiempo mínimo entre presentación de la dirección y disponibilidad de los datos b) Tiempo mínimo entre presentación del chip select y disponibilidad de los datos c) Tiempo mínimo entre presentación del read y disponibilidad de los datos d) Tiempo mínimo de presencia de la dirección previo a la orden de grabar ( activación de

WR) e) Tiempo mínimo de presencia de los datos previo a la orden de grabar ( activación de WR) f) Tiempo mínimo de presencia de la chip select previo a la orden de grabar ( activación de

WR) g) Tiempo mínimo de permanencia de los datos luego de la orden de grabar (activación de

WR) h) Tiempo mínimo de permanencia de los datos luego de la orden de grabar (activación de

WR) i) Tiempo mínimo de permanencia en la activación del WR.

19) ¿ Es posible mapear dos dispositivos distintos en la misma dirección, uno en el espacio de E/S y otro en el espacio de direcciones de memoria.??? ¿ Como se sabe si se accederá a uno u a otro en una operación determinada ??

20) Usando los bloques de uso general que necesite diseñe un dispositivo que genere la señal CHIP SELECT requerida para mapear un dispositivo de 32 X 2 X 8 Bits comenzando en la dirección 1000h del espacio de E/S. Indique claramente cuales han de ser las señales que ingresaran al dispositivo

21)Usando los timers de un hipotético 80186 que trabaja a 100 MHz y los circuitos combinaciona­ les que se requieran indicar: Programación de los registros de los contadores utilizados. Diagrama en block de los circuitos combinacionales si fueron requeridos Descripción de como se implementarían los procesos de inicialización de los registros de control de los contadores Para lograr el siguiente resultado: A partir del momento que se produzca la interrupción IR3 se quiere generar la siguiente onda

MICROPROCESADORES Y MICROORDENADORES Página 97 de 136 Versión del 29/08/a

159.998,5 ms 1,5 159.998,5 ms 1,5 se repite ms ms cíclicamente

Resp:

Frecuencia de servicio de los contadores = 100 MHz / 4 = 25 MHz Bit time = 1 / 25 10 ** 6 = 40 10 ** ­6 ms Para conseguir los 160.000 ms se requier en 4 10**9 pulsos Podr ía trabajar se con 62.500 * 64.000. Si se asigna a T2 count max = 62.500 se puede ob­

tener un pulso cada 62.500 * 40 10**­6 = 2, 5 milisegundos Esto imposibilita obtener el ancho de 1,5 ms.

Por otro lado si se asigna a T2 un ancho de 1,5 par a lograr los 160000 se requier en 106.666 lo cual excede la capacidad del contador .

Una solución factible es combinar los contadores. Se propone la siguiente solución: Con T0 se generar á una onda cíclica de per iodo 160000, con valor high durante 159997,5 y valor low durante 2,5­ Con T1 se generar á una onda similar a T0 pero desfasada en el tiempo 1 ms.

T0’

159.997,5 ms 2,5 159.997,5 ms 2,5 se r epite

159.997,5 ms 2,5 159.997,5 ms 2,5 se repite ms ms cíclicamente

La salida final asumir á los siguientes valores:

T0 T1 SALIDA DURACION HIGH HIGH HIGH 159.996,5 LOW HIGH HIGH 1 LOW LOW LOW 1,5 HIGH LOW HIGH 1

Para implementar lo, producida la inter rupción en ir 3 se llamará a una rutina que debe hacer lo siguiente: a) inicializar T2 con cuenta máxima 62.500 para que genere un pulso cada 2,5 ms. b) Inicializar T0 con cuenta máxima iguales a 63.999 y 1 con lo que se genera la onda de

159.997,5 y 2,5 ms c) Inicializar T1 igual a T0 d) Blanquear el valor de los contadores T0, T1, T2 e) Inicializar par a que arr anque T0 f) Inicializar par a que arr anque T2 g) Generar un loop que demore en ejecutarse 1 ms

MICROPROCESADORES Y MICROORDENADORES Página 98 de 136 Versión del 29/08/a

h) Inicializar para que arr anque T1

22) Especificar el máximo valor permitido para cada uno de los parámetros especificados a continuación para una memoria que será conectada al micro especificado con TRANSCEIVER y con quince WAIT­STATEs intercalados en toda operación de E/S. Características del micro: Reloj = 300 Mhz

Símbolo Descr ipción Min Max Unidad Tclov Clock low output valid 0,3 0,5 ns Tclis Clock low input setup 10 ns Twhlh WR rising to next ALE rising ½ T – 0,2 ns Tplll Chip select valid after ALE falls ½ T – 0,2 ns Twhdx Output data hold after WR rising T – 0,3 ns Tafrl Address float to RD falling 0 ns Trlrh RD active pulse width 2T – 0,2 ns Twlwh WR active pulse width 2T – 0,2 ns Trhax RD rising to nex address active T – 0,3 ns Tadic.latch Output enable after latch 0,4 0,6 ns

Parámetros de la memoria a) Tiempo mínimo entre presentación de la dirección y disponibilidad de los datos b) Tiempo mínimo entre presentación del chip select y disponibilidad de los datos c) Tiempo mínimo entre presentación del read y disponibilidad de los datos d) Tiempo máximo de permanencia de entrega de datos luego de desactivada la señal de read e) Tiempo mínimo de presencia de la dirección previo a la orden de grabar ( activación de

WR) f) Tiempo mínimo de presencia de los datos previo a la orden de grabar ( activación de WR) g) Tiempo mínimo de presencia de la chip select previo a la orden de grabar ( activación de

WR) h) Tiempo mínimo de permanencia de los datos luego de la orden de grabar (activación de

WR) i) Tiempo mínimo de permanencia de los datos luego de la orden de grabar (activación de

WR) j) Tiempo mínimo de permanencia en la activación del WR.

23)SS = 1234H; SP = 0100H; AX = F2A1H; BX = 27A1H. Determine el valor de SS, SP, AX y BX y el contenido de la pila, luego de realizar en orden las siguientes dos ins­ trucciones: PUSH AX POP BX

MICROPROCESADORES Y MICROORDENADORES Página 99 de 136 Versión del 29/08/a

24)BX = A215H , DS = 0200h y en la dirección física 0201H se encuentra almacenada la variable LISTA con el valor 34H. Muestre el estado de BX luego de ejecutar la instruc­ ción indicada en cada uno de los siguientes casos:

a) MOV BX, OFFSET LISTA b) LEA BX, LISTA c) MOV BL, LISTA

25) Explique brevemente el significado para Ud. de la frase: “El 80186 usa técnica de segmentos para direccionar la memoria principal. A su criterio que ventajas aporta el uso de dicha técnica.

26) ¿Porqué se utilizan los bits de guarda en aritmética de punto flotante? 27) Resuelva en binario utilizando complemento a la base menos 1: ­ (36)7 – (312)4 + (2B)16= .

Determine y justifique la mínima cantidad de bits de la representación para que no ocurra over­ flow.

28)Durante la ejecución de un programa se llama al procedimiento PROC1. Sabiendo que TCLOUT =20 Mhz, y Tsal = T0OUT + T1OUT, grafique T0OUT, T1OUT y Tsal, mostrando los valores del eje del tiempo en c/u de las transiciones de las señales y justifique. Nota: En el programa ya están definidas como constantes las palabras clave que identifican a los registros de la PCB, como por ej. TOCNT, T1CON,etc.

PROC1 PROC FAR PUSH AX PUSH DX XOR AX, AX MOV DX, T0CNT OUT DX, AX MOV DX, T0COMPA MOV AX, 1F40H OUT DX, AX MOV DX, T0COMPB MOV AX, 0002H OUT DX, AX MOV DX, T0CON MOV AX, C00BH OUT DX, AX MOV DX, T1CNT MOV AX, 0001H OUT DX, AX MOV DX, T1CMPA MOV AX, 1F40H

29) Encontrar el máximo valor permitido para c/u de los parámetros especificados para una memoria conectada al procesador que se detalla sabiendo que se han inicializado 3 T­waits para toda operación de E/S.

Datos del procesador: Reloj: 80 MHz.

Símbolo Descr ipción Min Max Unidad Tclov Clock low output valid 3 17 ns Tclis Clock low input setup 10 ns

OUT DX, AX MOV DX, T1COMPB MOV AX, 0002H OUT DX, AX MOV DX, TICON MOV AX, 1F40H OUT DX,AX XOR AX,AX MOV DX,T2CNT OUT DX,AX MOV DX, T2COMPA MOV AX, 007DH OUT DX,AX MOV DX, T2CON MOV AX,C001H OUT DX, AX POP DX POP AX IRET

PROC1 ENDP

MICROPROCESADORES Y MICROORDENADORES Página 100 de 136 Versión del 29/08/a

Twhlh WR rising to next ALE rising ½ T – 4 ns Tplll Chip select valid after ALE falls ½ T – 10 ns Twhdx Output data hold after WR rising T – 8 ns Tafrl Address float to RD falling 0 ns Trlrh RD active pulse width 2T – 6 ns Twlwh WR active pulse width 2T – 5 ns Trhax RD rising to next address active T – 10 ns Tadic.latch Output enable after latch 10 20 ns

Parámetros de la memoria: a) Tiempo máximo entre presentación de la dirección y disponibilidad de los datos. b) Tiempo máximo entre presentación del chip select y disponibilidad de los datos. c) Tiempo máximo entre presentación del read y disponibilidad de los datos. d) Tiempo máximo de permanencia de entrega de datos luego de desactivada la señal de read. e) Tiempo mínimo de presencia de la dirección previo a la orden de grabar (activación de

WR). f) Tiempo mínimo de presencia de los datos previo a la orden de grabar (activación de WR). g) Tiempo mínimo de presencia de la chip select previo a la orden de grabar (activación de

WR). h) Tiempo mínimo de permanencia de los datos luego de la orden de grabar (activación de

WR). i) Tiempo mínimo de permanencia de la dirección luego de la orden de grabar (activación de

WR). j) Tiempo mínimo de permanencia en la activación del WR.

30)Se desea ampliar la capacidad standart de manejo de interrupciones de un 80186, in­ cluyendo 10 interrupciones más. a) Indique como modificaría la estructura de la Unidad de Control de Interrupciones para

lograrlo. Grafique indicando todas las conexiones necesarias. b) Se desea mapear los nuevos periféricos sobre el espacio de E/S a partir de la dirección

200H, además los primeros ocho necesitan para su funcionamiento a lo sumo 3 T­waits mientras que los restantes requieren 5. Con esta información explique en forma concreta cómo cumpliría con estos requerimientos.

c) Explique cómo serán las prioridades, según la conexión elegida, si se conserva el esquema por defecto en todos los dispositivos, sean éstos anteriores o posteriores a la modificación.

31)Se desea ampliar la capacidad standart de manejo de interrupciones de un 80186, pa­ ra manejar 8 periféricos adicionales. a) Indique como modificaría la estructura de la Unidad de Control de Interrupciones para

lograrlo. Grafique indicando todas las conexiones necesarias. b) Explique que esquema de prioridades se podría utilizar si entre las nuevas 8 no se quiere

prioritizar ninguna. c) ¿Qué precauciones debe tener en cuenta el programador al finalizar la rutina de servicio de

alguno de los nuevos periféricos? 32) Escribir un programa que coloque en la pila 4 números (NUM1=12536, NUM2=1,

NUM3=4567, NUM4=16) y llame a la subrutina CALCULAR. Dicha subrutina toma de

MICROPROCESADORES Y MICROORDENADORES Página 101 de 136 Versión del 29/08/a

la pila los cuatro datos y les aplica las funciones F1 y F2. Los dos resultados obteni­ dos son colocados en la pila. El programa llamador debe entonces comparar los resul­ tados devueltos por la sub rutina y actuar de la siguiente manera: Si result1 <= Result2 terminar el programa En caso contrario aumentar en 1 el valor de NUM4, reducir en 4 el valor de NUM1, y volver a llamar a la sub rutina. F1 = Dato1 * Dato2 + Dato3 * Dato4 F2 = Dato2 + Dato4 + Dato2 + Dato4

33)Usando los timers de un hipotético 80186 que trabaja a 100 MHz y los circuitos com­ binacionales que se requieran indicar: Programación de los registros de los contadores utilizados. Diagrama en block de los circuitos combinacionales si fueron requeridos Descripción de como se implementarían los procesos de inicialización de los registros de control de los contadores Para lograr el siguiente resultado:

A partir del momento que se produzca la interrupción IR3 se quiere generar la siguiente onda

129.999ms 1 129.999ms 1 se repite ms ms cíclicamente

Resp: Frecuencia de servicio de los contadores = 100 MHz / 4 = 25 MHz Bit time = 1 / 25 10 ** 6 = 40 10 ** ­6 ms Para conseguir un pulso cada 1 ms en T2 se debe inicializar TMAX = 25.000

Luego, para obtener los 129.999solicitados par a la onda mayor deber ían inicializar se TMAXA= 129.999y TMAXB = 1 Esto no es posible pues el valor máximo para TMAXi no puede superar 65536.

La solución se logra superponiendo ondas de T0 y T1. Una solución ser ia:

T0’

65.000 ms 65.000 ms se repite

T1

1 65.000 ms 65.000 ms se repite cíclicamente

65.000 + 64.999 = 129.999 1

La salida final asumirá los siguientes valores:

MICROPROCESADORES Y MICROORDENADORES Página 102 de 136 Versión del 29/08/a

T0 T1 SALIDA DURACION HIGH HIG

H HIGH 64.999

LOW HIG H

HIGH 1

LOW LOW HIGH 64.999 HIGH LOW LOW 1

Para implementar lo, producida la inter rupción en ir 3 se llamará a una rutina que debe hacer lo siguiente: i) inicializar T2 con cuenta máxima 25.000 para que genere un pulso cada 1 ms. j) Inicializar T0 con cuenta máxima iguales a 65.000 y 65000 con lo que se genera la on­

da cuadrada de 65.000 ms k) Inicializar T1 igual a T0 l) Blanquear el valor de los contadores T0 y T2 e inicializar T1 en 1 m) Inicializar par a que arr anque T0 n) Inicializar para que arr anque T1 o) Inicializar par a que arr anque T2

34) Se requiere mapear en forma consecutiva sobre el espacio de direcciones de E/S, comenzando en la dirección 192]10 , los siguientes dispositivos:

A ) DATOS (16)

DIRECCIONES (4)

B ) DATOS (16)

DIRECCIONES (8)

C) DATOS (16)

DIRECCIONES (1)

32 registros de 8 bits cada uno los cua­ les se direccionan con 16 direcciones posibles

512 registros de 8 bits cada uno los cua­ les se direccionan con 256 direcciones posi­ bles

2 registros de 16 bits cada uno los cuales se direccionan con 2 direcciones posi­ bles

MICROPROCESADORES Y MICROORDENADORES Página 103 de 136 Versión del 29/08/a

Todos los dispositivos manejan las entradas salidas como dos bancos de 8 bits cada uno. Se preten­ de mapearlos utilizando la Chip Select Unit del 80186. Mostrar como deberían inicializarse los registros de la CSU, dibujar un esquema de como quedaría mapeado el espacio de E/S y mostrar esquemáticamente el conexionado entre el bus del 80186 y cada uno de los dispositivos. Mostrar todas las instrucciones que permitan grabar los 16 bits de cada uno de los dos registros del dispositivo c.

Resp: Dado que se solicita usar la CSU el mínimo espacio mapeable par a cada dispositivo es de 64 DIRECIONES pues al inicializar los r egistr os de control de la CSU no pueden especificarse los 6 últimos dígitos de la dirección los cuales son asumidos como ceros. Por lo tanto:

el dispositivo A ocupara desde 00C0 hasta 00FFCS = 1 el dispositivo B ocupara desde 0100 hasta 02FF CS = 2 el dispositivo C ocupara desde 0300 hasta 033F CS = 3

El espacio de dir ecciones quedará mapeado así:

0340h = 832d 033F = 831d 0300h = 768d 02FF = 767d Tamaño = 831 – 768 + 1= 64

Tamaño = 767 – 256 + 1 = 512

0100h = 256d 00FF = 255d 00C0h = 192d Tamaño = 255 – 192 + 1 = 64 0000h = 000d

Los r egistros de control se inicializar án:

Registr o START Registr o STOP Indica espacio I/O CS 1 0000 0000 11XX 0000 0000 0001 00XX 1100 Indica No Ready CS 2 0000 0001 00XX 0000 0000 0011 00XX 1100 CS 3 0000 0300 00XX 0000 0000 0011 01XX 1100

Indica Cero Wait States Indica considerar dir ección de terminación Indica Habilitado

Para leer corr ectamente los 16 bits de cada uno de los registr os de los distintos dispositivos es necesar io pr esentar direcciones pares. Ante cada dir ección par el dispositivo entregar a en los 16 bits del bus de datos el contenido ( en 8 bits) de la dirección presentada y el contenido ( en 8 bits) de la dirección presentada mas 1.

MICROPROCESADORES Y MICROORDENADORES Página 104 de 136 Versión del 29/08/a

Por lo tanto se dejará flotando el bit A0 del bus de dir ecciones y se conectaran los otros de acuerdo al siguiente esquema:

Disp. A Bits A1 hasta A4 a las cuatro entr adas de direcciones existentes Disp. B Bits A1 hasta A8 a las ocho entr adas de direcciones existentes Disp. C Bits A1 a la única entrada de direcciones existente.

Cualquier dirección entre 0300 y 03FF con A1 igual a cero direccionará al registro cero del dispositivo C, y si r esulta A1 igual a uno dir eccionará al registro uno. Dicho de otra manera y consider ando que X representa tanto a valor es ceros como a unos, el conjunto de direcciones validas para acceder al r egistro cero y al r egistro uno del dispositivo C son r espectivamente: Reg cero Reg uno 0000 0011 XX0X 0000 0011 XX1X. Como se trata del espacio de entrada/salida la instrucción para gr abar es: OUT

35) En un procesador 80188 se encuentra mapeado entre las direcciones 0040h y 0080h del espacio de direcciones de entrada/salida un dispositivo que tiene dos registros de 16 bits cada uno. La unica entrada de direccion del dispositivo se encuentra conecta­ da a la señal A5 del bus de datos. Especificar cuales son las instrucciones validas pa­ ra grabar y leer ambos registros del dispositivo. Resp: La instruccion OUT DX, AX graba el contenido de Ax en la direccion aountada por DX. Se analizará el comportamiento de la BIU para distintos contenidos de AX y DX. Ax = 1234h y DX = 0040h

La BIU genera un ciclo de bus transfiriendo 16 bits a la direccion 0040h. Los 8 bits menos significativos se transfieren a 0040h y los 8 mas significativos a 0041h. Como A5 en ambos casos es 0 el registro direccionado es R0. Lo mismo ocurrirá para toda direccion entre 0040h y 005Fh.

Ax = 1234h y DX = 0060h La BIU genera un ciclo de bus transfiriendo 16 bits a la direccion 0060h. Los 8 bits menos significativos se transfieren a 0060h y los 8 mas significativos a 0061h. Como A5 en ambos casos es 1 el registro direccionado es R1. Lo mismo ocurrirá para toda direccion entre 0060h y 007Fh.

Ax = 1234h y DX = 0061h La BIU genera dos ciclos de bus pues se intenta transferir una palabra a una direccion impar. Cada ciclo transfiere unByte. El primer ciclo transfiere los 8 bits mas significativos a la direccion 0061h y el segundo ciclo transfiere los 8 bits menos significativos a 0062h. Como A5 en ambos casos es 1 el registro direccionado en ambos casos es R1. Lo mismo ocurrirá para toda direccion entre 0061h y 007Dh.

Daria la sensacion que en este caso podria habilitarse la posibilidad de direc­ cionar a direcciones impares si que ello repercuta en un mal funcionamiento aunque si en una peor perfomance. Podria decirse que toda direccion entre

MICROPROCESADORES Y MICROORDENADORES Página 105 de 136 Versión del 29/08/a

0040h y 005E grabará el R0 y toda direccion entre 0060h y 007Eh grabará en el registro R1. Queda para el lector analizar que pasa si la direccion en la que se intenta grabar es 005Fh.

36)

MICROPROCESADORES Y MICROORDENADORES Página 106 de 136 Versión del 29/08/a

TRANSFERENCIAS DE INFORMACION ENTRE EL MICRO Y EL MEDIO AMBIENTE

Existen dos metodológicas básicas para la transmisión de los datos: Transmisión serie y transmi­ sión paralelo. En el esquema serial un dispositivo envía a otro un bit por vez utilizando un único cable o medio de comunicación. En el esquema paralelo un dispositivo envía a otro varios bits simultáneamente utilizando para ello varios cables. Por ejemplo es muy común enviar 8 bits simultáneamente utilizando un conector de 8 cables. Por supuesto un esquema de transmisión en paralelo brinda mayor velocidad que el esquema serial aunque es de esperar un mayor costo dado la mayor cantidad de cables que requiere. En la practica ni la comunicación en paralelo es 8 veces más rápida que la serial ni el cable será resulta 8 veces más económico que el paralelo. En general los fabricantes de cables serie usan mejores materiales y distintos tipos de aislación aumentando su costo relativo pero permitiendo velocidades más altas. Además la mejor calidad permite también mayores distancias. Los cables para conexiones paralelo son más económicos y generalmente diseñados para distancias cortas(< de 6 metros). Los proble­ mas de ruido e interferencias afectan en forma importante la transmisión paralelo limitando la velo­ cidad de transferencia. Si bien existen interfaces paralela que transmiten 16, 24, 32 o más bits simultáneamente (SCSI) las mas comúnmente utilizadas transmiten 8 bits (un byte) por vez.

1. INTERFACES PARALELA Pueden ser unidireccionales o bidireccionales. En la unidireccional existen dos sitios: el transmisor y el receptor. El transmisor coloca datos en la línea e informa al receptor de este hecho; el receptor toma los datos desde la línea e informa al transmisor que los ha tomado. De esta forma se sincronizan ambos dis­ positivos, el receptor no lee los datos hasta que el transmisor le avise que están disponibles y el transmisor no coloca nuevos datos hasta que el receptor haya tomados los previos. El termino que describe como ambos sitios coordinan su funcionamiento es: HANDSHAKING. La línea que el transmisor usa para indicar la disponibilidad de los datos se denomina STROBE. La línea que el receptor usa para comunicar que ya ha tomado los datos se denomina ACKNOW­ LEDGE. En algunos esquemas existe una tercera línea que controla el receptor y sirve para indicar si esta disponible para recibir datos. Se denomina BUSY y si esta activada el transmisor debe inhibirse de enviar datos. Los diagramas que siguen muestran el comportamiento descripto

MICROPROCESADORES Y MICROORDENADORES Página 107 de 136 Versión del 29/08/a

S

S

S

S

S

N

S

S N

N

N

N

N

N

TRANSMISOR RECEPTOR

START START

BUSY BUSY line=Inactivo Line Activo

STROBE Colocar Datos Activo En la línea

STROBE =Activo Toma Datos de la línea

ACK ACK =Activo Activo

STROBE =Inactivo STROBE Inactivo

ACK Inactivo ACK =Inactivo

Continua la Se espera Transmisión otro dato

MICROPROCESADORES Y MICROORDENADORES Página 108 de 136 Versión del 29/08/a

Si se usa la línea BUSY las conexiones requeridas son:

DATOS (8 BITS)

TRANSMISOR STROBE RECEPTOR ACKNOWLEDGE BUSY

Una transmisión bidireccional puede pensarse como la superposición de dos transmisiones unidireccionales. Puede darse que cada canal tenga sus propias líneas de comunicación o que multiplexen su función en el tiempo según la dirección de la transferencia.

1.1. PORTS PARALELOS EN EL 80186 El 80186 tiene 22 pins que pueden ser utilizados como de entrada y/o salida. Ellos son agrupados en dos port de 8 bits cada uno (PORT 1 y PORT2) y uno de 6 bits (PORT3). Muchos de estos pins son funcionalmente multiplexados con los periféricos integrados, esto implica que por programa puede definirse si el pin será controlado por el periférico integrado o si será controlado por programa y funcionará entonces simplemente como pin de entrada/salida. Las siguientes tablas muestran el agrupamiento de los pins y su multiplexado funcional PORT1 Exclusivamente salida

PORT2 Bidireccional

MICROPROCESADORES Y MICROORDENADORES Página 109 de 136 Versión del 29/08/a

PORT3 4 pins exclusivos de salida 2 bidireccionales open­drain

Cada port tiene asociado en la PCB un conjunto de 4 registros:

Port Control Register PxCON

bits 0 a 7 Si =1 el pin, el port direction y el port data latch son controlados por el periférico integrado correspondiente. Si =0 el pin funcionará como de E/S

Port Direction Register PxDIR

Bits 0 a 7 Si el pin es programado como de E/S y es bidireccional indica la dirección. 1 es entrada; 0 es salida.

Port Datalatch Register PxLTCH

Bits 0 a 7 Son los bits que aparecerán en los bornes de los pins correspondientes cuando estos sean programados como de E/S y de salida

Port Pin State Register PxPIN

Bits 0 a 7 Representan, al ser leídos el estado lógico presente en el pin asociado.

La única restricción en la inicialización de los registros asociados a los port de entrada/salida es que el Datalatch debe ser programado antes de seleccionar al pin correspondiente como de salida para evitar la presencia de valores desconocidos en el pin. Cuando el 80186 es reseteado los ports asumen la siguiente configuración:

Port1 es configurado para ser controlado por el periférico integrado asociado(Chip Select) Port2 es configurado para ser controlado por el periférico integrado asociado

(Canales Serie 0 y 1) Port3 bits 0 a 3 son configurados para ser controlados por el periférico integrado asociado(Interrups)

Bits 4 y 5 son configurados como de E/S; entrada

MICROPROCESADORES Y MICROORDENADORES Página 110 de 136 Versión del 29/08/a

1.2. NOTA ESPECIAL La definición estándar del port paralelo en un equipo IBM PC Compatible utiliza un conector de 25 pins con la siguiente distribución:

Además de las señales ya descriptas previamente como participantes en una transmisión paralelo en el diagrama previo aparecen otras cuyo significado se muestra en la misma figura. En total se requieren 12 pins de salida y 5 de entrada los cuales pueden ser servidos por los ports 1, 2 y 3 del 80186 sin inconvenientes. Son de un uso muy generalizado las interfaces llamadas LAPLINK que permite el intercambio bidireccional de información entre dos PC´s usando para ello interfaces paralela. Para lograrlo el cable utiliza el siguiente esquema de conexionado:

Pin 1 Pin 2 Pin 3 Pin 4 Pin 5 Pin 6 Pin 7 Pin 8 Pin 9 Pin 10 Pin 11 Pin 12 Pin 13 Pin 14 Pin 15 Pin 16 Pin 17

Pin 1 Pin 2 Pin 3 Pin 4 Pin 5 Pin 6 Pin 7 Pin 8 Pin 9 Pin 10 Pin 11 Pin 12 Pin 13 Pin 14 Pin 15 Pin 16 Pin 17

MICROPROCESADORES Y MICROORDENADORES Página 111 de 136 Versión del 29/08/a

El protocolo superpone la función de BUSY con la ACKNOWLEDGE y transmite solo 4 bits por vez. Requiere de dos transmisiones para completar un byte. Si la transmisión es de 1 a 2:

SITIO 1 SITIO 2 Pin 2 a 5 envía datos Pin 10, 12, 13 y 15 reciben datos Pin 6 envía STROBE Pin 11 recibe STROBE Pin 11 recibe ACKNOWLEDGE Pin 6 envía ACK

Si la transmisión se realiza de 2 a 1:

SITIO 1 SITIO 2

Pin 10, 12, 13 y 15 reciben datos Pin 2 a 5 envían datos Pin 11 recibe STROBE Pin 6 envía STROBE Pin 6 envía ACK Pin 11 recibe ACK

2. INTERFACE SERIE

Puede ser sincrónica o asincrónica. El protocolo asincrónico permite que dos dispositivos se comuniquen sin tener una conexión que provea un único clock a ambos. Si, en cambio, debe establecerse una velocidad de transferencia común a ambos que se denomina BAUD RATE BASE y que se expresa en bits por segundos (baudios). Los datos son transferidos en frames. Un frame es una secuencia de un numero fijo de bits transmitidos sobre una única línea. Un frame consiste de un bit de inicio (START BIT) siempre un valor lógico de cero, seguido de un conjunto de bits de datos (7, 8 u 9) y un bit de terminación (STOP BIT). El dispositivo que transmite los datos se denomina TX y el que los recibe RX. El dispositivo RX es el responsable de sincronizar el flujo de datos recibidos y recuperar los datos correctamente. Debido a que no existe una señal de sincronismo es indispensable que tanto transmisor como receptor trabajen a la misma velocidad base. El proceso clave es detectar la presencia del START BIT. La calidad con que se implemente este proceso determinará el % de desvío admisible entre las velocidades base de ambos dispositivos y dará una idea de la inmunidad ante ruidos que tendrá la transmisión.

2.1. ESTUDIO DE UN CASO PARTICULAR. Para realizar la detección del START BIT el receptor utiliza un clock de muestreo a una frecuencia de trabajo mucho mayor que la frecuencia que utilice el transmisor. Como ejemplo se analizará el caso que dicho clock de muestreo trabaje 16 veces más rápido que la BAUD RATE BASE. El clock de muestreo se denominará RT y para cada bit time de la transmisión existirán entonces 16 ciclos de reloj de RT que se identificaran con los números 1 a 16.

MICROPROCESADORES Y MICROORDENADORES Página 112 de 136 Versión del 29/08/a

Cuando el receptor arranca su actividad o luego de haber recibido un STOP BIT al final de un frame, inicia la búsqueda asincrónica del flanco negativo del START BIT. El objetivo de esta búsqueda es obtener la sincronización entre el dato serie y el clock RT. Una vez que la sincronización ha sido establecida el clock RT marcará el entorno de existencia de cada bit time del dato serie. Para detectar el START BIT es necesario encontrar una muestra de la señal de entrada (RxD) igual a cero y que haya sido precedida por otras tres muestras consecutivas iguales a uno. Estas cuatro muestras se denominan calificadoras del START BIT. Hasta que la muestra calificadora del START BIT sea detectada el clock RT es reseteado luego de cada muestra y por lo tanto obligado a permanecer en RT1. Detectada la muestra calificadora se libera el avance del clock RT y se tomaran nuevas muestras en RT3, RT5 y RT7. Si dos cualesquiera o las tres resultaran iguales a uno, el cero en RT1 se asumirá como ruido y se reiniciará la búsqueda del START BIT; en caso contrario se considerara que la sincronización ha sido establecida y se interpretaran los datos considerando un frame cuyo START BIT comenzó en RT1. Durante cada bit time incluyendo el START BIT y el STOP BIT en RT8, RT9, y RT10 se tomaran muestras. Se considera que el valor recibido es igual al valor mayoritario entre las tres muestras tomadas; es decir que el valor asumido por al menos dos de las muestras determinara el valor asignado al dato recibido durante el bit time en cuestión. Si uno de los valores no coincide con los otros dos el bit de error será activado. La siguiente figura muestra el caso ideal de reconocimiento del START BIT.

START BIT DETECTADO START BIT REAL LSB

SEÑAL RxD

MUESTRA

CLOCK

1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1

BIT TIME DEL CLOCK

R T 1

R T 1

R T 1

R T 1

R T 1

R T 1

R T 1

R T 1

R T 1

R T 1

R T 2

R T 3

R T 4

R T 5

R T 6

R T 7

R T 8

R T 9

R T 10

R T 11

R T 12

R T 13

R T 14

R T 15

R T 16

R T 1

R T 2

R T 3

[1] [2] [3] [4]

CASO IDEAL

Durante [1] todas las muestras detentan RxD=1 y corresponden a una situación de línea inactiva o disponible (IDLE LINE) o a un STOP BIT. Durante [2] se detecta el cero precedido por tres unos y el contador de pulsos de RT arranca considerando RT1 el bit time durante el cual se recibió el cero que finalizo la secuencia 1110 y de ahí en mas seguirán RT2, RT#, RT$, . . . . RT16. Las muestras tomadas en RT3, RT5 y RT7 durante [3] iguales a cero confirman la detección del START BIT.

MICROPROCESADORES Y MICROORDENADORES Página 113 de 136 Versión del 29/08/a

Como en todo bit time también durante el START BIT se toman las muestras correspondientes a RT8, RT9 y RT10 durante [4]. En cualquier otro bit time estas tres muestras son las que por mayoría determinan el valor del dato recibido pero durante el START BIT su valor es forzadamente interpretado como cero independientemente de su valor real. En este caso el START BIT real y el START BIT detectado coinciden. La resolución del clock RT fija la incertidumbre del exacto lugar en que el frente de onda negativo, que inicio realmente el START BIT, ocurrió. La incertidumbre queda limitada a 1/16 de la frecuencia de transmisión. 2.1.1. CASO CON RUIDO EJEMPLO N° 1 Un ruido causa que se detecte un cero erróneo antes que el verdadero comienzo del START BIT se produzca.

START BIT DETECTADO START BIT REAL LSB

SEÑAL RxD

MUESTRA

CLOCK

1 1 1 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1

BIT TIME DEL CLOCK

R T 1

R T 1

R T 1

R T 1

R T 2

R T 3

R T 4

R T 5

R T 1

R T 1

R T 2

R T 3

R T 4

R T 5

R T 6

R T 7

R T 8

R T 9

R T 10

R T 11

R T 12

R T 13

R T 14

R T 15

R T 16

R T 1

R T 2

R T 3

[1] [2]

CASO CON RUIDO NUMERO UNO

Un cero lógico en [1] en conjunción con los otros tres unos anteriores conforman la muestra calificadora y por lo tanto se dará por iniciado el START BIT. Las muestras en RT3 y RT5 devuelven valores uno por lo que luego de RT5 el clock RT vuelve al estado RT1. De allí en más continua como el caso ideal con lo que el ruido que generó el cero en [1] no ha causado inconveniente alguno. 2.1.2. CASO CON RUIDO EJEMPLO N° 2 La peor situación para el tipo de ruido analizado previamente se da cuando el ruido que genera el falso cero se produce tan cerca del verdadero START BIT que la muestra en RT5 resulta igual a cero pues ya comenzó el START BIT real. En este caso el sistema reconocerá el inicio del START BIT en [1] y como RT3=1 pero RT5=RT7=0 (mayoría de ceros) el reconocimiento es validado aunque la señal de error sea seteada. El clock RT considerará START BIT hasta su estado RT16 y en el siguiente estado RT1 considerara el comienzo del primer bit de datos. El desplazamiento en este caso es de 5 clocks [4] pero las muestras RT8, RT9 y RT10 que se tomen a continuación corresponderán en cada caso al bit correcto.

MICROPROCESADORES Y MICROORDENADORES Página 114 de 136 Versión del 29/08/a

START BIT DETECTADO LSB DETEC START BIT REAL LSB

SEÑAL RxD

MUESTRA

CLOCK

1 1 1 1 1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1

BIT TIME DEL CLOCK

R T 1

R T 1

R T 1

R T 1

R T 1

R T 1

R T 2

R T 5

R T 4

R T 5

R T 6

R T 7

R T 8

R T 9

R T 10

R T 11

R T 12

R T 13

R T 14

R T 15

R T 16

R T 1

R T 2

R T 3

R T 4

R T 5

R T 6

R T 7

[1] [2] [3] [4]

CASO CON RUIDO NUMERO DOS

Algunos sistemas re – sincronizan el clock RT en cualquier transición valida de uno a cero en los datos. Dicha transición es detectada por una secuencia calificadora del START BIT (1110) convalidada por muestras mayoritariamente ceros en las siguientes RT3, RT5 y RT7. Si así fuera el desplazamiento provocado en este caso por la señal de error en [1] seria compensado con la primera transición de uno a cero en los bits de datos.

2.1.3. CASO DE ERROR EJEMPLO N° 3 Esta situación se produce cuando una ráfaga de ruidos altera mas de una muestra. El caso planteado considera que las muestras en RT1 y RT3 son falsos ceros en [1]. Como RT3=0, RT5=1 y RT7=0 el START BIT erróneamente detectado es convalidado, aunque la señal de error será seteada. El desplazamiento producido es de 7 clocks pero igualmente las muestras tomadas en RT8, RT9 y RT10 en cada bit de datos corresponderán a los bits realmente transmitidos.

START BIT DETECTADO LSB DETEC START BIT REAL LSB

SEÑAL RxD

MUESTRA

CLOCK

1 1 1 0 1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1

BIT TIME DEL CLOCK

R T 1

R T 1

R T 1

R T 1

R T 2

R T 3

R T 4

R T 5

R T 6

R T 7

R T 8

R T 9

R T 10

R T 11

R T 12

R T 13

R T 14

R T 15

R T 16

R T 1

R T 2

R T 3

R T 4

R T 5

R T 6

R T 7

R T 8

R T 9

[1] [2] [3]

MICROPROCESADORES Y MICROORDENADORES Página 115 de 136 Versión del 29/08/a

CASO CON RUIDO NUMERO TRES

Señales de error tan groseras no son comunes. Este ejemplo muestra la muy buena tolerancia a ruidos del sistema. 2.1.4. CASO DE ERROR EJEMPLO N°4 Una señal de error que genere individualmente un falso 1 en RT3 o RT5 o RT7 durante el START BIT no invalidará la correcta detección del comienzo del START BIT producida en [1].

START BIT DETECTADO START BIT REAL LSB

SEÑAL RxD

MUESTRA

CLOCK

1 1 1 1 1 1 1 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1

BIT TIME DEL CLOCK

R T 1

R T 1

R T 1

R T 1

R T 1

R T 1

R T 1

R T 1

R T 1

R T 1

R T 2

R T 3

R T 4

R T 5

R T 6

R T 7

R T 8

R T 9

R T 10

R T 11

R T 12

R T 13

R T 14

R T 15

R T 16

R T 1

R T 2

R T 3

[1]

CASO CON RUIDO NUMERO CUATRO

2.1.5. CASO DE ERROR EJEMPLO N° 5 Si por el contrario la señal de error fuese del tipo ráfaga y llevara a que dos de las muestras en RT#, RT5 o RT7 fuesen unos el sistema invalidaría la detección iniciada del START BIT y reiniciaría su búsqueda. Como no se produciría la secuencia calificadora en este caso no se detectaría el START BIT. Este es el único caso que puede generar la perdida de un carácter o la recepción invalida del mismo.

START BIT NO DETECTADO START BIT REAL LSB

SEÑAL RxD

MUESTRA

CLOCK

1 1 1 1 1 1 1 1 1 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 1 1 1

BIT TIME DEL CLOCK

R T 1

R T 1

R T 1

R T 1

R T 1

R T 1

R T 1

R T 1

R T 1

R T 1

R T 2

R T 3

R T 4

R T 5

R T 6

R T 7

R T 1

R T 1

R T 1

R T 1

R T 1

R T 1

R T 1

R T 1

R T 1

R T 1

R T 1

R T 1

[1] [2]

CASO CON RUIDO NUMERO CINCO 2.1.6. CASO DE ERROR EJEMPLO N°6 Este ultimo caso muestra una ráfaga de errores en la mitad del START BIT de forma tal que genera valores erróneos en mas de dos de las muestras tomadas en RT8, RT9 y RT10 [1].

MICROPROCESADORES Y MICROORDENADORES Página 116 de 136 Versión del 29/08/a

Debido a que el sistema fuerza los valores de RT8, RT9 y RT10 durante el START BIT como ceros no se alterará el funcionamiento correcto del proceso de detección del START BIT aunque si se activara la señal de error.

START BIT DETECTADO START BIT REAL LSB

SEÑAL RxD

MUESTRA

CLOCK

1 1 1 1 1 1 1 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1

BIT TIME DEL CLOCK

R T 1

R T 1

R T 1

R T 1

R T 1

R T 1

R T 1

R T 1

R T 1

R T 1

R T 2

R T 3

R T 4

R T 5

R T 6

R T 7

R T 8

R T 9

R T 10

R T 11

R T 12

R T 13

R T 14

R T 15

R T 16

R T 1

R T 2

R T 3

[1]

CASO CON RUIDO NUMERO SEIS

Una vez detectado el START BIT el clock RT pasara por los estados RT1 a RT16 para cada bit de datos que corresponda y a continuación espera recibir un STOP BIT. Las muestras tomadas en RT8, RT9 y RT10 correspondientes al STOP BIT esperado deberían ser unos. Si no lo fuesen el sistema seteará un error de frame. Si un error de frame es detectado pues mayoritariamente las muestras en RT8, RT9 y RT10 no son unos (pero tampoco resultan las tres iguales a cero) las muestras correspondientes a RT14, RT15, RT16 son forzadas al valor uno para adelantar de esta forma la detección de una posible secuencia calificadora del START BIT.

2.2. DESVIACIONES ADMISIBLES EN LAS VELOCIDADES DE TRANSMICION. En transmisiones libres de errores y considerando desactivado el dispositivo que genera re – sincronismo ante transiciones de uno a cero en los datos es posible calcular el máximo de desviación posible entre la velocidad de transmisión real y la asumida por el receptor sin que se generen errores en la interpretación de los datos recibidos. 2.2.1. VELOCIDAD DE TRANSMISION MENOR A LA ASUMIDA Como el transmisor esta transmitiendo a una velocidad menor, cuando el clock RT considere que sus estados RT1 a RT16 corresponden al STOP BIT en realidad estará recibiendo datos previos al STOP BIT verdadero. Las señales reales del STOP BIT pueden atrasarse sin generar inconvenientes siempre y cuando satisfagan las muestras RT8, RT9 y RT10 correspondientes. La figura muestra el peor caso:

MICROPROCESADORES Y MICROORDENADORES Página 117 de 136 Versión del 29/08/a

SEÑAL REAL

START D1 D2 D3 D4 . . . . .. Dn RT ESPERA EL BIT DE STOP 1 16 1 16 1 16 1 16 1 16 . . . . 1 16 1 2 3 4 5 6 7 8 9 10 12 14 16 ESTADOS

DEL CLOCK RT

VELOCIDAD DEL TRANSMISOR MENOR QUE LA ASUMIDA POR EL RECEPTOR Si la señal real se atrasara mas de lo indicado no se podría asegurar la validez de RT8 = RT9 = RT10 = uno. Por lo tanto mientras RT emitió Krt pulsos, el clock del transmisor al menos debe haber emitido Kt pulsos con:

Krt = 16 pulsos del START BIT + 16 x N pulsos de los N bits de datos + 7 pulsos del STOP BIT previos a RT8 y por lo tanto la velocidad asumida por el receptor en bits por segundos será: (23 + 16 x N) / 16

Kt = 1 pulso de START BIT + N pulsos de los N bits de datos y por lo tanto la velocidad más lenta permitida en el transmisor en bits por segundos será N + 1

Mínima velocidad del transmisor como (N + 1) x 100 % de la Velocidad Nominal. . . . . . . . . (23 + 16 N) / 16

Para el caso de 8 bits de datos resulta 95,36 %

2.2.2. VELOCIDAD DE TRANSMICION SUPERIOR A LA ASUMIDA Como el transmisor esta transmitiendo a una velocidad mayor, cuando el clock RT considere que sus estados RT1 a RT16 corresponden al STOP BIT en realidad estará recibiendo datos posteriores al STOP BIT verdadero. Las señales reales del STOP BIT pueden adelantarse sin generar inconvenientes siempre y cuando satisfagan las muestras RT8, RT9 y RT10 correspondientes. La figura muestra el peor caso:

SEÑAL REAL

START D1 D2 D3 D4 . . . . .. Dn RT ESPERA EL BIT DE STOP 1 16 1 16 1 16 1 16 1 16 . . . . 1 16 1 2 3 4 5 6 7 8 9 10 12 14 16 ESTADOS

DEL CLOCK RT

VELOCIDAD DEL TRANSMISOR MAYOR QUE LA ASUMIDA POR EL RECEPTOR

Si la señal real se adelanta mas de lo indicado no se podría asegurar la validez de RT8 = RT9 = RT10 = uno. Por lo tanto mientras RT emitió Krt pulsos, el clock del transmisor como máximo debe haber emitido Kt pulsos con:

Krt = 16 pulsos del START BIT + 16 x N pulsos de los N bits de datos + 10 pulsos del STOP BIT previos a RT10 y por lo tanto la velocidad asumida por el receptor en bits por segundos será: (26 + 16 x N) / 16

MICROPROCESADORES Y MICROORDENADORES Página 118 de 136 Versión del 29/08/a

Kt = 1 pulso de START BIT + N pulsos de los N bits de datos + 1 pulso del STOP BIT y por lo tanto la velocidad más lenta permitida en el transmisor en bits por segundos será N + 2

Mínima velocidad del transmisor como (N + 2) x 100 % de la Velocidad Nominal. . . . . . . . . (26 + 16 N) / 16

Para el caso de 8 bits de datos resulta 103,85 %

2.3. TRANSMICION SERIAL EN EL 80186

Esta unidad esta compuesta por dos canales independientes e idénticos llamados canal 0 y canal 1. Cada canal además tiene circuitos independientes para la recepción (RX) como para la transmisión (TX) de los datos. El 80186 utiliza para el muestreo de la señal de entrada un clock interno (CT) cuya frecuencia es 8 veces la Baud Rate Base. Con referencia a la metodología explicada anteriormente, con una relación de 1 a 16, solo es cuestión de reemplazar, de acuerdo a la siguiente tabla, los estados correspondientes:

Estado con relación 1 a 16 Estado con relación 1 a 8 RT1 CT1 RT3 CT2 RT5 CT3 RT7 CT4 RT8 CT4 RT9 CT5 RT10 CT6

RX Machine. La señal recibida es conectada al pin RxD. La señal es desplazada dentro de un registro de trabajo y cuando la recepción del dato es completada el contenido de dicho registro es transferido al SERIAL RECEIVER BUFFER (SxRBUF) y una interrupción es generada. TX Machine. Una transmisión se inicia grabando en el SERIAL TRANSMIT BUFFER (SxTBUF) el dato a transmitir. El contenido de este registro es transferido a un registro de trabajo en cuanto este se encuentre vacío y desde allí es desplazado hacia el pin TxD. Cuando se ha emitido la señal correspondiente al STOP BIT se genera una interrupción que informa que la transmisión ha sido finalizada. Las transmisiones pueden ser bloqueadas por medio de la señal de entrada CTS (Clear To Send). Mientras esta señal permanezca activa será inhibida toda transmisión.

2.4. MODALIDADES DE TRANSMICION SERIE 2.4.1. MODOS 1, 3 Y 4 Estos tres modos son muy semejantes entre sí. El modo 1, transmite 8 bits de datos. Si se ha indicado control de paridad los 8 bits corresponden a 7 bits de datos propiamente dicho y el octavo bit que complementa la paridad requerida (par o impar).

MICROPROCESADORES Y MICROORDENADORES Página 119 de 136 Versión del 29/08/a

El modo 3 transmite 9 bits de datos. El noveno puede usarse como bit de paridad o libre para el usuario. El modo 4 transmite 7 bits de datos. En este caso no existe la posibilidad de bit de paridad autogenerado. 2.4.2. MODO 2 Es conocido con el nombre de “reconocimiento de dirección”. Se lo utiliza conjuntamente con el modo 3 para la comunicación inter ­ procesadores. En el modo 2 la RX no dará por completada una recepción al menos que el noveno bit sea igual a uno. Toda recepción con su noveno bit en cero es ignorada. Esto significa que los flags no serán seteados, no se iniciará la interrupción ni tampoco se transferirá el dato a SxRBUF. Es decir que una recepción ignorada pasará totalmente desapercibida para la CPU del receptor. Esta modalidad se complementa con el modo 3 en un esquema como el siguiente: Supóngase que se desea establecer la comunicación entre una unidad MASTER y una unidad SLAVE de entre varias que se encuentran conectadas sobre un único medio de comunicación. La unidad Master transmitirá siempre en modo 3 y los SLAVEs estarán inicializados originalmente para recibir en Modo 2. Cada SLAVE tiene un código de 8 bits que lo identifica (ID). A) La MASTER transmite el ID de la SLAVE con la que desea comunicarse con el noveno bit en

uno. B) Todas las unidades SLAVEs reciben este dato pero solo aquella que se identifica con el ID

transmitido cambia su modalidad de recepción a modo 3. C) La MASTER transmite la totalidad de su mensaje forzando el noveno bit de cada uno de los

caracteres transmitido al valor 0. Esto hace que solo la unidad SLAVE identificada reciba los datos y todas las otras los ignoren.

D) Cuando la transmisión termina la unidad receptora vuelve a su modo inicial de recepción que es el modo 2 y por lo tanto ignorará todo lo que se transmita por la línea hasta que una transmisión cumpla con:

Bit noveno en uno. Byte transmitido coincidente con su ID.

Evidentemente en este tipo de esquemas no es posible usar el noveno bit como el bit de paridad.

2.4.3. MODO 0 Este modo es sincrónico. La TX Machine generará una señal de clock la cual también es transmitida a la RX Machine vía un soporte de comunicaciones adicional. La señal de clock generada se entrega en el pin TxD y siempre es un divisor de la señal de clock que utiliza la CPU y puede ser interna (CLKOUT) o externa (ingresa vía BCLKx). Los datos se entregan en el pin RxD y siempre son de 8 bits. Dada la utilización de TxD para enviar el clock la transmisión en modo 0 siempre es HALF DUPLEX, es decir que la unidad que este recibiendo/transmitiendo datos en modo 0 no puede simultáneamente transmitir/recibir datos por el mismo canal.

2.4.4. VARIACIONES DE LOS MODOS Existen algunas variaciones a los métodos descriptos de uso poco frecuente pero disponibles al fin DOBLE STOP BIT

MICROPROCESADORES Y MICROORDENADORES Página 120 de 136 Versión del 29/08/a

Existen algunas unidades receptoras que no tienen la capacidad de reacción suficiente como para recibir datos que solos estén separados entre sí por un único bit. En estos casos se suele utilizar un esquema en el cual el transmisor genera siempre automáticamente dos bits del tipo STOP BIT. BRECK CHARACTER Si al receptor aun no le es suficiente con dos caracteres de STOP (caso algunas viejas unidades de telex) es posible programar al transmisor para que separe los caracteres con BRECK CHARACTER. Un BRECK CHARACTER es una larga sucesión de ceros sin intercalación de START BITs ni STOP BITs. Estos caracteres especiales también fueron usados para implementar un viejo esquema de MASTER­SLAVE.

2.5. PROGRAMACION DE LA UNIDAD SERIE DEL 80186 Existen para cada canal serie 6 registros que controlan su funcionamiento

Serial Receive Buffer Register SxRBUF

Bits 0 a 7 Dato recibido

Serial Transmit Buffer Register SxTBUF

Bits 0 a 7 Dato a ser transmitido

Baud Rate Counter Register BxCNT Baud Rate Compare Register BxCMP

Estos dos registros trabajan en conjunto y entre ambos determinan la Baud Rate Base(BRB). El BxCNT es un contador de 16 bits que es incrementado en uno cada ciclo del clock llamado Baud Timebase. El Baud Timebase puede ser el propio clock de la CPU o puede ser un clock externo que debe ser ingresado vía el pin BCLK. El bit más significativo de este registro (BxCMP) indica cual ha de ser la fuente usada para el Baud Timebase. Cuando el valor del BxCNT alcanza el valor almacenado en BxCMP se resetea BxCNT y se genera un pulso. La relación entre BRB y el valor almacenado en BxCMP viene dada por la formula:

EN MODO 0 EN MODO 1 A 4

FCPU FCPU BxCMP 1 BxCMP 1

BaudRate BaudRate * 8

Si el BTB es el clock interno siendo FCPU = 0,5 * CLCKIN Si el BTB es un clock externo las formulas se modifican de la siguiente manera:

MICROPROCESADORES Y MICROORDENADORES Página 121 de 136 Versión del 29/08/a

EN MODO 0 EN MODO 1 A 4

BCLK BCLK BxCMP BxCMP

BaudRate BaudRate * 8

Baud Rate Counter Register BxCNT

Bits 0 a 14 Valor actual del contador

Baud Rate Compare Register BxCMP

Bits 0 a 14 Valor de comparación Bit 15 Selecciona la fuente para el clock; 0 BCLK; 1 CPU clock

2.5.1. EJ EMPLOS DE VALORES PARA BXCMP La tabla siguiente muestra los valores correspondientes a BxCMP para las distintas velocidades de transmisión mas frecuentemente usadas considerando una CPU que trabaja a 20 MHz y usando el clock interno como fuente.

Baud Rate Modo 0 Modo 1 a 4 19.200 (20.000.000 / 19.200) – 1=

= 1.041d = 0411h (20.000.000 / 19.200 * 8) – 1= =129d = 0081h

9.600 = 2.082d = 0822h =259d = 0103h 4.800 = 4.166d = 1046h = 520d = 0208h 2.400 = 8.332d = 208Ch = 1.041 = 0411h 1.200 = 16.666d = 411Ah = 2.082 = 0822h

Serial Port Control SxCON

Bits 0 a 2 Modo de operación 000 modo 0 001 modo 1 010 modo 2 011 modo 3 100 modo 4 101/110/111 no usados

Bit 3 PEN Habilita el bit de paridad. Cuando corresponda el canal generará automáticamente el bit de paridad de acuerdo al tipo de paridad indicado en EVN.

Bit 4 EVN Cuando la paridad esta habilitada indica el tipo deseado Par (1) Impar (0). Bit 5 REN Habilita la RX Machine cuando es 1 Bit 6 CEN Clear To Send. Si es =1 toda transmisión queda inhibida hasta que la señal CTS

sea desactivada. Bit 7 TB8 representa al octavo (noveno ?) bit transmitido en los modos 2 y 3 Bit 8 SBRK Fuerza, cuando su valor es 1, la salida TxD igual a cero. TxD permanece en cero

mientras SBRK permanezca en uno.

MICROPROCESADORES Y MICROORDENADORES Página 122 de 136 Versión del 29/08/a

Serial Status SxSTS

Bit 1 CTS Clear To Send. Representa el complemento del valor presente en el pin CTS. La lectura de este bit no modifica el valor de CTS.

Bit 2 OE Error de sobre – escritura. Se produce cuando el registro de desplazamiento de la RX tiene disponible un nuevo dato para ser transferido a SxRBUF y el ultimo dato colocado allí aun no fue leído.

Bit 3 TXE es igual a uno solo si SxTBUF y el registro de desplazamiento de la TX están vacíos. En esta condición es posible grabar dos datos consecutivos en SxTBUF para su transmisión. El primero será inmediatamente transferido al registro de desplazamiento y el otro permanecerá en SxTBUF.

Bit 4 FE Framing Error. Es seteado a 1 cuando RX detecta un error de frame; es decir; no detecta un STOP BIT correcto cuando lo requiere.

Bit 5 TI Es seteado a 1 cuando TX comienza la transmisión de un STOP BIT. Bit 6 RI es seteado cuando la RX detecta la llegada de un STOP BIT y ha transferido el

dato a SxRBUF. Bit 7 RB8/PE Contiene el noveno bit recibido en modos 2 o 3. PE es igual a uno cuando

ocurrió un error de paridad. Solo tiene significado cuando la paridad esta habilitada en modos 1, 2 o 3.

Bit 8 DBRK0 es seteado a uno cuando se recibe un BREAK CHARACTER de al menos M bits.

Bit 9 DBRK1 es seteado a uno cuando se recibe un BREAK CHARACTER de al menos 2M + 3 bits M es la cantidad total de bits que constituyen el frame

La lectura del registro SxSTS resetea todos sus bits salvo CTS y TXE. Cada vez que los bits TI o RI son seteados por el micro (no por programa) se produce una interrupción. El canal 0 soporta el manejo de las interrupciones directamente vía la unidad integrada de interrupciones mientras que el canal 1 genera las señales de salida RXI1 Y TXI1 las cuales pueden, si así se lo desea, conectarse a pins de interrupción externos. 2.5.2. PROGRAMANDO EL MODO 0

Los pasos a seguir para programar este modo de transmisión son: a) Determinar el canal serie a utilizar e inicializar los pin de E/S de acuerdo al uso que se

pretenda. b) Programar BxCNT y BxCMP para determinar la velocidad de la transferencia y la fuente de

clock a utilizar. c) Programar bit 0, bit 1 y bit 2 con 000 para definir modo 0 d) Si se desea bloquear las transmisiones con CTS, setear en 1 el bit CEN en SxCON

Si se trata de una transmisión, grabar el dato a transmitir en SxTBUF. Esta acción desencadenará la transmisión sincrónica a la velocidad indicada con un frame de 8 bits de datos. La interrupción generada por TI = 1 o el propio chequeo de TI = 1 en el SxSTS indicaran el final de la Transmisión. Si se trata de una recepción, el seteo del bit REN en SxCON iniciara el muestreo de los datos de ingreso. Previamente debe asegurarse que el RI sea cero.

MICROPROCESADORES Y MICROORDENADORES Página 123 de 136 Versión del 29/08/a

La interrupción generada por RI = 1 o el propio chequeo de RI = 1 indicaran el final de la recepción. Los bits de errores OE, FE y PE pierden significado en este modo de operación. 2.5.3. PROGRAMANDO LOS MODOS 1 A 4

a) Determinar el canal serie a utilizar e inicializar los pin de E/S de acuerdo al uso que se pretenda.

b) Programar BxCNT y BxCMP para determinar la velocidad de la transferencia y la fuente de clock a utilizar.

c) Programar bit 0, bit 1 y bit 2 con el valor correspondiente al modo elegido. d) Si va a usarse paridad programar PEN y EVN en SxCON. e) Si se usará Clear To Send programar CEN. f) Si se desea recibir datos debe programarse REN para habilitar la RX Machine. La TX Machine

no requiere ser habilitada explícitamente. Si se trata de una transmisión la grabación del dato en SxTBUF la iniciará. La interrupción o el chequeo de TI = 1 indicará la finalización de la transmisión. Si se trata de una recepción la habilitación de una de RX con RI = 0 la iniciará. La interrupción o el chequeo de RI = 1indicará la finalización. En ambos casos detectada la finalización la lectura de SxSTS permitirá conocer el resultado de la transferencia y a la vez blanquear los bits de status.

2.6. EJEMPLOS DE PROGRAMAS. 2.6.1. PROGRAMA USANDO EL MODO 0 Ejemplo de transmisión en Modo 0

$mod186 name ejemplo_mode_0

;************************************************************** ; FUNCION: Transmite un dato del usuar io en forma ser ial y sincrónicamente vía RxD1 ; TxD1 suministr a el clock. La fr ecuencia de la tr ansmisión se calcula: ; tr an_fr eq = ( 0.5 * CLKIN / BAUDRATE ) ­ 1 ; ; A 0­1­0 pulse on P1.0 indicar á el final de la tr ansmisión. ; ; SINTASIS: extern void far parallel_ser ial (char user_data , int tr an_fr eq) ; INPUTS: user_data – dato a ser enviado ; tran_freq – valor a colocar en Ser ial Compare Register para determinar la fr ecuencia ; OUTPUTS: None ; NOTA: Los par ámetros requer idos se asumen son pasados en el stack ;************************************************************** ; B1CMP equ xxxxH Channel 1 Baud Rate Compare ; S1CON equ xxxxH Channel 1 Control ; S1STS equ xxxxH Channel 1 Status ; S1TBUF equ xxxxH Channel 1 Receive Buffer

MICROPROCESADORES Y MICROORDENADORES Página 124 de 136 Versión del 29/08/a

; xxxx – deberá ser r eemplazado por los corr espondientes valores de desplazamiento de cada regis; tro dentro de la PCB

; Se asume que todos los por t ­ pin se encuentran configurados como cor responde y ; que la PCB se encuentra en el espacio de direcciones de E/S. lib_80186 segment public ' code'

assume cs:lib_80186 public _par allel_ser ial _parallel_ser ial proc far

push bp ; salva el valor de bp mov bp, sp ; posiciona bp al tope del stack

user_data equ word ptr [bp+6] ; relaciona los nombres de los parámetros tr an_fr eq equ word ptr [bp+8] ; con su ubicación en el stack

push ax ; salva los r egistr os push dx ; que se necesitan mov dx, S1STS ; blanquea toda inter rupción pendiente mov dx, P1CON ; Lee el estado del Por t 1 in ax, dx and ax, 0feh ; setea Por t1.1 como de salida out dx, al mov dx, B1CMP mov ax, tran_freq or ax, 8000h ; setea fuente de clock como interna out dx, ax ;Modo 0, 1 millón bps mov dx, P2CON ; setea Por t 2.1 como TXD mov ax, 0ffh out dx, al mov dx, S1TBUF ; coloca en S1TBUF el dato del usuar io mov ax, out dx, al mov dx, S1CON ; Modo 0, No CTS, Transmisión xor ax, ax out dx, ax mov dx, S1STS

Check_4_TI: in ax, dx test ax, 0020h ; checkea el bit TI jz Check_4_TI mov dx, P1LTCH ; setea P1.0 como 0 xor ax, ax out dx, al not ax ; setea P1.0 como 1 out dx, al not ax ; setea P1.0 como 0 out dx, al pop dx ; recupera los r egistros salvados

MICROPROCESADORES Y MICROORDENADORES Página 125 de 136 Versión del 29/08/a

pop ax pop bp ; recupera el valor de bp r et

_parallel_ser ial endp lib_80186 ends

end

2.7. EJEMPLO DE TRANSMICION EN MODO 4

$mod186

2.8. PROGRAMA USANDO EL MODO 4

name EJEMPLO_TRANSM_ASINC ; ; Ejemplo de iniciación de la Ser ial Communications Unit. ; ; CHANNEL_SETUP setea el canal 0 a 9600 baud, full duplex, 7 bits de datos, par idad par , y con­ ; trol vía CTS#. ; ; Se asume que los registr os del por t ser ial han sido cor rectamente seteados y que la PCB se en­ ; cuentra localizada en el espacio de direcciones de E/S. ; ; B0CMP EQU 0xxxx ; Channel 0 Baud Rate Compare ; S0CON EQU 0xxxx ; Channel 0 Control ; S0STS EQU 0xxxx ; Channel 0 Status ; S0RBUF EQU 0xxxx ; Channel 0 Receive Buffer ; S0TBUF EQU 0xxxx ; Channel 0 Transmit Buffer

code_seg segment public assume cs:code_seg

CHANNEL_SETUP proc near ; Seteo del canal 0

mov ax, 8067H ; 9600 baud a 8 MHz CPU clock mov dx, B0CMP

MICROPROCESADORES Y MICROORDENADORES Página 126 de 136 Versión del 29/08/a

out dx, al ; setea: baud r ate mov ax, 0059H ; CEN=1 (CTS enabled)

; REN=0 (receiver not enabled yet) ; EVN=1 (even par ity) ; PEN=1 (par ity turned ON) ; MODE=1 (10 bit fr ame)

mov dx, S0CON out dx, al ; graba el Ser ial Control Reg.

; Blanquea toda inter rupción pendiente mov dx, S0STS in ax, dx

; habilita la RX machine mov dx, S0CON in ax, dx ; Lee S0CON or ax, 0020H ; Setea REN out dx, al ; Graba S0CON

; A par tir de este momento comienza la toma de muestr as sobre RxD. Detectado un fr ame cor recto ; el dato ser á tr ansfer ido a S0RBUF ; Un write sobre SxTBUF iniciará la tr ansmisión.

Ret CHANNEL_SETUP endp code_seg ends

end

MICROPROCESADORES Y MICROORDENADORES Página 127 de 136 Versión del 29/08/a

3. ACCESO DIRECTO A MEMORIA (DMA) 3.1. DESCRIPCION GENERAL En muchas aplicaciones se requiere transferir grandes bloques de entre memoria y el espacio de E/S. Un drive de disco por ejemplo normalmente lee y graba bloques de datos de cientos de bytes de longitud. Si la CPU fuese requerida para manejar cada uno de los bytes ha ser transferidos prácticamente la transferencia en sí absorbería la totalidad de la capacidad de ejecutar instrucciones de la CPU. Por mas que la transferencia se hiciese vía interrupciones la carga de la CPU sería muy grande. El concepto de DMA permite que la transferencia entre la memoria y los periféricos se realice sin la intervención de la CPU. Los sistemas que admiten DMA cuentan con una unidad de control de DMA la cual toma el control del bus del sistema para realizar directamente bajo su supervisión la transferencia. Cuando el controlador DMA recibe un requerimiento desde un periférico para realizar una transferencia solicita a la CPU el control del bus del sistema. En cuanto pueda la CPU entregara dicho control y el DMA realizará la transferencia. En muchos casos la CPU podrá seguir cargando instrucciones desde la cola de pre – carga. En el caso del80186 la unidad DMA tiene cuatro canales. Cada uno puede aceptar requerimientos desde una de las siguientes cuatro fuentes posibles: a) un pin externo b) la unidad de comunicaciones series. c) La unidad de relojes d) Desde un programa. e) La transferencia de los datos puede realizarse entre cualquier combinación de direcciones de

memoria y direcciones del espacio de E/S.

3.2. TRANSFERENCIA DE DATOS VIA DMA EN EL 80186 Una transferencia vía DMA se inicia con un requerimiento. Puede ser un 'source request', cuando el periférico desea transmitir datos, o un 'destination request' cuando el periférico desea recibir datos. Cuando un requerimiento DMA es servido la BIU provee las señales para controlar el Bus y el DMA provee las direcciones involucradas. Toda transferencia vía DMA consiste de dos ciclos de bus. Uno es el de carga y el otro es el de deposito. Ambos son indivisibles. Durante el ciclo de carga un byte o una palabra es leído desde la fuente y almacenada en un registro temporario. En el ciclo de depósito el contenido de dicho registro temporario es grabado en el destino. Cada canal DMA tiene almacenadas las direcciones físicas que representan la fuente y el destino de la transferencia. Como una dirección física puede tener hasta 20 bits se reservan dos registros de 16 bits cada uno para almacenar cada una de las direcciones. Estos pointers pueden ser automáticamente incrementados o decrementados a lo largo de una transferencia. Según se transfieran bytes o palabras dicho incremento o decremento será de una unidad o de dos.

MICROPROCESADORES Y MICROORDENADORES Página 128 de 136 Versión del 29/08/a

3.3. TIPOS DE REQUERIMIENTOS DMA Existen dos tipo de requerimientos de DMA: externos e internos 3.3.1. REQUERIMIENTOS EXTERNOS Son presentados en el pin DRQ. Este pin es analizado con el frente negativo de CLKOUT. Una vez detectado el DRQ activo, transcurrirán al menos 4 clocks antes que el ciclo DMA sea iniciado. La señal DRQ debe ser desactivada al menos 4 clocks antes que el ciclo DMA termine si no se desea que se arranque inmediatamente a continuación un nuevo ciclo DMA. Los requerimientos DMA externos se clasifican en sincronizados por la fuente y sincronizados por el destino. Los sincronizados por la fuente son generados por periféricos que envían datos a la CPU; los otros por periféricos que reciben datos de la CPU. El tipo de sincronización de un canal DMA se maneja por software. La figura siguiente muestra una típica transferencia sincronizada por la fuente

MICROPROCESADORES Y MICROORDENADORES Página 129 de 136 Versión del 29/08/a

La señal DRQ activa, 4 clocks antes, desencadena el ciclo de carga del ciclo DMA. El valor de DRQ, 4 ciclos previos a la terminación del ciclo DMA, es decir cuando termine T4, determinará si se reinicia o no un nuevo ciclo. Por lo tanto el periférico puede desactivar DRQ en cualquier momento entre el pulso que termina T1 y el que finaliza la fase 1 de T4 si no quiere reiniciar a continuación un nuevo ciclo DMA. En el caso de transferencias sincronizadas por destino la situación se complica pues el dispositivo debe retener DRQ hasta la finalización de T1. En el ciclo de deposito y entonces no tiene tiempo suficiente para anticipar con los 4 clocks requeridos el no re – inicio de otro ciclo. Por esta razón todo ciclo sincronizado por destino siempre inserta luego del ciclo de deposito 2 T­STATE IDLE. La figura siguiente muestra la situación descripta:

El clock que finaliza la fase 1 del T­STATE T2 del ciclo de deposito es la única oportunidad de desactivar DRQ cuando no se quieren ciclos consecutivos. 3.3.2. REQUERIMIENTOS INTERNOS Son aquellos generados por periféricos integrados o por software. Cualquiera de los 4 canales DMA puede aceptar requerimientos desde el TIMER2 o desde la unidad de comunicaciones Serie. El multiplexor INTERNAL DMA REQUEST controla cual de ellos tomará acción. 3.3.2.1. Transferencias controladas por TIME2 Cuando un canal DMA reacciona a requerimientos internos de TIME2 iniciará una transferencia cada vez que TIME2 alcance su máximo valor. Este tipo de transferencias es muy útil cuando se trata de servir a periféricos cuyo funcionamiento es basado en el tiempo. Por ejemplo, supóngase que un convertido A/D requiere datos cada 22 microsegundos para producir una onda en el rango de audio. En este caso la fuente de datos para el canal DMA sería un lugar de memoria donde el programa ira generando los distintos valores de la onda, el destino de

MICROPROCESADORES Y MICROORDENADORES Página 130 de 136 Versión del 29/08/a

los datos seria el periférico que convierte digital en analógico y TIME2 controlaría la frecuencia de la transferencia generando un requerimiento DMA cada 22 microsegundos. 3.3.2.2. Transferencias controladas por la unidad ser ie El 80186 tiene dos canales de E/S serie, cada uno de los cuales tiene sus propias RX y TX Machines. Cada uno de los 4 canales DMA puede ser asignado solo a uno de estos canales series según la siguiente tabla:

DMA canal 0 soporta al canal serie 0 como transmisor TX0 DMA canal 1 soporta al canal serie 0 como receptor RX0 DMA canal 2 soporta al canal serie 1 como transmisor TX1 DMA canal 3 soporta al canal serie 1 como receptor RX1 Cuando un canal serie completa la transmisión de un byte activa la señal de requerimiento de DMA y la señal de interrupción. La utilización de un port serie con transferencias controladas por el DMA en lugar de controladas por interrupciones provee una mejor performance sobre todo cuando se trata de bloques de gran tamaño. 3.3.2.3. Transferencias controladas por software Si se selecciona para un canal DMA el tipo de sincronización NO SINCRONIZADO la transferencia se iniciará una vez finalizado el seteo del canal DMA correspondiente y solo finalizará cuando se hallan transferidos la totalidad de los bytes indicados en la inicialización del canal.

3.4. TERMINACION Y SUSPENCIONES DE TRANSFERENCIAS DMA Cuando una transferencia DMA es terminada se desconocerán sucesivos requerimientos DMA hasta que el canal sea re – inicializado nuevamente. Si en cambio una transferencia DMA es suspendida temporalmente no es necesario re – inicializar el canal. Una transferencia DMA termina cuando:

A) Si esta programada para terminar por cuenta a cero, cuando el contador de bytes transferidos llega a cero.

B) Por programa se fuerza su terminación. Una transferencia DMA se suspende cuando

A) se procesa una NMI B) por programa se fuerza su suspensión.

3.5. INTERRUPCIONES GENERADAS POR LA UNIDAD DMA Cada canal DMA puede ser programado para genere una interrupción cuando su contador de bytes transferidos alcanza el valor cero. Los canales 2 y 3 son soportados internamente por la unidad de control de interrupciones. Los canales 0 y 1 generan las salidas DMAI0 y DMAI1 respectivamente, las cuales si se desea pueden direccionarse a pin de interrupciones externas.

3.6. ORGANIZACIÓN DE LOS CANALES DMA Un módulo DMA consiste de dos canales. Dentro de cada módulo existe una unidad lógica que define que canal será atendido si ambos requieren servicio simultáneamente.

MICROPROCESADORES Y MICROORDENADORES Página 131 de 136 Versión del 29/08/a

Por programa se fija la prioridad de un canal en ALTA o BAJA. Si la prioridad de ambos canales son iguales se aplicará un criterio de rotación. Si dos canales con prioridades distintas, dentro del mismo módulo, requieren servicio se atenderá aquel que tenga la prioridad ALTA. Este canal continuará realizando ciclos DMA mientras todas estas condiciones se verifiquen: a) el canal sigue requiriendo ciclos b) el canal no ha terminado o suspendido su transferencia(vía programación o interrupciones) c) El canal no ha liberado el bus mediante la inserción de T­STATE IDLE en una transferencia

sincronizada por destino. Este ultimo punto es muy importante cuando los dos canales usan diferentes tipos de sincronización. Por ejemplo, considerar el siguiente caso:

Canal 0 canal1 Prioridad BAJA ALTA

Sincronización POR LA FUENTE POR EL DESTINO

Si en un momento ambos requieren ser atendidos se iniciará una transferencia por el canal 1 pues su prioridad es ALTA. Pero una vez transferido el primer byte, como es sincronizado por el destino, se insertarán T­STATE IDLE y entonces el bus es tomado por el canal 0, transfiriéndose un byte a pesar que el canal más prioritario aun no ha terminado su transferencia. Canal 1 retomará el control del bus al final de la transferencia del canal 0, pues en este momento volverá a presentarse la situación que los dos requieren servicio pero el 1 es el de prioridad ALTA, y así sucesivamente se irán intercalando transferencias de ambos canales. La figura muestra distintas situaciones presentables:

La unidad DMA del 80186 consiste de dos módulos DMA y un circuito lógico de prioridades intermódulos que funciona exactamente igual que la unidad lógica que fija las prioridades a nivel canal dentro del módulo. La tabla que sigue muestra los nombres de los registros dentro de la PCB asociados a la unidad DMA y los nombres de las señales correspondientes

MICROPROCESADORES Y MICROORDENADORES Página 132 de 136 Versión del 29/08/a

La siguiente figura muestra el esquema general de la unidad DMA.

3.7. PROGRAMANDO LA UNIDAD DMA Cada canal DMA tiene asociado 6 registros que lo controlan. Existen además 2 registros adicionales que controlan la prioridad inter módulos, el multiplexor de requerimientos internos y la suspensión de servicios. Para cada canal los registros son:

DMA Source High DxSRCH

Bits 0 a 3 contienen los bits 16 a 19 de la dirección de la fuente

MICROPROCESADORES Y MICROORDENADORES Página 133 de 136 Versión del 29/08/a

DMA Source Low DxSRCL

Bits 0 a 15 contienen los bits 0 a 15 de la dirección de la fuente

DMA Destination High DxSRCH

Bits 0 a 3 contienen los bits 16 a 19 de la dirección del destino

DMA Source Low DxSRCL

Bits 0 a 15 contienen los bits 0 a 15 de la dirección del destino

DMA Control Register DxCON

Bit 15 DMEM Si = 1 destino en memoria; si =0 destino en espacio E/S Bit 14 DDEC si =1 el pointer de destino es decrementado luego de cada transferencia. Bit 13 DINC si =1 el pointer de destino es incrementado luego de cada transferencia.

Nota: Si DDEC = DINC el pointer permanece constante Bit 12 SMEN Si = 1 la fuente en memoria; si =0 la fuente en espacio E/S Bit 11 SDEC si =1 el pointer de la fuente es decrementado luego de cada transferencia. Bit 10 SINC si =1 el pointer de la fuente es incrementado luego de cada transferencia.

Nota: Si SDEC = SINC el pointer permanece constante Bit 9 TC si =1 se dará por terminada la transferencia cuando el contador llegue a cero. Bit 8 INT si =1 cuando el contador llegue a cero se generará una interrupción Bit 6/7 SYN Determinan el tipo de sincronización

00 no sincronizado 01 sincronizado por la fuente 10 sincronizado por el destino 11 no usado

Si 00 el canal comenzará a transferir datos inmediatamente a continuación de hacer STRT igual a 1

bit 5 P Prioridad. ALTA (1) BAJA (0) bit 4 IDRQ si es setea = 1 el canal solo reaccionará a requerimientos internos. Si es =0

solo atenderá requerimientos externos vía el pin DRQ bit 3 no se usa bit 2 CHG si es = 1 habilita la posibilidad de modificar STRT Bit 1 SRRT Hacerlo igual a 1 indica la iniciación del canal. Solo puede modificarse si

CHG = 1. Bit 0 WORD si es = 1 se transferirán palabras; si es = 0 se transferirán bytes

DMA Control Register DxCON

Bit 15 DMEM Si = 1 destino en memoria; si =0 destino en espacio E/S Binario que indica la cantidad de transferencias a realizar. Este numero es decrementado en una

unidad cada vez que una transferencia unitaria es realizada. Los dos registros generales de la unidad DMA son:

DMA Module Priority Register DMAPRI

MICROPROCESADORES Y MICROORDENADORES Página 134 de 136 Versión del 29/08/a

Bit 10 IDRQB Si = 0 el TIMER2 será la fuente de los requerimientos internos para el módulo B (canales 2 y 3). Si = 1 el canal serie 1 será la fuente. RX1 a canal DMA 3 TX1 a canal DMA 2

Bit 8 IDRQA Si = 0 el TIMER2 será la fuente de los requerimientos internos para el módulo A (canales 0 y 1). Si = 1 el canal serie 0 será la fuente. RX0 a canal DMA 1 TX0 a canal DMA 0

Bit 2 DMAPB si es = 1 el módulo B tiene prioridad ALTA Bit 0 DMAPA si es = 1 el módulo A tiene prioridad ALTA

Si es DMAPA = DMAPB la prioridad es rotativa

DMA Halt Register DMAHALT

Bit 15 HMI Debe ser = 1 para habilitar la posibilidad de modificación de HNMI. Bit 9 HMB Debe ser = 1 para habilitar la posibilidad de modificación de HDMB. Bit 8 HMA Debe ser = 1 para habilitar la posibilidad de modificación de HDMA. Bit 7 HNMI es puesto = 1 cuando la CPU procesa una NMI. Mientras este en 1 suspende

toda transferencia en ambos módulos. Es reseteado a cero automáticamente cuando la CPU procesa la instrucción IRET.

Bit 1 HDMB si es = 1 suspende las transferencias del módulo B Bit 0 HDMA si es = 1 suspende las transferencias del módulo A

3.7.1. SECUENCIA CORRECTA PARA LA PROGRAMACION DEL DMA 1) Programar los pointers a la fuente y al destino de cada uno de los canales DMA que vayan a

usarse. 2) Programar la prioridad inter módulos 3) Programar el registro de control y el contador de transferencias de cada canal comenzando con

el de mayor prioridad. 3.7.2. UTILIZACION DE LA UNIDAD DMA CON LOS PUERTOS DE COMUNICACIÓN SERIE. 3.7.2.1. Ejemplo 1. Puerto ser ie 0 en recepción Se usará el canal DMA 1 en el módulo A. El pointer a la fuente debe apuntar a SxRBUF El pointer al destino apuntará al lugar de memoria donde el mensaje a recibir debe ser almacenado. El registro de contador de transferencia debe iniciarse con la cantidad de transferencias unitarias requeridas El canal DMA se programará para que acepte requerimientos internos y del canal serie 0. Los valores de cada uno de los registros asociados serán:

D1SRCL/H Dirección del S0RBUF D1DSTL/H Dirección de un lugar de memoria, por ejemplo MSG_RCV DMAPRI IDRQB = 0

IDRQA = 1 canal serie 0 será la fuente de interrupciones DMAPB = 0 DMAPA = 1 el módulo A tendrá prioridad ALTA

MICROPROCESADORES Y MICROORDENADORES Página 135 de 136 Versión del 29/08/a

D1TC 128 el mensaje a recibir será de 128 bytes de longitud. D1CON DMEN = 1 destino en memoria

DDEC = 0 DINC = 1 el pointer a memoria de destino deberá incrementarse en uno luego

de cada transferencia unitaria SMEN = 0 SDEC = 0 SINC = 0 TC = 1 terminar la transferencia cuando el contador llegue a cero. INT = 1 generar interrupción cuando el contador llegue a cero. Como es el

canal DMA 1 la interrupción se presentará en DMAI1. SYN = 01 sincronizado por la fuente P = 1 prioridad de este canal ALTA IDRQ = 1 reaccionará a requerimientos internos. CHG = 1 habilita el posible cambio de STRT

STRT = 1 inicia el canal WORD = 0 se transferirán bytes.

Cuando el canal serie reciba el primer byte de la transmisión en S0RBUF generará una interrupción de recepción la cual internamente provocará un requerimiento de DMA canal 1. Cuando la BIU satisfaga este pedido de un ciclo de bus (respetando sus prioridades) se produce la transferencia entre S0RBUF y el primer byte del buffer MSG_RCV. Con cada byte adicional recibido se generará una situación similar pero como el pointer a destino se incrementa en uno cada vez los bytes recibidos se van colocando en posiciones consecutivas a partir del primer byte en MSG_RCV: Cuando se transfiera el byte numero 128 el contador llegara a cero y por lo tanto se terminara la transferencia (el canal 1 deberá iniciarse nuevamente para que pueda reaccionar a un nuevo requerimiento DMA) y se generará una señal de interrupción en DMAI1. Si este pin se conecta con alguna de las entradas de interrupciones externas de la unidad de interrupciones por programa se podrá detectar esta interrupción y su rutina de servicio correspondiente tiene a su disposición los 128 bytes transmitidos. Durante la transferencia la CPU no fue requerida en lo mas mínimo. Si se quisiese programar una transmisión serie, el proceso es muy similar, pero una diferencia importante es que la transmisión debe iniciarse moviendo el primer byte a transferir al TBUF del canal serie correspondiente con una instrucción OUT. Una vez iniciada la transferencia continuará automáticamente hasta que el contador alcance el valor cero.

MICROPROCESADORES Y MICROORDENADORES Página 136 de 136 Versión del 29/08/a

APENDICE A. PRECIOS APROXIMADOS Costos de procesadores en funcion de tipo de encapsulado. Fecha AGOSTO­1998.

80186 Numero de item Precio

$ A80C186XL­12 24.6 A80C186XL­20 25.35 KU80C186EC­20 12.75 KU80C186EC­25 12.75 N80C186XL­12 7.75 N80C186XL­20 7.75 N80C186XL­25 7.75 R80C186XL­12 20.65 R80C186XL­20 20.65 S80C186EB­25 10.2 S80C186EC­25 12.35 S80C186XL­20 8 S80C186XL­25 8 SB80C186EA­20 19.5 SB80C186EC­20 13.25 SB80C186XL­20 16 SB80C186XL­25 8.65 SB80L186EB­13 10.85 SB80L186EB­16 10.85 TA80C186XL­12 24.6 TA80C186XL­20 24.6 TN80C186EA­13 19.5 TN80C186EA­20 19.5 TN80C186EB­13 9.95 TN80C186EB­20 9.95 TN80C186XL­12 7.75 TN80C186XL­20 7.75 TS80C186EB­13 10.2 TS80C186EC­20 12.35 TS80C186XL­20 8 64 TS80L186EB­13 10.2

80386 Numero item Descripcion Precio

$ FA80386EXTB25 32 BIT MICROPROCE 16.50 FA80386EXTC33 32 BIT MICROPROCE 16.50 KU80386EXTB25 32 BIT MICROPROCE 15.80 KU80386EXTC25 32 BIT MICROPROCE 15.80 KU80386EXTC33 32 BIT MICROPROCE 15.80 KU80386SXTA25 32 BIT MICROPROCE 11.85 NG80386SX16 32 BIT MICROPROCE 10.00