La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Manejo de periféricos Diplomatura en Sistemas Embebidos Dr. Ing. Agustin M. Laprovitta

Presentaciones similares


Presentación del tema: "Manejo de periféricos Diplomatura en Sistemas Embebidos Dr. Ing. Agustin M. Laprovitta"— Transcripción de la presentación:

1 Manejo de periféricos Diplomatura en Sistemas Embebidos Dr. Ing. Agustin M. Laprovitta (alapro@uccor.edu.ar)

2 Técnicas de operación de E/S  E/S Programada (Polling)  Interrupción (Interrupt-driven)  DMA (Direct Memory Access) Fuente: W. Stallings, Organización y Arquitectura de Computadores, 5° Ed., Prentice Hall, Madrid, 2000

3 Orden de LECTURA E/S Leer STATUS E/S Estado ? Leer DATO E/S Escribir DATO en memoria Final? CPU -> E/S E/S -> CPU CPU -> Mem Error Listo No Listo Si No E/S Programada  El manejo se realiza mediante el uso de instrucciones de E/S por código de programa  Principal desventaja: se desperdician muchos ciclos de instrucción en revisar el estado del módulo E/S (polling) Fuente: W. Stallings, Organización y Arquitectura de Computadores, 5° Ed., Prentice Hall, Madrid, 2000

4 Orden de LECTURA E/S Leer STATUS E/S Estado ? Leer DATO E/S Escribir DATO en memoria Final? CPU -> E/S E/S -> CPU CPU -> Mem Error Listo Si No Interrupción Continúa programa Interrupción  Es un recurso de HW propio de la CPU: señal de Int externa para periféricos  Es literalmente una “interrupción” o quiebre de la ejecución normal del código de programa Fuente: W. Stallings, Organización y Arquitectura de Computadores, 5° Ed., Prentice Hall, Madrid, 2000

5 Interrupción (cont.)  Al finalizar cada ciclo de instrucción el CPU verifica automáticamente si hay Int pendientes.  De esta forma el “polling” lo realiza la CPU por HW: no consume ciclos de instrucción!!  Si hay Int, el CPU salta automáticamente a una posición de memoria especifica llamada vector de interrupciones.  El vector de interrupciones contiene el código (o su referencia) con los procedimientos necesarios para dar servicio a dicha interrupción. Este código se denomina ISR (Interrupt Service Routine)

6 Donde se aloja la ISR? (interrupt address vector) ◦Dirección fija (Fixed interrupt) ◦La dirección esta establecida en la lógica de la CPU, no puede ser modificada ◦La CPU puede contener la dirección real, o contener una instrucción de salto a la dirección real de la ISR si no hay suficiente espacio reservado para el vector. ◦En programas de alto nivel (C/C++) esto es manejado por el compilador ◦Dirección vectorizada (Vectored interrupt) ◦El periférico provee la dirección al CPU por medio del bus de datos ◦Para esto, se agrega una señal mas: INT ACK ◦Muy utilizado en sistemas con múltiples periféricos conectados por un bus ◦Solución de compromiso: ◦Tabla de direcciones (interrupt address table)

7 μP P1P2 System bus Int Data memory 0x80000x8001 16:MOV R0, 0x8000 17:# modifies R0 18:MOV 0x8001, R0 19: RETI # ISR return ISR 100: 101: instruction... Main program... Program memory PC 1(a): μP esta ejecutando el programa principal 1(b): P1 recibe un dato de entrada en el registro con dirección 0x8000. Time Procesamiento de una interrupción de E/S usando dirección fija Fuente: F. Vahid, T. Givargis, Embedded System Desig: A Unified Hardware/Software Introduction, John Wiley & Son., New York, 2002

8 μP P1P2 System bus Data memory 0x80000x8001 16:MOV R0, 0x8000 17:# modifies R0 18:MOV 0x8001, R0 19: RETI # ISR return ISR 100: 101: instruction... Main program... Program memory PC Int 1 Procesamiento de una interrupción de E/S usando dirección fija 1(a): μP esta ejecutando el programa principal 1(b): P1 recibe un dato de entrada en el registro con dirección 0x8000. 2: P1 setea Int para solicitar el servicio del μP. Time Fuente: F. Vahid, T. Givargis, Embedded System Desig: A Unified Hardware/Software Introduction, John Wiley & Son., New York, 2002

