You are on page 1of 63

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
Microcontrolador AT90S2313
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
Microcontrolador AT90S2313
Sistema de control de interrupciones y RESET

• Estructura de generación de un reset interno

3
Microcontrolador AT90S2313
Sistema de control de interrupciones y RESET

• Power On Reset (POR)

4
Microcontrolador AT90S2313
Sistema de control de interrupciones y RESET

• Reset externo

5
Microcontrolador AT90S2313
Sistema de control de interrupciones y RESET

• Watchdog Reset

6
Microcontrolador AT90S2313
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
Microcontrolador AT90S2313
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
Microcontrolador AT90S2313
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
Microcontrolador AT90S2313
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
Microcontrolador AT90S2313
Registros de entrada/salida

32 registros

64 registros E/S

SRAM

11
Microcontrolador AT90S2313
Registros de entrada/salida

32 registros

64 registros E/S

SRAM

12
Microcontrolador AT90S2313
Registros del sistema

• Permiten configurar:
– - Interrupciones externas.
– - Modos de bajo consumo.

• Registros:
– GIMSK
– GIFR
– MCUCR

13
Microcontrolador AT90S2313
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
Microcontrolador AT90S2313
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!.

15
Microcontrolador AT90S2313
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
Microcontrolador AT90S2313
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
Microcontrolador AT90S2313
Registros del sistema (MCUCR)(cont.)

• MCU control register.

– ISC11,ISC10: Configuran el modo de interrupción


de la entrada externa INT1

18
Microcontrolador AT90S2313
Registros del sistema (MCUCR)(cont.)

• MCU control register.

– ISC01,ISC00: Configuran el modo de interrupción


de la entrada externa INT0

19
Microcontrolador AT90S2313
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
Microcontrolador AT90S2313
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
Microcontrolador AT90S2313
Puerto B(cont.)

• Funciones alternativas a los pines del puerto B

22
Microcontrolador AT90S2313
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
Microcontrolador AT90S2313
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
Microcontrolador AT90S2313
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
Microcontrolador AT90S2313
Puerto D(cont.)

• Funciones alternativas a los pines del puerto D

26
Microcontrolador AT90S2313
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
Microcontrolador AT90S2313
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
Microcontrolador AT90S2313
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
Microcontrolador AT90S2313
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
Microcontrolador AT90S2313
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
Microcontrolador AT90S2313
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
Microcontrolador AT90S2313
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
Microcontrolador AT90S2313
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
Microcontrolador AT90S2313
Temporizador 0

• Registro TCCR0.

– Los bits CS0x definen la entrada de reloj del contador

35
Microcontrolador AT90S2313
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
Microcontrolador AT90S2313
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
Microcontrolador AT90S2313
Temporizador 1

38
Microcontrolador AT90S2313
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
Microcontrolador AT90S2313
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
Microcontrolador AT90S2313
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
Microcontrolador AT90S2313
Temporizador 1

• TCCR1B

– CS12,CS11,CS10: Selecciona la temporización del


timer1.

• º

42
Microcontrolador AT90S2313
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
Microcontrolador AT90S2313
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
Microcontrolador AT90S2313
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
Microcontrolador AT90S2313
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
Microcontrolador AT90S2313
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
Microcontrolador AT90S2313
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 RX
SDU1
Inicia la recepción

reposo reposo
TX
SDU2 SDU1 ← tiempo
48
Microcontrolador AT90S2313
UART (Comunicaciones serie asíncronas)

• UART (Transmisor Receptor Asíncrono Universal):


• -Transmisor
• - Receptor
• - Generador de baudios
• - Lógica de control e interrupciones

• Generador
Transmisor TX
de baudios

• Lógica de
control e Receptor RX
interrupciones

UART
49
Microcontrolador AT90S2313
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
Microcontrolador AT90S2313
UART (Comunicaciones serie asíncronas)

• UART en el AT90S2313 (Transmisor)

• Bus de datos


UDR
SDU
TxD
TxSHR

7 6 5 4 3 2 1 0
RX TX UDRE FE OR

USR
51
Microcontrolador AT90S2313
UART (Comunicaciones serie asíncronas)

• UART en el AT90S2313 (Transmisor)


USR
• 7 6 5 4 3 2 1 0
0: Estado inicial: UDRE=1 y RX TX UDRE FE OR
TX=1

1: Escritura de un dato en UDR Escritura
2: El paso 1 pone a 0 UDRE 1

3: Se forma la SDU y se traspasa 2


al registro TxSHR. Entonces UDR
UDRE=1 y TX=0 SDU 3
4: La transmisión de la SDU pone TxD
TxSHR
a uno el bit TX
4 DATO

52
Microcontrolador AT90S2313
UART (Comunicaciones serie asíncronas)

• UART en el AT90S2313 (Receptor)


Bus de datos

UDR
Dato
RxD
RxSHR

7 6 5 4 3 2 1 0
RX TX UDRE FE OR

USR
53
Microcontrolador AT90S2313
UART (Comunicaciones serie asíncronas)

• UART en el AT90S2313 (Receptor)

• 5

0: Estado inicial: RX=0


• una SDU
1: Se recibe Lectura
7
RX
6
TX
5
UDRE
4
FE
3
OR
2 1 0

2: Se manda al UDR los bits de 4


datos de la SDU y se actualizan USR
los bits FE y OR. RH
3: Se activa el bit RX del USR R
UDR
4: Se produce la lectura del 3
registro UDR 2
Dato
Data
5: Se borra el bit RX RxD
RxSHR
DATO 1
1

54
Microcontrolador AT90S2313
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
Microcontrolador AT90S2313
UART (Comunicaciones serie asíncronas)

• UART en el AT90S2313 (Generador de Baudios)


– Configura la velocidad de transmisión y recepción
– Registro UBRR

56
Microcontrolador AT90S2313
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
• &

7 6 5 4 3 2 1 0
USR RX TX UDRE FE OR

57
Microcontrolador AT90S2313
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
RXCIE TXCIE UDRIE RXEN TXEN CHR9 RXB8
0
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
Microcontrolador AT90S2313
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.
– 7 6 5 4 3 2 1 0
UCR 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
Microcontrolador AT90S2313
UART (Comunicaciones serie asíncronas)

• UART en el AT90S2313 (Resumen de registros)


60
Microcontrolador AT90S2313
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
Microcontrolador AT90S2313
Perro guardían (Watchdog)

• WDTCR

– WDE,WDTOE habilitan o inhabilitan el perro


guardián.
– WDP2-0, seleccionan el intervalo de vigilancia.

62
Microcontrolador AT90S2313
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

You might also like