Tema 4: Microcontrolador AT90S2313 - Sistema de interrupciones y RESET - Mapa de registros de E/S - Registros del sistema - Puertos B y D - Temporizadores - UART - Perro guardián 1
Sistema de control de interrupciones y RESET Un RESET reinicia la ejecución de instrucciones y sitúa al microcontrolador en un estado inicial conocido. Existen tres causas que activan un RESET Power On Reset ( encendido ) Reset externo ( terminal de Reset ) Watchdog reset ( activado por el perro guardián ) 2
Sistema de control de interrupciones y RESET Estructura de generación de un reset interno 3
Sistema de control de interrupciones y RESET Power On Reset (POR) 4
Sistema de control de interrupciones y RESET Reset externo 5
Sistema de control de interrupciones y RESET Watchdog Reset 6
Sistema de control de interrupciones y RESET Tras un RESET interno, el microcontrolador inicia el proceso de ejecución de instrucciones a partir de la dirección 0 de la memoria de programa. Otras causas (interrupciones) provocan que se inicie la ejecución de instrucciones en posiciones determinadas de la memoria de programa ( vectores de interrupción) 7
Sistema de control de interrupciones y RESET Qué es una interrupción? Evento que requiere la suspensión (interrupción) del programa actual y la ejecución de una rutina concreta (rutina de interrupción), al final de la cual se devuelve el control al programa interrumpido. Qué se necesita para procesar interrupciones? - Pila. Almacena la dirección de la instrucción del programa interrumpido. - Rutina de interrupción instalada debidamente según su vector de interrupción. 8
Sistema de control de interrupciones y RESET La tabla de vectores de interrupción Vector nº Dirección de Origen Definición de interrupción programa 1 $000 RESET Hardware Pin and Watchdog Reset 2 $001 INT0 External interrupt request 0 3 $002 INT1 External interrupt request 1 4 $003 TIMER1, CAPT1 Timer/counter 1 capture event 5 $004 TIMER1, COMP1 Timer/counter 1 compare match 6 $005 TIMER1, OVF1 Timer/counter 1 overflow 7 $006 TIMER0,OVF0 Timer/counter 0 overflow 8 $007 UART,RX UART,rx complete 9 $008 UART,UDRE UART Data register empty 10 $009 UART,TX UART, tx complete 11 $00A ANA_COMP Analog Comparator 9
Sistema de control de interrupciones y RESET Ejemplo de utilización de los vectores de interrupción. $000 rjmp RESET ; Reset Handler $001 rjmp EXT_INT0 ; IRQ0 Handler $002 rjmp EXT_INT1 ; IRQ1 Handler $003 rjmp TIM_CAPT1 ; Timer1 capture Handler $004 rjmp TIM_COMP1 ; Timer1 compare Handler $005 rjmp TIM_OVF1 ; Timer1 overflow Handler $006 rjmp TIM_OVF0 ; Timer0 overflow Handler $007 rjmp UART_RX ; UART RX complete Handler $008 rjmp UART_UDRE ; UART data register empty Handler $009 rjmp UART_7X ; UART TX complete Handler $00A rjmp ANA_COMP ; Analog Comparator Handler 10
Registros de entrada/salida 32 registros 64 registros E/S SRAM 11
Registros de entrada/salida 32 registros 64 registros E/S SRAM 12
Registros del sistema Permiten configurar: - Interrupciones externas. - Modos de bajo consumo. Registros: GIMSK GIFR MCUCR 13
Registros del sistema (GIMSK) Registro General Interrupt Mask. Habilita la generación de interrupciones externas a través de los pines PD2 (INT0) y PD3(INT1), si los bits INT0 e INT1 están a 1. Quedan inhabilitadas para 0. Las interrupciones externas pueden ser activadas por nivel o por flanco (MCUCR). 14
Registros del sistema (GIFR) Registro General Interrupt Flag. Un evento en el pin PD2 (INT0), pone a 1 INTF0. Si los bits INT0 de GIMSK e I de SREG están a 1, la CPU salta a ejecutar la instrucción situada en la dirección $001. Un evento en el pin PD3 (INT1), pone a 1 INTF1. Si los bits INT1 de GIMSK e I de SREG están a 1, la CPU salta a ejecutar la instrucción situada en la dirección $002. Los flags INTFi se ponen a cero automáticamente cuando se ejecuta la rutina de interrupción o alternativamente se ponen!. a 0, escribiendo un 1!. 1 15
Registros del sistema (MCUCR) MCU control register. SE: (1) Habilita la posibilidad de pasar a modo dormido mediante la instrucción SLEEP. (0) Inhabilita la posibilidad. En modo dormido, se para la ejecución de instrucciones. Bajo consumo de energía. El microcontrolador se despierta cuando ocurre una interrupción. Entonces ejecuta la interrupción y contínua la ejecución a continuación de la instrucción 16 SLEEP
Registros del sistema (MCUCR)(cont.) MCU control register. SM: Selecciona entre dos modos de dormir (1)Power Down Oscilador externo parado Funcionan: watchdog, interrupciones externas y reset (0)Idle Mode Funcionan: temporizadores, watchdog e interrupciones 17
Registros del sistema (MCUCR)(cont.) MCU control register. ISC11,ISC10: Configuran el modo de interrupción de la entrada externa INT1 18
Registros del sistema (MCUCR)(cont.) MCU control register. ISC01,ISC00: Configuran el modo de interrupción de la entrada externa INT0 19
Puertos Permiten configurar los pines del microcontrolador y establecer (o leer) los valores de tensión asociados a cada uno de los pines Existen dos puertos: - Puerto B de 8 bits - Puerto D de 7 bits. 20
Puerto B Puerto E/S bidireccional de 8 bits. Cada pin es configurado individualmente. Hay tres registros asociados al puerto B PORTB: (R/W) DDRB: (R/W) PINB: (R) Los pines del puerto disponen de resistencias de pull-up que pueden activarse o no. Alternativamente, los pines del puerto pueden tener otras funciones activas o no. 21
Puerto B(cont.) Funciones alternativas a los pines del puerto B 22
Puerto B(cont.) Registro DDRB (R/W) El bit K de este registro define si el pin K será usado como entrada (0) o salida (1). PINB (R) Permite la lectura de los valores lógicos de los pines. 23
Puerto B(cont.) Registro PORTB (R/W) Si el pin K está configurado como salida, el valor lógico del bit K de este registro, se muestra en pin correspondiente. Si el pin K está configurado como entrada, entonces el bit K de este registro activa la resistencia de pull-up(1), o no, (0). Lecturas de este registro no reflejan el estado de los pines! 24
Puerto D Puerto E/S bidireccional de 7 bits. Cada pin es configurado individualmente. Hay tres registros asociados al puerto D PORTD: (R/W) DDRD: (R/W) PIND: (R) Los pines del puerto disponen de resistencias de pull-up que pueden activarse o no. Alternativamente, los pines del puerto pueden tener otras funciones activas o no. 25
Puerto D(cont.) Funciones alternativas a los pines del puerto D 26
Puerto D(cont.) Registro DDRD (R/W) El bit K de este registro define si el pin K será usado como entrada (0) o salida (1). PIND (R) Permite la lectura de los valores lógicos de los pines. 27
Puerto D(cont.) Registro PORTD (R/W) Si el pin K está configurado como salida, el valor lógico del bit K de este registro, se muestra en pin correspondiente. Si el pin K está configurado como entrada, entonces el bit K de este registro activa la resistencia de pull-up(1), o no, (0). Lecturas de este registro no reflejan el estado de los pines! 28
Temporizadores/Contadores Son contadores que se incrementan periódicamente (modo temporizador) o cada vez que se genera un evento (modo contador) Existen dos temp/cont: - T0 de 8 bits - T1 de 16 bits (con funciones añadidas) Ambos temporizadores pueden generar interrupciones. 29
Temporizadores/Contadores El temporizador 0 y 1 disponen de un prescaler de 10 bits que permite configurar la fuente de reloj hacia cada temporizador. 30
Temporizadores/Contadores (TIMSK) Timer/Counter Interrupt Mask register. TOEI0: (1) Habilita interrupción por overflow del timer 0. (0) Inhabilita. TOEI1: Igual que TOIEO pero para el timer 1. OCIE1A: (1) Habilita interrupción de comparación del timer1. (0) Inhabilita. TICIE1: (1) Habilita interrupción por captura ICP. (0) Inhabilita. 31
Temporizadores/Contadores (TIFR) Timer/Counter Interrupt Flag register. TOV0: Se pone a 1 si ocurre overflow en timer 0. Si los bits TOIE0 de TIMSK e I de SREG están a 1, la CPU salta a ejecutar la instrucción situada en la dirección $006. TOV1: Se pone a 1 si ocurre overflow en timer 1. Si los bits TOIE1 de TIMSK e I de SREG están a 1, la CPU salta a ejecutar la instrucción situada en la dirección $005. Los flags TOV0 y TOV1 se ponen a cero automáticamente cuando se ejecuta la rutina de interrupción correspondiente, o se ponen a cero manualmente ESCRIBIENDO un 1! 32
Temporizadores/Contadores (TIFR) (cont.) Timer/Counter Interrupt Flag register (cont.). OCF1A: Se pone a 1 los contenidos del timer 1 y el registro de comparación, coinciden. Si los bits OCIE1A de TIMSK e I de SREG están a 1, la CPU salta a ejecutar la instrucción situada en la dirección $004. ICF1: Se pone a 1 si el contenido del timer1 se ha transferido al registro ICR. Si los bits TICIE de TIMSK e I de SREG están a 1, la CPU salta a ejecutar la instrucción situada en la dirección $003. Los flags TOV0 y TOV1 se ponen a cero automáticamente cuando se ejecuta la rutina de interrupción correspondiente, o se ponen a cero manualmente ESCRIBIENDO un 1! 33
Temporizador 0 Dispone de un contador de 8 bits (TCNT0) Un registro de control TCCR0 que configura la señal de reloj que llega al TCNT0 Registros de habilitación y flags (TIFR,TIMSK) 34
Temporizador 0 Registro TCCR0. Los bits CS0x definen la entrada de reloj del contador 35
Temporizador 0 Registro TCNT0 Contador ascendente. Overflow cuando pasa de 0xFF a 0x00 El contador se carga en el ciclo posterior a su escritura 36
Temporizador 1 Dispone de un contador de 16 bits (TCNT1H, TCNT1L) Un registro de captura de 16 bits (ICR1H,ICR1L) Un registro de comparación de salida (OCR1AH, OCR1AL) Controla el comportamiento de la salida OC1 (PB3) ante determinados eventos. Generación PWM. Posibilidad de generación de tres interrupciones (TIMSK, TIFR) 37
Temporizador 1 38
Temporizador 1 TCNT1H y TCNTL Se incrementa en cada ciclo programado de prescaler. La lectura y escritura simultánea de los 16 bits se realiza a través del registro oculto TEMP (8 bits). Escritura: 1º en TCNT1H (->TEMP) y 2º en TCNTIL. Lectura: 1º de TCNT1L (TCNT1H->TEMP) y 2º en 39 TCNT1H
Temporizador 1 OCR1AH y OCR1AL Su contenido se compara continuamente con TCNT1. En coincidencia, el flag OCF1A del TIFR se activa y se actúa según se programó en los registros de control. Si los bits OCIE1A de TIMS e I de SREG están a 1, se genera la interrupción de vector $4. Se escribe 1º en OCR1AH seguido de OCR1AL y se lee, primero de OCR1AL y después OCR1AH. 40
Temporizador 1 ICR1H y ICR1L Registro de 16 bits de sólo lectura que se carga con el contenido de TCNT1 cuando se detecta un flanco en la entrada ICP (PD6). A la vez que la transferencia, se activa el flag ICF1 del TIFR, y si los bits OCIE1A de TIMS e I de SREG están a 1, se genera la interrupción de vector $3. Se escribe 1º en OCR1AH seguido de OCR1AL y se lee, primero de OCR1AL y después OCR1AH. 41
Temporizador 1 TCCR1B CS12,CS11,CS10: Selecciona la temporización del timer1. º 42
Temporizador 1 TCCR1B(cont.) CTC1: Si es 1, TCNT1 se pone a 0 un ciclo de reloj de CPU después de la coincidencia en comparación. Si es 0, prosigue su cuenta. ICES1: Escoge el tipo de flanco, que en la entrada ICP, genera la captura. (1) subida, (0) bajada. ICNC1: Cancela ruido sobre el terminal ICP. (1) Activo (0) Inactivo. Muestrea la entrada ICP durante cuatro ciclos consecutivos. Se consideran valores válidos de ICP aquellos que mantienen su constancia durante los cuatro ciclos. 43
Temporizador 1 TCCR1A COM1A1,COM1A0: Determinan la acción sobre la salida OC1 (PB3) en coincidencia en comparación. Tienen función diferente si PWM está activo. 44
Temporizador 1 TCCR1A(cont.) PWM11,PWM10: Seleccionan el modo de modulación por anchura de pulsos que actúa sobre la salida OC1. En este modo, TCNT1 actúa como un contador reversible, desde $0 hasta TOP y de TOP a $0. 45
Temporizador 1 TCCR1A(cont.) Cuando el contenido de TCNT1 coincide con los 8,9 o 10 LSB s de OCR1A, el pin OC1 se activa o borra dependiendo de COM1A1, COM1A0. En modo PWM, cualquier cambio en OCR1A no se produce hasta que TCNT1 alcanza TOP. Esto previene glitches. 46
UART (Comunicaciones serie asíncronas) La comunicación serie utiliza un único hilo (+ tierra) por el que los bits se transmiten uno detrás de otro. La unidad mínima de transferencia se denomina SDU (unidad de datos serie). Una SDU contiene: un bit de start (cero lógico), entre uno y dos bits de stop (1 lógico), entre 5 y 8 bits de datos y un bit de paridad (opcional) para detección de errores. Start Datos Paridad Stop 47
UART (Comunicaciones serie asíncronas) Un transmisor asíncrono en reposo muestra por su pin TX un 1. Un receptor asíncrono muestrea su pin RX continuamente. Si detecta una transición de 1 a 0 (inicio de un bit de start), se procede a recibir un carácter. SDU2 UDR TX TX RX SDU1 RX Inicia la recepción SDU2 reposo SDU1 reposo TX tiempo 48
UART (Comunicaciones serie asíncronas) UART (Transmisor Receptor Asíncrono Universal): -Transmisor - Receptor - Generador de baudios - Lógica de control e interrupciones Generador de baudios Transmisor TX Lógica de control e interrupciones UART Receptor RX 49
UART (Comunicaciones serie asíncronas) UART en el AT90S2313 - SDU: 8bits de datos + 1 bit (opcional) - Diferentes velocidades de transferencia y recepción. - No es posible configurar el transmisor y el receptor con parámetros diferentes. - Transmisor y receptor individualmente activos o inactivos. - Detección de errores en recepción. - Posibilidad de generación de interrupciones. - Registros: UDR, USR, UCR y UBRR. 50
UART (Comunicaciones serie asíncronas) UART en el AT90S2313 (Transmisor) Bus de datos UDR SDU TxSHR TxD 7 6 5 4 3 2 1 0 RX TX UDRE FE OR USR 51
UART (Comunicaciones serie asíncronas) UART en el AT90S2313 (Transmisor) 0: Estado inicial: UDRE=1 y TX=1 1: Escritura de un dato en UDR 2: El paso 1 pone a 0 UDRE 3: Se forma la SDU y se traspasa al registro TxSHR. Entonces UDRE=1 y TX=0 4: La transmisión de la SDU pone a uno el bit TX Escritura SDU 1 UDR 3 TxSHR 2 4 7 6 5 4 3 2 1 0 RX TxD TX UDRE FE DATO OR USR 52
UART (Comunicaciones serie asíncronas) UART en el AT90S2313 (Receptor) Bus de datos UDR Dato RxSHR RxD 7 6 5 4 3 2 1 0 RX TX UDRE FE OR USR 53
UART (Comunicaciones serie asíncronas) UART en el AT90S2313 (Receptor) 0: Estado inicial: RX=0 1: Se recibe una SDU 2: Se manda al UDR los bits de datos de la SDU y se actualizan los bits FE y OR. 3: Se activa el bit RX del USR 4: Se produce la lectura del registro UDR 5: Se borra el bit RX Lectura 2 UDR 4 Dato Data RxSHR RH R 3 5 RxD 7 6 5 4 3 2 1 0 RX TX UDRE FE OR USR 1 DATO 1 54
UART (Comunicaciones serie asíncronas) UART en el AT90S2313 (Receptor) - Error de trama (FE) Se activa cuando la SDU entrante tiene un 0 como bit de stop Se borra cuando se reciba una SDU con el bit de stop correcto. - Error de overrun (OR) Se activa cuando la SDU del registro de desplazamiento es sobrescrita por otra SDU. Se borra cuando la SDU se transfiere al registro UDR. 55
UART (Comunicaciones serie asíncronas) UART en el AT90S2313 (Generador de Baudios) Configura la velocidad de transmisión y recepción Registro UBRR 56
UART (Comunicaciones serie asíncronas) UART en el AT90S2313 (Configuración) Se realiza en el registro UCR - Habilitación de interrupciones si están a 1: RXCIE: Dato nuevo en registro buffer de RX. TXCIE: Registro desplazamiento TX vacío. UDRIE: Registro buffer de TX vacío. UCR 7 6 5 4 3 2 1 0 RXCIE & TXCIE UDRIE RXEN TXEN CHR9 RXB8 TXB8 & & Interrupción USR 7 6 5 4 3 2 1 0 RX TX UDRE FE OR 57
UART (Comunicaciones serie asíncronas) UART en el AT90S2313 (Configuración) (cont.) - Habilitación/Inhabilitación del transmisor (TxEN) y el receptor (RxEN) UCR 7 6 5 4 3 2 1 0 RXCIE TXCIE UDRIE RXEN TXEN CHR9 RXB8 TXB8 - RxEN a 1 habilita el receptor y pone el pin PD0(RXD) como entrada (independientemente del valor del bit DDRD0). Un 0 inhabilita el receptor. - TxEN a 1 habilita el transmisor y pone el pin PD1 (TXD) como salida, con independencia de DDRD1. Un 0 inhabilita el transmisor. 58
UART (Comunicaciones serie asíncronas) UART en el AT90S2313 (Configuración) (cont.) - Habilitación/Inhabilitación del noveno bit en transmisión y recepción. CHR9 = 1, habilita, CHR9 = 0, inhabilita. UCR 7 6 5 4 3 2 1 0 RXCIE TXCIE UDRIE RXEN TXEN CHR9 RXB8 TXB8 - En transmisión la SDU contiene los 8 bits depositado en el UDR más el bit TXB8 del UCR. - En recepción, los 8 bits lsb's de la SDU se mandan al registro UDR mientras que el noveno bit se escribe en el bit RXB8 del UCR. 59
UART (Comunicaciones serie asíncronas) UART en el AT90S2313 (Resumen de registros) 60
Perro guardían (Watchdog)( Vigila el funcionamiento del programa. Dispone de un oscilador propio a 1Mhz con un prescaler programable que permite el ajuste del intervalo de vigilancia entre 16 y 2048ms El watchdog genera un RESET interno, transcurrido el tiempo de vigilancia. La instrucción WDR redispara el tiempo de vigilancia. Dispone de un registro de control, WDTCR que activa o desactiva el perro guardián y establece el intervalo de vigilancia 61
Perro guardían (Watchdog) WDTCR WDE,WDTOE habilitan o inhabilitan el perro guardián. WDP2-0, seleccionan el intervalo de vigilancia. 62
Perro guardían (Watchdog)( Habilitación del perro guardián WDE = 1 Inhabilitación del perro guardián Escribir, a la vez, un 1 en WDTOE y WDE En los siguientes cuatro ciclos de reloj, escribir un 0 en WDE. Transcurridos cuatro ciclos de reloj de que WDTOE se puso a 1, el hardware lo pone a 0. 63