9 μP P1P2 System bus Data memory 0x80000x8001 16:MOV R0, 0x8000 17:# modifies R0 18:MOV 0x8001, R0 19: RETI # ISR return ISR 100: 101: instruction... Main program... Program memory PC Int 100 1(a): μP esta ejecutando el programa principal 1(b): P1 recibe un dato de entrada en el registro con dirección 0x8000. 2: P1 setea Int para solicitar el servicio del μP. 3: Despues de completar la instrucción en 100, el μP releva Int, guarda el valor del PC’s, y escribe PC con la ubicación del ISR (en 16). Time Procesamiento de una interrupción de E/S usando dirección fija Fuente: F. Vahid, T. Givargis, Embedded System Desig: A Unified Hardware/Software Introduction, John Wiley & Son., New York, 2002

10 μP P1P2 System bus Data memory 0x80000x8001 16:MOV R0, 0x8000 17:# modifies R0 18:MOV 0x8001, R0 19: RETI # ISR return ISR 100: 101: instruction... Main program... Program memory PC Int 100 Int 0 P1 System bus P1 0x8000 P2 0x8001 1(a): μP esta ejecutando el programa principal 1(b): P1 recibe un dato de entrada en el registro con dirección 0x8000. 2: P1 setea Int para solicitar el servicio del μP. 3: Despues de completar la instrucción en 100, el μP releva Int, guarda el valor del PC’s, y escribe PC con la ubicación del ISR (en 16). 4(a): La ISR lee el dato desde 0x8000, lo modifica, y escribe el resultado en 0x8001. 4(b): Luego de ser leído, P1 resetea Int. Time Procesamiento de una interrupción de E/S usando dirección fija Fuente: F. Vahid, T. Givargis, Embedded System Desig: A Unified Hardware/Software Introduction, John Wiley & Son., New York, 2002

11 μP P1P2 System bus Data memory 0x80000x8001 16:MOV R0, 0x8000 17:# modifies R0 18:MOV 0x8001, R0 19: RETI # ISR return ISR 100: 101: instruction... Main program... Program memory PC Int 100 +1 16:MOV R0, 0x8000 17:# modifies R0 18:MOV 0x8001, R0 19: RETI # ISR return ISR 100: 101: instruction... Main program... 100 Procesamiento de una interrupción de E/S usando dirección fija 1(a): μP esta ejecutando el programa principal 1(b): P1 recibe un dato de entrada en el registro con dirección 0x8000. 2: P1 setea Int para solicitar el servicio del μP. 3: Despues de completar la instrucción en 100, el μP detecta Int, guarda el valor del PC’s, y escribe PC con la ubicación del ISR (en 16). 4(a): La ISR lee el dato desde 0x8000, lo modifica, y escribe el resultado en 0x8001. 5: La ISR retorna, para esto reestablece el PC en 100+1=101, donde el μP resume la ejecución del programa principal. 4(b): Luego de ser leído, P1 resetea Int. Time

12 μP P1P2 System bus Data memory 0x8000 0x8001 16:MOV R0, 0x8000 17:# modifies R0 18:MOV 0x8001, R0 19: RETI # ISR return ISR 100: 101: instruction... Main program... Program memory PC Int Inta 16 Procesamiento de una interrupción de E/S usando dirección vectorizada 1(a): El μP esta ejecutando el programa principal1(b): P1 recibe un dato de entrada en el registro de dirección 0x8000. Time Fuente: F. Vahid, T. Givargis, Embedded System Desig: A Unified Hardware/Software Introduction, John Wiley & Son., New York, 2002

13 μP P1P2 System bus Data memory 0x8000 0x8001 16:MOV R0, 0x8000 17:# modifies R0 18:MOV 0x8001, R0 19: RETI # ISR return ISR 100: 101: instruction... Main program... Program memory PC Inta 16 Int 1 Procesamiento de una interrupción de E/S usando dirección vectorizada 1(a): El μP esta ejecutando el programa principal1(b): P1 recibe un dato de entrada en el registro de dirección 0x8000. 2: P1 setea Int para requerir el servicio del μP. Time Fuente: F. Vahid, T. Givargis, Embedded System Desig: A Unified Hardware/Software Introduction, John Wiley & Son., New York, 2002

