Conceptos de E/S: Polling, Interrupciones, DMA Sistemas con Microcontroladores y Microprocesadores http://www.herrera.unt.edu.ar/procesadores Esquema de un Sistema de Control Las variables de entrada se miden mediante sensores. Se obtienen así variables eléctricas analógicas y/o digitales. Las variables analógicas ingresan vía conversor A/D. Previa adaptación de niveles de tensión. El programa en el MC toma acción mediante variables de salida. Ej. Abrir Válvulas de una caldera. Manejan actuadores. Conversión D/A y cambio de nivel mediante A veces señales digitales directamente. Si las variables son muchas se pueden multiplexar 12/11/2014 Sistemas con Microcont. y Microproc. - UNT 2 Control El control de un sistema se puede realizar, en general, en forma analógica o digital. El control analógico: se implementa mediante circuitos analógicos y emplea variables analógicas. Ventaja: respuesta mucho más rápida a los cambios. Este tema se desarrolla en otros cursos. El control digital se implementa usando señales lógicas (1 o 0). Requiere Conversor A/D para entrada y D/A para salidas. Muchas veces ingresan o salen señales digitales. Ventaja: tiene una mayor inmunidad al ruido. ¿por qué? El control digital puede implementarse mediante: Lógica cableada (con compuertas y componentes) Lógica programada (que emplea además un procesador). 12/11/2014 Sistemas con Microcont. y Microproc. - UNT 3 Ventajas de Lógica Programada Flexibilidad. En general se requiere solo cambiar el programa. Mayor Economía. Facilidad de Mantenimiento. Los mC son sumamente baratos. Se puede agregar más funcionalidad de manera simple y casi sin costo adicional. Se pueden diseñar sistemas con programas de autotest. Es más sencillo mantener un programa que un circuito. Existen herramientas en PC de desarrollo y mantenimiento. Revolución del mP. 12/11/2014 Hasta 1980, el control digital solo podía implementarse con lógica cableada. ¡Las computadoras eran demasiado caras! Sistemas con Microcont. y Microproc. - UNT 4 Confiabilidad y Disponibilidad Confiabilidad: Tiempo hasta que se produce una caída de servicio. MTTF: Tiempo medio hasta la caída. AFR: Tasa anual de fallas. Disponibilidad: Porcentaje de tiempo que el sistema está disponible. MTTR: Tiempo medio de la reparación. D = MTTF / (MTTF + MTTR). Disponibilidad se mejora: Mejorando Confiabilidad Agregando Hw Redundante. Ej: agregar ECC (error correction code)a la memoria. Mantenimiento Preventivo. Disminuyendo Fallas. Mejora de las condiciones de trabajo (temperatura, tensión cte., ). Fabricando componentes más confiables. Diseñando con menos componentes Bajando MTTR. Sistemas automáticos de diagnóstico. Sistemas con Microcont. y Microproc. - UNT Ventajas Lógica Programada: confiabilidad. Un sistema con lógica programada puede incluir funciones de auto revisión e informar si hay malfuncionamiento. Puede tomar n medidas de una variable y revisar si está dentro de un margen de error aceptable y quedarse con la variable promedio – “blindaje estadístico al ruido”. Por último un sistema de lógica programada puede estar replicado un número impar de veces y tomar decisiones por mayoría. Mejora más si cada sistema cumple igual función con distinto desarrollo. ¿Qué usa menos componentes: un sistema con lógica programada o con lógica cableada? ¿Alguna ventaja de lógica cableada Vs programada? 12/11/2014 Sistemas con Microcont. y Microproc. - UNT 6 Clasificación de la Información Por la naturaleza: analógica o digital. Por su contenido: datos, control o status. Por la forma de transmisión: ¿Cómo sabe el mCcuál es cual? Serie Paralelo Combinación de ambos. Por el modo de transmisión: Sincrónico Asincrónico. 12/11/2014 Sistemas con Microcont. y Microproc. - UNT 7 Métodos de E/S Existen diversas maneras de manejar las entradas/salidas desde el microprocesador. Polling (Encuestas): Consiste en testear permanentemente una señal de status, hasta que esta tome un valor. Entonces se ejecuta la E/S. Requiere que el programa principal se ocupe de testear. Puede testear continuamente y no se puede hacer más nada. Puede testear periódicamente sin que pare el programa principal. Si está bien diseñado, atiende más rápido una señal. Interrupción: Cuando la señal de status toma un valor, el programa se interrumpe para manejar la E/S. Mucho más complicado de reproducir para probar. El programa principal está libre para realizar otras tareas. No hay desperdicio de tiempo testeando. Mayor sobrecarga (overhead). 12/11/2014 Sistemas con Microcont. y Microproc. - UNT 8 Ejemplo de E/S Asincrónica. 1. 2. 3. 4. 5. 6. Se ingresa un byte en paralelo al mCQY4 vía Puerto B. Se ocupan dos líneas de PTA para Ready y /Strobe. Inicio: /STB=RDY=1 –perif listo para recibir. Perif: /STB=0 – Dato listo. mC: toma Dato – RDY=0 mC listo próx DatoRDY=1 Perif: /STB=1 – Ok, prepara próx dato. Más datos ir a 2 12/11/2014 Sistemas con Microcont. y Microproc. - UNT 9 Entrada por Polling Estructura de Datos Puntero a una tabla. Contador: n datos a tomar Aunque no haya interrupciones, es posible utilizar el detector de flanco negativo incorporado en el modulo IRQ (PTA2). Un flanco negativo se registra en bit IRQF1 del registro “IRQ Status and Control Register” 12/11/2014 Sistemas con Microcont. y Microproc. - UNT 10 Para Recordar 12/11/2014 Sistemas con Microcont. y Microproc. - UNT 11 Programa de Polling. ;Inicializar puertos MOV 2,INTSCR BSET 6,CONFIG2 MOV #00,PTA MOV #01,DDRA MOV #00,DDRB ... ;Inhabilitar los pedidos de IRQ. ;Habilitar pin PTA2 como IRQ ;Puerto A en 0 (READY = 0) ;Puerto A en entrada, salvo PTA0 que es una salida. ;Puerto B como entrada ;Programa de polling, HX contiene puntero, Contador(en página 0) contiene n. Poll: Lazo: MOV #01,PTA BRCLR 3,INTSCR,lazo MOV #00,PTA BSET 2,INTSCR MOV PTB,X+ DBNZ Contador, Poll … ;(READY = 1) Listo para recibir ;lazo hasta que se detecte un flanco negativo ;(READY = 0) ;ACK=1, borra flag detección flanco. ¿Por qué no se pone ACK en 0 con BCLR luego de BSET? 12/11/2014 Sistemas con Microcont. y Microproc. - UNT 12 E/S por Interrupciones Usando interrupciones, es muy simple manejar una rutina de E/S asincrónica. El programa principal debe ser responsable de inicializar: Habilitar la interrupción Variables globales Puntero inicial a tabla. Dimensión de la tabla (Contador) RDY = 1, IM = 0. Atención: Fin de Bloque - no se pone Ready=1. ¿Por qué? 12/11/2014 Sistemas con Microcont. y Microproc. - UNT 13 Rutina de Interrupción ;La inicialización es identica a la inicialización de polling ... ; en el programa principal MOV #DirH, Puntero MOV #DirL, Puntero+1 MOV #n, Contador BCLR 1, INTSCR ;habilito las interrupciones de IRQ CLI ;habilita interrupciones a CPU08 BSET 0, PTA ;READY = 1 ... Int: MOV #00,PTA ;READY = 0 PSHH ;Termino de guardar el estado LDHX Puntero ;Cargo el puntero en H:X MOV PTB,X+ ;Guardo en memoria STHX Puntero DEC Contador BEQ IntFin ;llenó la tabla, no ponga RDY. MOV #01,PTA ;(READY = 1) IntFin: PULH ;Recupero el estado que no recupera RTI RTI ¿Cómo se borra el pedido de interrupción? ¿No con ACK=1? ¿Qué pasa cuando la tabla se llena? ¿Cómo vuelve READY a 1? 12/11/2014 Sistemas con Microcont. y Microproc. - UNT 14 Salida de Datos Tarea Para hacer en la Casa: Programa de Salida por Polling. Salida por Interrupciones. 1. 2. 1. ¿Cómo se envía el primer dato? Tarea para Pensar ¿El diseño es simétrico con Entrada de datos? 1. • • • • 12/11/2014 Si conecto dos MCUs, uno de salida, otro de entrada, ¿funcionarán bien? ¿Estado Inicial? – Ninguno Listo. Para pasar a listo no hay flanco negativo, ¿cómo se causa la primera interrupción? ¡¡Hacen falta flancos negativos!! Sistemas con Microcont. y Microproc. - UNT 15 Conexión Asincrónica: 2 mC mC-R y mC-T (receptor y transmisor). 1. Inicialización. 2. Si no hay datos no hace nada. Pone un dato, /Rdy-T=0 luego /RDY-T=1 y retorna. mC-R se interrumpe /RDY-T=1, /RDY-R=1. (No están listos, PUD=1) mC-R controla que /RDY-T=1 y entonces pone flanco negativo en /RDY-R e interrumpe a mC-T. mC-T se interrumple. 3. /RDY en lugar de RDY. El diálogo es entre flancos negativos en /STB Pone /Rdy-R=1, toma un dato y pone /Rdy-R=0, goto 2. ¿Qué pasa si T comienza después que R y no ve el flanco negativo en /RDY-R? 12/11/2014 Sistemas con Microcont. y Microproc. - UNT 16 Tasa Máxima de Transferencia Tasa máxima a la que el dispositivo puede transferir datos al MCU sin perder ninguno. El tiempo que tarda el MCU en procesar un dato es t= To + Td. Td (tiempo de dato) es el tiempo para pone un dato en Memoria (idealmente 1 M) To (tiempo de overhead) es el tiempo que se tarda en detectar la señal, saltar al código adecuado, manejar la linea READY, mantener los punteros, buscar instrucciones, etc. 12/11/2014 Sistemas con Microcont. y Microproc. - UNT 17 Tasa Máxima en Polling En caso de tasa máxima, el lazo de detección solo se ejecuta una vez por cada dato que llega, más rápido se pierden datos. Los tiempos son: ;*********LAZO POLLING************ Poll: Lazo: Si f(bus)=3,2 MHz Td= 1 M To= 25 M t= 26 M. M=312 ns. MOV #01,PTA BRCLR 3,INTSCR,lazo BSET 2,INTSCR MOV #00,PTA MOV PTB,X+ DBNZ Contador, Poll M 4 5 4 4 4 5 Tasa máxima=123 KB/s Eficiencia=1/26 =3,75 % Trabajo útil / Trabajo Total. 12/11/2014 Sistemas con Microcont. y Microproc. - UNT 18 Tasa Máx. con Interrupciones Con IRQ=0, el CPU termina la instrucción actual, guarda el estado, y salta al lugar escrito en su vector de interrupción. Con tasa máx. termina una rutina de INT y comienza otra. ¿Por qué? Respuesta a IRQ: 9 ciclos. Los tiempos son: Td= 1 M To= 46 M t= 47 M. A 3,2 MHzf(bus), Tasa máxima 68 KBps Eficiencia = 1/47 = 2,12% Casi la mitad que en Polling Solo en Tasa Máxima. ¿Y en otros casos? 12/11/2014 ;Instrucción anterior ;cargar interrupción Int: MOV #00,PTA PSHH LDHX Puntero MOV PTB,X+ STHX Puntero DEC Contador BEQ IntFin MOV #01,PTA IntFin: PULH RTI Sistemas con Microcont. y Microproc. - UNT M 0 9 4 2 4 4 4 4 3 4 2 7 19 Resumen E/S de datos modo asincrónico. Polling. Interrupciones. Conexión de dos MCUs. Tasa Máxima. Eficiencia Baja. ¿cómo mejorar? 12/11/2014 Sistemas con Microcont. y Microproc. - UNT 20 Administrativia 9 de diciembre – parcial. 12/11/2014 Sistemas con Microcont. y Microproc. - UNT 21 Modo Bloque La Tasa Máx. de Transf. con Interrupciones es muy inferior que con Polling. Sin embargo, con interrupciones se permite al CPU realizar otras tareas, mientras que el polling (como lo hemos diseñado) no. Desde el punto de vista de la eficiencia, la verdadera diferencia está en el Tiempo de Overhead, mucho mayor. Para mejorar la eficiencia con dispositivos rápidos se ingresan bloques o ráfagas de n bytes con cada interrupción. El dispositivo pide INT y luego transmite el bloque completo. De esta manera, gran parte del overhead solo se ejecuta una vez cada n datos y mejora la eficiencia. 12/11/2014 Sistemas con Microcont. y Microproc. - UNT 22 Rutina de Interrupción Modo Bloque ;La inicialización es idéntica a la inicialización de polling... ; en el programa principal MOV #Dir, Puntero MOV #n, Cont BCLR 1,INTSCR CLI BSET 0,PTA ... Int: Lazo: Stb: Fini: MOV #$00,PTA PSHH LDHX Puntero MOV PTB, X+ DEC cont BEQ fini MOV #01, PTA BRCLR 3,INTSCR,Stb MOV #00,PTA MOV PTB,X+ BSET 2,INTSCR DBNZ Cont,Lazo PULH RTI ;habilita pedidos de IRQ ;habilita interrupciones en CPU ;pone RDY=1 ;READY = 0 ;Guardar H ;Cargar puntero ;Mover primer dato y actualizar HX ;actualizar cont para primer dato ;si no hay más termina – redundante ;READY = 1 ;lazo hasta próx. flanco negativo ;(READY = 0) ;Clear IRQF – ACK=1 ;Lazo del bloque – sale con READY=0 ;Recupero H ¿Por qué Clear IRQF? 12/11/2014 Sistemas con Microcont. y Microproc. - UNT 23 Tasa Máx en Modo Bloque No hay espera en STB. Los tiempos son: A 3,2 MHz(fbus) t’= 45 M (fuera de lazo) t’’=26.n M (dentro del lazo) T(byte) = T(bloque)/n T(byte) = 26M + t’/n Despreciamos t’/n Tasa Máx= 123 KB/seg Eficiencia = 3,85% Similar a Polling. 12/11/2014 ;Instrucción anterior ;cargar interrupción Int: MOV #$00,PTA PSHH LDHX Puntero MOV PTB, X+ DEC cont BEQFini Lazo: MOV #01, PTA Stb: BRCLR 3,INTSCR,Stb 3,INTSCR,Stb MOV #00,PTA MOV PTB,X+ BSET 2,INTSCR DBNZ Cont, Cont,Lazo Lazo Fini: PULH RTI Sistemas con Microcont. y Microproc. - UNT 6 9 4 2 4 4 4 3 4 5 4 4 4 5 2 7 24 M M M M M M M M M M M M M M M M Limitaciones de E/S. Dispositivos Rápidos: Existe un límite superior de la tasa de envío de datos, a partir de allí se pierden datos. ¿Dispositivos Lentos no tienen limitaciones? ¿Provocan algún otro problema? 12/11/2014 Sistemas con Microcont. y Microproc. - UNT 25 Múltiples Dispositivos Lentos Sean n dispositivos que transfieren datos Todos a igual tasa: fdisp Todos consumen igual tiempo de CPU, Tdisp=D (Identificación por Hw). ¿Efecto en la performance con que corre el programa en el CPU? ¿Existe un límite a la cantidad de dispositivos que puedo conectar? 12/11/2014 Sistemas con Microcont. y Microproc. - UNT 26 Performance con múltiples dispositivos 1. 2. El tiempo necesario para hacer correr un programa resulta Sin interrupciones, T = Tprogprinc Con interrupciones, T’ = Tprogprinc+ n.Tdisp con T’=1/fdisp Performance de un programa inversamente proporcional a su tiempo de ejecución. De (1) y (2) resulta T/T’ = 1 - n.(Tdisp/T’)= 1 - n.D.fdisp La máxima cantidad de dispositivos a conectar sale igualando la performance a 0 T/T’=0 :fdisp= 1/n.D o T’=n.D En este caso, el CPU no ejecuta el programa principal. Más dispositivos o más tiempo para cada uno implica que se perderán datos, con o sin buffer. 12/11/2014 Sistemas con Microcont. y Microproc. - UNT 27 Ej. Efecto de dispositivos lentos. Para un MPU a 3,2 MHz en el bus y 20 dispositivos a igual tasa =1 KB/s. fdisp=1 KB/s, n = 20. Tdisp=47M T/T’ ¡La (47 ya visto). = 1 - n.fdisp.Tdisp =0,70 performance ahora es 30% menor! nmax = 14,68 ms = 1/fdisp.Tdisp = 68. Resolver en la casa con: 5 dispositivos a 1 KB/s. conjuntamente con15 dispositivos a 2KB/s. 12/11/2014 Sistemas con Microcont. y Microproc. - UNT 28 En caso de Polling Se realizan encuestas periódicas y queda tiempo para el programa. Se debe realizar encuestas al ritmo de ingreso de datos. La duración de cada encuesta depende de cuántos periféricos hay y cuantos datos se ingresan. Así se calcula el tiempo en que el CPU no ejecuta el programa principal. El resto del cálculo es similar que lo visto en Interrupciones. 12/11/2014 Sistemas con Microcont. y Microproc. - UNT 29 Limitaciones de E/S En conclusión: Hay un límite en velocidad de transferencia para dispositivos rápidos. Hay un límite en cantidad de dispositivos lentos que se pueden conectar. En ambos casos el Programa Principal corre más lento. ¡CUIDADO CON COP! Nos interesa incrementar estos límites. Dos alternativas: Fuerza Bruta ($$$) – comprar un MCU más rápido.Existe un límite dado por la tecnología actual. Diseño (arquitectura). 12/11/2014 Sistemas con Microcont. y Microproc. - UNT 30 Problemas Métodos Anteriores El CPU es el cuello de botella:siempre habrá un programa principal que correr. Cada vez que ingresamos un dato, tenemos que ejecutar múltiples instrucciones. Cada una tiene su propio Fetch. Por tanto son muchos accesos a memoria En realidad la transferencia de un dato requiere, al mínimo un único acceso a M. Gran diferencia entre lo que tenemos (47M) y lo mínimo (1M). 12/11/2014 Sistemas con Microcont. y Microproc. - UNT 31 Problema: CPU es Intermediario CPU Dispositivo Memoria Las líneas denotan conexiones lógicas, no físicas. 12/11/2014 Sistemas con Microcont. y Microproc. - UNT 32 Solución: Acceso Directo a M: DMA Control DMA Dispositivo Memoria CPU 12/11/2014 Sistemas con Microcont. y Microproc. - UNT 33 Controlador DMA (DMAC) 1. 2. 3. Un dispositivo controlador (DMA Control) realiza las siguientesfunciones: El DMAC debe quitar al CPU el uso del Bus. El DMAC conecta el puerto al bus y provee todas las señales y la dirección en donde se debe realizar la transferencia del dato en M. Una vez finalizada la transferencia, DMA otorga al CPU el uso del bus. Para quitar el CPUs del bus, algunos mP tienen una entrada que se llama TSC (3’state control) que permite: 12/11/2014 Ponerlo en estado de alta impedancia Parar el Clock (“duerme”). Sistemas con Microcont. y Microproc. - UNT 34 Requerimientos Hw del DMAC Puntero incrementable a memoria. Contador de cantidad de bytes a transferir. Son los mismos requerimientos que usan las rutinas de E/S por Polling o por Interrupciones La naturaleza del problema es el mismo. Solo varía la forma de implementarlo. 12/11/2014 Sistemas con Microcont. y Microproc. - UNT 35 12/11/2014 C C Ej. Implementación DMA Bloques Sistemas con Microcont. y Microproc. - UNT 36 DMA Modo Bloque - Secuencia 1. 2. 3. 4. 5. 6. 7. 8. 9. El CPU configura al DMA: cuántos datos va a tomar y dónde los va a poner (PUNT y N) El periferico manda una señal al DMA: requiere enviar datos: DMAREQ. El DMA pone el CPU “a dormir” por medio de la señal TSC (control 3’state). El CPU termina el ciclo M actual y se pone en 3 state, inactivo, informa esto mediante una señal TSC-ACK. El DMA otorga al Periférico el uso del DB mediante una señal DMAGRANT y maneja el AB y CB con cada byte que se transmite. Cuando CONT=0, DMA quita DMA-GRANT. El DMA despierta al CPU quitando TSC. El DMA pide interrupción al CPU. La rutina de interrupción de CPU 10. pone FLAG=1 para indicar al Programa Principal que hay Datos a Procesar. Si se requieren más datos, informa al DMA en qué bloque de M debe poner los Datos del Periférico, mediante un puntero y un contador Retorno a Programa Principal. 12/11/2014 Sistemas con Microcont. y Microproc. - UNT 37 DMA Modo Byte – Secuencia. Programa Principal Inicializa DMA cargando Contador y Puntero. Periférico Pide DMA-REQ para enviar un byte. Controlador DMA envía TSC al CPU. CPU termina ciclo M actual, abandona el bus, queda inactivo, envía TSC-ACK. DMA Control permite al Periférico enviar un único Dato y maneja AB y CB. 1. 2. 3. 4. 5. Poniendo y quitando DMA-Grant. Actualiza su contador y Puntero. DMA Control quita TSC del CPU. CPU toma el bus y continúa, quita TSC-ACK. Si Contador=0 en DMA Control 6. 7. 8. 12/11/2014 Pide INT al CPU. CPU ejecuta Rutina Interrupción que envía nuevos valores de Contador y Puntero al DMA-Control y FLAG=1 avisa Nuevo Block. Sistemas con Microcont. y Microproc. - UNT 38 Límites DMA Modo Byte. CPU requiere 1M para soltar el bus. 1M para enviar el Byte a M y actualizar puntero y Contador (Hw). 1M para reactivar el CPU. Cada transferencia dura 3M (Vs. 26M o 47M). Se dice que con cada transferencia DMA roba ciclos de bus al CPU. Este modo se llama “Cycle Stealing” o “Robo de Ciclo”. Calcular cantidad máxima de dispositivos que envían datos a 1 KB/seg c/u. (fbus=3,2MHz) Calcular cuánto más lento % corre el CPU con 20 dispositivos. 12/11/2014 Sistemas con Microcont. y Microproc. - UNT 39 DMA. Efecto dispositivos lentos. Para un MPU a 3,2 MHz de bus y 20 dispositivos a igual tasa =1KB/s. fdisp=1 KB/s, n = 20. Tdisp=3M = 0,937 ms (3 ya visto). T/T’ = 1 - n.fdisp.Tdisp = 0,9813 98,13% nmax = 1/fdisp.Tdisp = 1067 Valores E/S por Interrupción: 70% 12/11/2014 - nmax= 68 Sistemas con Microcont. y Microproc. - UNT 40 Límites DMA Modo Bloque To es el tiempo para poner a dormir el CPU y levantarlo: 2M. Despreciable con n grande. ¡¡ Para cada Byte se requiere 1M !! Es el límite dado por fbus. Imposible más rápido con ese bus. Tasa máxima a 3,2 MHZ = 3,2 MB/seg. (Vs 132 KB/s modo bloques). Esta transmisión es sincrónica – ¿Trampa? 12/11/2014 Sistemas con Microcont. y Microproc. - UNT 41 Aclaración Interrupciones El pedido de interrupción se limpia automáticamente. Con la respuesta a Interrupción. NO SOLO EN MODULO IRQ. En todo otro módulo en que se pueda, por ejemplo Módulo Módulo KBI (Interrupciones de teclado). ADC (conversor AD) La experiencia… a veces nos confunde. Cuando se cambia de un MCU Los técnicos son muy seguros siempre hacen lo mismo. a otro. Los ingenieros DEBEN LEER Y DUDAR. 12/11/2014 Sistemas con Microcont. y Microproc. - UNT 42 T. Máx en M. Bloque Sincrónica - INT. No hay Ready. No hay espera en STB. Los tiempos son: A 3,2 MHz T’’=18.n M (dentro del lazo) Tb= 18M + T’/n Despreciamos T’/n Tasa Máx= 178 KB/seg Eficiencia = 4,5% (1M útil) Nada que ver con DMA ¿Eficiencia DMA Bloque? ¿DMA Byte? 12/11/2014 ;Instrucción anterior ;cargar interrupción Int: PSHH LDHX Puntero MOV PTB,X+ DEC Contador Stb: BRCLR 3,INTSCR,Stb MOV PTB,X+ BSET 2,INTSCR DBNZ Contador, Stb PULH RTI Sistemas con Microcont. y Microproc. - UNT 6 9 2 4 4 4 5 4 4 5 2 7 43 T T T T T T T T T T T T Concurso de Cerveza Pido 10 vasos de cerveza. 1. 2. 3. Tasa = Medio vaso por minuto Quiero duplicar mi tasa de consumo – a un vaso por minuto. En 10’ el mozo limpia mi mesa y las trae una por una. En 10’ minutos me tomo las cervezas. No puedo tomar mientras el mozo está poniendo cervezas, porque me choco.. Pido otros10 vasos, volver a 1. Imposible beber más de 1vaso/min. ¿cómo hago para duplicar? 12/11/2014 Sistemas con Microcont. y Microproc. - UNT 44 Swinging Tables (intercambiables) 1. Pido 10 cervezas. Le digo al mozo que voy a tomar en dos mesas, que cuando haya una mesa vacía la llene con cerveza. 2. En 10’ trae las cervezas a mi mesa. 3. Comienzo a tomar cerveza. Al mismo tiempo el mozo va llenando la otra mesa. 4. En 10’ cambio de mesa y el camarero también y así sucesivamente. Tasa de consumo = 1 cerveza por minuto, ¡el doble! Si no está exactamente sincronizado uno esperará al otro, y baja la tasa. Si el mozo se apura un poco, queda con un vaso en la mano. PENDIENTE. 12/11/2014 Sistemas con Microcont. y Microproc. - UNT 45 Entrada por INT con Swinging Blocks. 2 Bloques en M para datos. Se llena el primero por Interrupciones. Programa Principal procesa un bloque Modo Byte. Y más aún cuando los dos procesos tienen duraciones parecidas. Trabajo Concurrente. Se va llenando el otro por interrupciones. Programa Principal e Interrupciones se van intercambiando los bloques (de allí el nombre). Se gana cuando el dispositivo es lento. Al Principio Vacíos ¿Se podrá trabajar en Paralelo? ¿Se podrá realizar DMA con Swinging Blocks? 12/11/2014 Sistemas con Microcont. y Microproc. - UNT 46 Swinging Blocks con E/S por INT Estructura de Datos: 2 tablas de n bytes, una a partir de P0 y otra desde P1. Punteros a cada bloque: PUNT0, PUNT1. n – indica cantidad de bytes por bloque. Contadores para cada bloque: CONT0, CONT1. NBL – indicador bloque a llenar. Bytes que falta poner en cada bloque. 0 bloque0, 1 bloque1. PEND – Avisa que hay una rutina de interrupción pendiente. Inicialización – Programa Principal. Configurar: PTA2 como IRQ en Reg. Config. IRQ por flanco, habilitada. CLI en CPU – habilita interrupciones en CPU. Cont1=n, Cont0=n (los dos bloques están vacíos). NBL=0 bloque0 a llenar. RDY=1 – está listo para recibir datos. 12/11/2014 Sistemas con Microcont. y Microproc. - UNT 47 Swinging Blocks con E/S por INT P0 P1 n EQU EQU EQU $90 $B0 20 PUNT0 PUNT1 NBL CONT0 CONT1 PEND ORG DS DS DS DS DS DS $0080 2 2 1 1 1 1 ORG MOV BSET CLR CLR MOV CLR MOV MOV MOV MOV MOV BSET MOV CLI $FF00 #0,INTSCR 6,CONFIG2 DDRB PUNT0 #P0,PUNT0+1 PUNT1 #P1,PUNT1+1 #n,CONT0 #n,CONT1 #00, NBL #00, PTA 0,DDRA #01, PTA Init: 12/11/2014 ;P0 y P1 a bloques en Pág. 0. ;indica cantidad de bytes por bloque. ;Punteros a cada bloque ;indicador bloque a llenar. 0 bloque0, 1 bloque1. ;Contadores para cada bloque ;Habilitar los pedidos de IRQ. Modo 0 -Flancos ;Habilitar pin PTA2 como IRQ ;configurar puerto B como entrada. ;apuntar los punteros ;Inicializar los contadores ;NBL=0 bloque0 a llenar. ;READY = 0 ;configurar PTA0 como salida. ;READY = 1 (que Perif. Vea el flanco). Sistemas con Microcont. y Microproc. - UNT 48 Rutina de Interrupción 1. 2. 3. RUTINT: PEND=1. Guardar H. Case NBL 1. 0 – Si CONT0=0 entonces recuperar H y Retornar. (bloque lleno, no procesado todavía – quedó PEND=1). 2. 1 – Si CONT1=0 entonces recuperar H y Retornar. 3. 4. 6. 7. 8. Else HX=PUNT1, CONT=CONT1 Otro – ejecutar rutina de ERROR. Llamar rutina Handshake(CONT, HX) 5. Else HX=PUNT0, CONT=CONT0 Similar a Rutina para un byte por Handshaking por INT Actualizar CONTi y PUNTi. Si CONT=0 entonces NBL=(NBL XOR 1). PEND=0 (rutint terminó adecuadamente). Recuperar H. RTI 12/11/2014 Sistemas con Microcont. y Microproc. - UNT 49 Rutina de Interrupción RUTINT: MOV #1,PEND PSHH BCLR 0,PTA LDA NBL BNE con1 LDA CONT0 BEQ fini LDHX PUNT0 MOV CONT0,CONT JSR HANDSHAKE MOV CONT,CONT0 STHX PUNT0 BRA sigue con1: CMP #1 BNE error LDA CONT1 BEQ fini LDHX PUNT1 MOV CONT1,CONT JSR HANDSHAKE MOV CONT, CONT1 STHX PUNT1 sigue: LDA CONT BNEQ prefini LDA NBL EOR #01 STA NBL prefini: CLR PEND fini: PULH RTI 12/11/2014 ;hay una interrupción pendiente ;pone RDY=0 ;si es bloque1 ir a con1. ;testear si bloque está lleno. ;se puede trabajar en el bloque 0 ;uso el bloque 1 ;si no, error ;maneja RDY por supuesto. ;Si cont=0, cambiar de bloque ;rutint terminó adecuadamente Sistemas con Microcont. y Microproc. - UNT 50 Programa Principal 1. 2. 3. 4. 5. 6. 7. 8. 9. Esperar hasta que CONT0=0 princ0: Procesar Bloque0. CONT0=n princ1: SWI. (si INT no terminó la termina). Esperar hasta que CONT1=0 Procesar Bloque1. CONT1=n SWI. Vaya a 1. 12/11/2014 LDA BNE JSR MOV SWI LDA BNE JSR MOV SWI BRA CONT0 princ0 proc0 #n,CONT0 ;subr p/ proc. block0 ;reiniciar contador CONT1 princ1 proc1 #n,CONT1 ;subr p/proc bloque 1 ;reiniciar contador princ0 Sistemas con Microcont. y Microproc. - UNT 51 ¿Por qué SWI? Hay un dato pendiente de ser tomado. Habría que lanzar de nuevo esa rutina de Interrupción. IRQ no llegará de nuevo porque no hubo cambio en RDY. La única forma de continuar es mediante esta SWI que puede llamar a RTI con BRA. 1. 2. Si Pend=1 branch to Rutint. Si no hay otra causa, RTI. … 12/11/2014 Sistemas con Microcont. y Microproc. - UNT 52 Conclusiones del Ejemplo. Programa Principal muy sencillo. Son dos “hilos” (threads). “Hilo”, secuencia de instrucciones que se ejecuta independientemente (pero comparten datos). Procesos, secuencias de instrucciones totalmente independientes. Uno por delante: procesar (foreground). Rutina Interrupción en Background. Alternan entre sí – concurrentemente. Los “hilos” se intercomunican. Porque emplea servicios del sistema. Servicios totalmente transparentes. Mediante variables PEND, CONT0 y CONT1. Más de esto en Sistemas Operativos. 12/11/2014 Sistemas con Microcont. y Microproc. - UNT 53 Mayor Transparencia: Ideas. Evitar SWI – P. Principal transparente 100%. ¿Cómo evitar SWI? En lugar de PEND=1, RUTINT llama a Start-Timer. Al cabo de un tiempo Timer pide INT. Rutina INT-TIM. Si bloque está vacío BRA RUTINT Else JSR Start-Timer: RTI. Es otro ejemplo de Watchdog. ¿Cuánto tiempo debería esperar Timer? Timer? 12/11/2014 Sistemas con Microcont. y Microproc. - UNT 54 ¿Para qué Swinging Buffers? Los dos hilos pueden trabajar concurrentemente. Sino uno debe quedar esperando hasta que el otro termine. Se ve cómo con dos hilos concurrentes mejoramos la eficiencia del sistema. También con varios procesos e hilos (SO). Razón principal de Multitasking - SO. También vimos varios hilos concurrentes. Fácil de ver con dos. Con tres es más difícil (Timer). Sincronización de hilos y procesos 12/11/2014 Sistemas con Microcont. y Microproc. - UNT – tema SO. 55 Ejemplo Numérico Ingresan 200 bytes a razón de 1000 B/seg, por Interrupciones, 40 ms c/u El programa debe procesar 200 bytes, y requiere 0,2 seg. ¿Cuánto demora con un buffer? a. b. c. d. 12/11/2014 T del dispositivo = 1/1000 = 1 ms/byte Tiempo de la interrupción: 40 ms Conclusión, los datos ingresan a 1KB/seg. 200 bytes demoran 200 ms. Demora: 200 ms para ingreso de datos, 200 ms para procesar, total = 400 ms/bloque. Sistemas con Microcont. y Microproc. - UNT 56 Ejemplo Numérico ¿Cuánto demora con dos buffers? a. b. c. d. e. f. Ingreso de Datos = 200 ms. Tiempo de procesamiento = 200 ms. Si es concurrente, agregar tiempo de interrupciones = 40 ms x 200 = 8000 = 8 ms. Total procesamiento 208 ms. Total Ingreso = 200 ms. Tiempo = el mayor = 208 ms. Mejora performance = 400/208 = 1,92 equivale a 92%. 12/11/2014 Sistemas con Microcont. y Microproc. - UNT 57