14 μP P1P2 System bus Data memory 0x8000 0x8001 16:MOV R0, 0x8000 17:# modifies R0 18:MOV 0x8001, R0 19: RETI # ISR return ISR 100: 101: instruction... Main program... Program memory PC Int Inta 16 100 1 Inta Procesamiento de una interrupción de E/S usando dirección vectorizada 1(a): El μP esta ejecutando el programa principal1(b): P1 recibe un dato de entrada en el registro de dirección 0x8000. 2: P1 setea Int para requerir el servicio del μP. 3: Después de completar la instrucción en 100, el μP detecta Int, guarda el valor del PC’s, y setea la señal Inta. Time Fuente: F. Vahid, T. Givargis, Embedded System Desig: A Unified Hardware/Software Introduction, John Wiley & Son., New York, 2002

15 μP P1P2 System bus Data memory 0x8000 0x8001 16:MOV R0, 0x8000 17:# modifies R0 18:MOV 0x8001, R0 19: RETI # ISR return ISR 100: 101: instruction... Main program... Program memory PC Int Inta 16 100 16 System bus Procesamiento de una interrupción de E/S usando dirección vectorizada 1(a): El μP esta ejecutando el programa principal1(b): P1 recibe un dato de entrada en el registro de dirección 0x8000. 2: P1 setea Int para requerir el servicio del μP. 3: Después de completar la instrucción en 100, el μP detecta Int, guarda el valor del PC’s, y setea la señal Inta. Time 4: P1 detecta Inta y coloca la dirección del vector de interrupción 16 en el bus de datos. Fuente: F. Vahid, T. Givargis, Embedded System Desig: A Unified Hardware/Software Introduction, John Wiley & Son., New York, 2002

16 μP P1P2 System bus Data memory 0x8000 0x8001 16:MOV R0, 0x8000 17:# modifies R0 18:MOV 0x8001, R0 19: RETI # ISR return ISR 100: 101: instruction... Main program... Program memory PC Int Inta 16 100 16:MOV R0, 0x8000 17:# modifies R0 18:MOV 0x8001, R0 19: RETI # ISR return ISR 100: 101: instruction... Main program... P1P2 0x8000 0x8001 System bus 0 Int Procesamiento de una interrupción de E/S usando dirección vectorizada 1(a): El μP esta ejecutando el programa principal1(b): P1 recibe un dato de entrada en el registro de dirección 0x8000. 2: P1 setea Int para requerir el servicio del μP. 3: Después de completar la instrucción en 100, el μP detecta Int, guarda el valor del PC’s, y setea la señal Inta. 5(a): El μP salta a la dirección del bus (16). La ISR lee el dato del registro 0x8000, lo modifica, y escribe el resultado en la dirección 0x8001. 5(b): Luego de ser leído, P1 resetea Int. Time 4: P1 detecta Inta y coloca la dirección del vector de interrupción 16 en el bus de datos. Fuente: F. Vahid, T. Givargis, Embedded System Desig: A Unified Hardware/Software Introduction, John Wiley & Son., New York, 2002

17 17 μP P1P2 System bus Data memory 0x80000x8001 16:MOV R0, 0x8000 17:# modifies R0 18:MOV 0x8001, R0 19: RETI # ISR return ISR 100: 101: instruction... Main program... Program memory PC Int 100 +1 16:MOV R0, 0x8000 17:# modifies R0 18:MOV 0x8001, R0 19: RETI # ISR return ISR 100: 101: instruction... Main program... 100 Procesamiento de una interrupción de E/S usando dirección vectorizada 1(a): El μP esta ejecutando el programa principal1(b): P1 recibe un dato de entrada en el registro de dirección 0x8000. 2: P1 setea Int para requerir el servicio del μP. 3: Después de completar la instrucción en 100, el μP detecta Int, guarda el valor del PC’s, y setea la señal Inta. 5(a): El μP salta a la dirección del bus (16). La ISR lee el dato del registro 0x8000, lo modifica, y escribe el resultado en la dirección 0x8001. 6: La ISR retorna, para esto reestablece el PC en 100+1=101, donde el μP resume la ejecusion del programa principal. 5(b): Luego de ser leído, P1 resetea Int. Time 4: P1 detecta Inta y coloca la dirección del vector de interrupción 16 en el bus de datos. Fuente: F. Vahid, T. Givargis, Embedded System Desig: A Unified Hardware/Software Introduction, John Wiley & Son., New York, 2002

18 Tabla de dirección de interrupciones Solución de compromiso entre la interrupción fija y vectorizada ◦Un solo par de señales IntReq / IntAck son necesarias ◦Se dispone en memoria de una tabla conteniendo las direcciones de las ISR (típicamente 256 vectores) ◦Los periféricos ya no proveen la dirección de la ISR, sino un índice de la tabla. ◦Ventajas: ◦Menos bits son enviados desde el periférico (usualmente data bus < address bus) ◦Se puede mover la posición de las IRS sin cambiar datos de configuración en el periférico.

19 Interrupciones Enmascarables vs. no-enmascarables ◦Enmascarables: El programador puede modificar un bit que causa que el procesador ignore una solicitud de interrupción (GEI) ◦Muy importante para usar cuando se tienen porciones de códigos temporalmente criticas. ◦No-enmascarable: una señal separada que no puede ser ignorada (internas a la CPU) ◦Típicamente reservada para situaciones drásticas, como la ocurrencia de un fallo de alimentación, un acceso indebido a memoria flash o la detección de un código de operación invalido. ◦Estas ISR se las suele conocer con el nombre de “Traps” Salto a una ISR ◦Algunos procesadores tratan el salto de una INT como una llamada a cualquier otra rutina ◦Salvan el entorno completo (PC, status, registers) – toma muchos ciclos ◦Otros salvan parcialmente su entorno (solo PC y status) ◦El programador debe asegurarse que el ISR no altere los registros o debe salvarlos previamente ◦Es necesario instrucciones de retornos diferentes en su set de instrucciones (RET – RETI) Consideraciones adicionales

20 Considere la situación donde muchos periféricos solicitan el servicio de una CPU simultáneamente (microcontrolador) – Cual será atendida primero y en que orden? o Software polling o Muy simple implementación por HW (una sola línea de INT) o El programador debe determinar en la ISR el origen de la INT buscando banderas INT FLG o La prioridad es establecida en la ISR según el orden de la búsqueda o Arbitro de prioridades (Priority arbiter) o Conexión en cadena (Daisy chain) o Arbitraje de bus (Network-oriented) o Utilizado en arquitecturas de múltiples procesadores o El periférico debe primero obtener la sesión del bus para luego requerir una interrupción Múltiples periféricos: Arbitraje

21 Micro- processor Priority arbiter Peripheral1 System bus Int 3 5 7 Inta Peripheral2 Ireq1 Iack2 Iack1 Ireq2 22 6 Arbitraje: Arbitro de prioridades o También conocido como controlador de interrupciones o Muy usado en arquitecturas de una CPU de propósito general o El periféricos hace la petición INT REQ al controlador, y este a la CPU. En orden inverso para los INT ACK o Esquema de direccionamiento vectorizado o Múltiples esquemas de prioridad: o Fija o Round-robin o FIFO o Conexión al bus del sistema solo con fines de configuración 1. CPU ejecuta su programa principal 2. P1 solicita servicio seteando Ireq1. P2 también solicita servicio mediante Ireq2. 3. Como el controlador detecta al menos una Ireq, entonces setea Int. 4. La CPU para la ejecución del programa y guarda el contexto. 5. La CPU setea Inta. 6. El controlador setea Iack1 para responder a P1. 7. P1 pone la dirección del vector en el bus de datos 8. La CPU salta a la dirección del ISR leída del bus, la ISR se ejecuta y retorna. 9. La CPU resume la ejecución del programa principal Fuente: F. Vahid, T. Givargis, Embedded System Desig: A Unified Hardware/Software Introduction, John Wiley & Son., New York, 2002

22 La lógica de control de arbitraje esta embebida en cada periférico ◦Se agrega una señal de entrada IntReq y de salida IntAck Los periféricos están dispuestos en el sistema en forma de cadena ◦Un solo periférico se conecta al CPU (el de mayor prioridad), los otros “aguas arriba” ◦Los periféricos difunden la señal IntReq hacia el CPU y la señal IntAck hacia el origen de la interrupción PP System bus Int Inta Peripheral1 Ack_inAck_out Req_outReq_in Peripheral2 Ack_inAck_out Req_outReq_in 0 Arbitraje: Conexión en cadena Pros vs. contras: ◦Ideal si es necesario agregar o sacar periféricos ◦Bajo rendimiento con muchos periféricos ◦Es necesario agregar lógica por seguridad (periférico fuera de servicio) ◦Esquema de prioridad único Fuente: F. Vahid, T. Givargis, Embedded System Desig: A Unified Hardware/Software Introduction, John Wiley & Son., New York, 2002

23 Jump Table Memory Bus Processor Peripheral 1 Peripheral 2 Priority Arbiter MASK IDX0 IDX1 ENABLE DATA MEMORY void main() { InitializePeripherals(); for(;;) {} // main program goes here } unsigned char ARBITER_MASK_REG _at_ 0xfff0; unsigned char ARBITER_CH0_INDEX_REG _at_ 0xfff1; unsigned char ARBITER_CH1_INDEX_REG _at_ 0xfff2; unsigned char ARBITER_ENABLE_REG _at_ 0xfff3; unsigned char PERIPHERAL1_DATA_REG _at_ 0xffe0; unsigned char PERIPHERAL2_DATA_REG _at_ 0xffe1; unsigned void* INTERRUPT_LOOKUP_TABLE[256] _at_ 0x0100; void Peripheral1_ISR(void) { unsigned char data; data = PERIPHERAL1_DATA_REG; // do something with the data } void Peripheral2_ISR(void) { unsigned char data; data = PERIPHERAL2_DATA_REG; // do something with the data } void InitializePeripherals(void) { ARBITER_MASK_REG = 0x03;// enable both channels ARBITER_CH0_INDEX_REG = 13; ARBITER_CH1_INDEX_REG = 17; INTERRUPT_LOOKUP_TABLE[13] = (void*)Peripheral1_ISR; INTERRUPT_LOOKUP_TABLE[17] = (void*)Peripheral2_ISR; ARBITER_ENABLE_REG = 1; } Ejemplo: Manejo de un esquema vectorizado mediante tabla de dirección. Fuente: F. Vahid, T. Givargis, Embedded System Desig: A Unified Hardware/Software Introduction, John Wiley & Son., New York, 2002

24 Caso de estudio #1: Familia Microchip PIC16x Esquema de vector único Cada periférico posee un habilitador (IE) y una flag (IF) Esquema software polling La prioridad la define el programador en la ISR Habilitador general de int (GIE) Esquema simple de rendimiento moderado

25 Caso de estudio #2: Familia MSP430x2xx Esquema en cadena vectorizado Cada periférico posee un habilitador (IE) y una flag (IF) Vectores con servicios compartidos Esquema de prioridad fija Interrupciones enmascarables (periféricos) y no-enmascarables (sistema) Habilitador general de int (GIE) El guardado del entorno y el retorno de una interrupción (RETI) toman 5 ciclos de reloj cada uno.

26 Caso #3: Familia STM32F4x (ARM Cortex M4) Controlador vectorizado de interrupciones anidadas (NVIC, Nested vectored interrupt controller) Hasta 81 entradas de INT de periféricos (IRQs) ANIDADAS!!! Una IRQ puede interrumpir a otra de menor prioridad. Nivel de prioridad programable 0-15 para cada IRQ. Los niveles altos corresponden a prioridades bajas. Detección por nivel o flanco de las señales de INT Reprogramación de las prioridades en forma dinámica A cada periférico se le asigna un nivel de prioridad y sub-prioridad Interrupción externa No-enmascarable (NMI)


Descargar ppt "Manejo de periféricos Diplomatura en Sistemas Embebidos Dr. Ing. Agustin M. Laprovitta"

Presentaciones similares


Anuncios Google