Anda di halaman 1dari 73

2.

ORGANIZACIN INTERNA DE LOS


MICROCONTROLADORES

Microcontroladores

M. C. Felipe Santiago Espinosa


Octubre / 2016

MICROCONTROLADORES AVR DE
ATMEL

Arquitectura RISC de 8 bits.

Arquitectura Harvard, con memoria Flash para


cdigo, SRAM y EEPROM para datos.

Su Arquitectura es Cerrada.

Por la operacin con los datos, la arquitectura es


del tipo Registro-Registro.
2

Tamao

MICROCONTROLADORES AVR DE ATMEL

XMEGA
megaAVR
tinyAVR

ncleo
AVR

Caractersticas

AVR: Alf-Egil Bogen, Vegard Wollan, RISC Processor

LA FAMILIA DE MICROCONTROLADORES AVR


La familia de microcontroladores AVR es muy numerosa, incluye ms de
70 dispositivos que comparten el ncleo, pero difieren en recursos.
En particular revisaremos el ATMega328, cuyas caractersticas tcnicas
se resumen a continuacin:
Flash (Kbytes)

32

TWI

Si

EEPROM (bytes)

1K

ISP

Si

SRAM de proposito
general (bytes)

2048

ADC de 10 bits
(canales)

8 (6 en encapsulado
PDIP)

Max Pines I/O

23

Comparador Analgico

Si

F.max (MHz)

20

Watchdog Timer

Si

Vcc (V)

2.7-5.5

Oscilador Interno

Si

16-bit Timers

Multiplicador por Hardware

Si

8-bit Timer

Interrupciones

26

PWM (canales)

Int. Externas

RTC

Si

Int. Por cambios en Pines

3 (una por puerto)

USART

Autoprogramacin

Si

SPI (Maestro/Esclavo)

Debug wire

Si
4

ASPECTO
EXTERNO
ATMEGA328
Incluye 3 puertos,
todas las terminales
con ms de una
funcin alterna.

PB 8 bits
PC 7 bits
PD 8 bits

AVR CPU CORE


6

INTERIOR DEL MICROCONTROLADOR (ATMEGA328)

AVR CPU CORE

La funcin principal de la CPU es asegurar la


correcta ejecucin de programas. La CPU debe tener
acceso a las memorias, realizar clculos, controlar
perifricos y manejar interrupciones.
Para maximizar el rendimiento y paralelismo, el AVR
usa una arquitectura Harvard con memorias y
buses separados para instrucciones y datos.
La ALU soporta operaciones aritmticas y lgicas
entre registros o entre un registro y una constante.
Aunque tambin hay operaciones con un solo registro.
Despus de una operacin aritmtica, el registro de
Estado (Status Register) es actualizado, para reflejar
informacin acerca de la operacin.

EJECUCIN DE INSTRUCCIONES

El flujo del programa por naturaleza es secuencial.


Puede ser modificado por instrucciones de saltos
condicionales e incondicionales y llamadas a rutinas,
que pueden abarcar completamente el espacio de
direcciones.

Las instrucciones en la memoria de Programa son


ejecutadas con una segmentacin de dos etapas.
Mientras una instruccin est siendo ejecutada, la
siguiente es capturada de la memoria de programa.
Este concepto hace que se produzca una instruccin
por cada ciclo de reloj.
9

EJECUCIN DE INSTRUCCIONES

Con esto aparenta que las instrucciones solo requieren de un ciclo de


reloj (excepto los saltos).
Generando un rendimiento aproximado a 1 MIPS por MHz de la
frecuencia de trabajo del oscilador.

10

EJECUCIN DE INSTRUCCIONES
Para la ejecucin de instrucciones aritmticas y lgicas, la
duracin del ciclo es suficiente para permitir la lectura de
registros, la operacin de la ALU y la escritura en el registro
destino.
T1

T2

CLK CPU

Tiempo total de Ejecucin


Captura de operandos
Operacin de la ALU
Escritura de resultado

11

ARCHIVO DE REGISTROS

El Archivo de Registros contiene 32


registros de propsito general de 8 bits,
habilitados para un acceso rpido.
Seis de los 32 registros pueden ser
usados como apuntadores de 16 bits
para direccionamiento indirecto en el
espacio de datos, habilitando clculos de
direcciones eficientes. Para ello, estos
registros se denominan X, Y y Z.
El registro Z tambin puede usarse
como apuntador a la memoria de
programa.
Arquitectura Optimizada para ejecutar
cdigo C compilado.

X {
Y {
Z {

0
R0
R1
R2
...
R13
R14
R15
R16
R17
...
R26 (XL)
R27 (XH)
R28 (YL)
R29 (YH)
R30 (ZL)
R31 (ZH)

Dir.
0x00
0x01
0x02
0x0D
0x0E
0x0F
0x10
0x11
0x1A
0x1B
0x1C
0x1D
0x1E
0x1F

12

AVR CPU CORE


Mapa de memoria
13

Memoria de Programa

Memoria Flash cuyo tamao varia


entre procesadores, para el
ATMega328 es de 32 Kbytes (16 K
x 16 bits).
Soporta hasta 10,000 ciclos de
escritura/borrado.
Se puede dividir en una seccin
para aplicacin y una seccin de
arranque, donde podra manejarse
un cargador para auto
programacin.
Los vectores de interrupcin son
parte de la memoria de programa
e inician en la direccin 0.
14

Vector de interrupciones en el ATMega328


Vect.

Dir.

Fuente

Descripcin

0x0000

RESET

Reset del sistema (diferentes condiciones)

0x0002

INT0

Interrupcin Externa 0

0x0004

INT1

Interrupcin Externa 1

0x0006

PCINT0

Int. por cambio de pines 0

0x0008

PCINT1

Int. por cambio de pines 1

0x000A

PCINT2

Int. por cambio de pines 2

0x000C

WDT

Reset por Watchdog Timer

0x000E

TIMER2_COMPA

El timer 2 coincide con su comparador A

0x0010

TIMER2_COMPB

El timer 2 coincide con su comparador B

10

0x0012

TIMER2_OVF

11

0x0014

TIMER1_CAPT

12

0x0016

TIMER1_COMPA

El timer 1 coincide con su comparador A

13

0x0018

TIMER1_COMPB

El timer 1 coincide con su comparador B

14

0x001A

TIMER1_OVF

Desbordamiento del timer 2


Captura de entrada con el timer 1

Desbordamiento del timer 1

15

Vect. Dir.

Fuente

Descripcin

15

0x001C

TIMER0_COMPA

El timer 0 coincide con su comparador A

16

0x001E

TIMER0_COMPB

El timer 0 coincide con su comparador B

17

0x0020

TIMER0_OVF

18

0x0022

SPI_STC

19

0x0024

USART_RX

20

0x0026

USART_UDRE

Registro de Datos de la USART vaco

21

0x0028

USART_TX

Transmisin completa por la USART

22

0x002A

ADC

23

0x002C

EE_READY

24

0x002E

ANALOG_COMP

25

0x0030

TWI

26

0x0032

SPM_READY

Desbordamiento del timer 0


Transferencia completa por SPI
Recepcin completa por la USART

Conversin del ADC completa


EEPROM lista
Comparador analgico

Interfaz serial a dos hilos (2-wire)


Almacenamiento en memoria de
programa

La ubicacin de los vectores de interrupcin puede modificarse


para que el MCU inicie ejecutando instrucciones desde la seccin
de arranque.

16

Memoria de Datos

SRAM

EEPROM

17

Memoria SRAM de Datos

Es un espacio de 2304 localidades de 8


bits e incluyen:

32 Registros de acceso rpido.


64 Registros I / O.
160 Registros I/O extendidos.
2048 Localidades de propsito general.

Los 32 registros de acceso rpido y los registros I/O tienen


direcciones para ser tratados como SRAM de propsito general.

18

Archivo de Registros

El repertorio de instrucciones AVR est optimizado para


el archivo de Registros.
7
0
Las instrucciones que operan sobre el
Archivo de Registros tienen acceso a
todos ellos. Las que operan un registro
con una constante slo trabajan con los
registros de R17 a R31.
Cada registro tienen una direccin que
le permite ser tratado como cualquier
otra localidad de RAM (0x000 0x01F),
utilizando instrucciones de Carga (LD)
y almacenamiento (ST).
De R26 a R31 pueden usarse como
apuntadores para direccionamiento
indirecto.

X {
Y {
Z {

R0
R1
R2
...
R13
R14
R15
R16
R17
...
R26 (XL)
R27 (XH)
R28 (YL)
R29 (YH)
R30 (ZL)
R31 (ZH)

Dir.
0x00
0x01
0x02
0x0D
0x0E
0x0F
0x10
0x11
0x1A
0x1B
0x1C
0x1D
0x1E
0x1F

19

Registros I/O

El ATMega328 cuenta con un espacio para alojar hasta 64


Registros I/O de 8 bits (aunque no todas las direcciones estn
ocupadas).
Los Registros I/O se emplean para la configuracin y el control
de recursos internos, as como para conocer su estado. En este
espacio estn los registros para el manejo de los Puertos de
Entrada/Salida.
El acceso a los Registros I/O se realiza con las instrucciones
IN y OUT, intercambiando datos con el Archivo de Registros.
Con estas instrucciones deben usarse las direcciones 0x00 0x3F.
Los Registros I/O pueden ser tratados como memoria, con
instrucciones de carga (LD) y almacenamiento (ST)
(direcciones 0x20 - 0x5F), aunque es menos eficiente.
Los Registros I/O en el rango 0x00 - 0x1F son accesibles por
bit. Para modificarse, con instrucciones SBI y CBI o para
evaluarse, a travs de las instrucciones SBIS y SBIC.

20

Registros I/O Extendidos

El espacio para los Registros I/O Extendidos es de 160


localidades; aunque la mayora estn libres, el espacio est
disponible para compatibilidad con otras versiones de la
familia AVR.

Tienen la misma funcin que los Registros I/O, es decir, se


emplean para la configuracin y el control de recursos
internos, as como para conocer su estado.
Los Registros I/O Extendidos son Registros I/O mapeados en
SRAM, por lo que nicamente se pueden tratar con
instrucciones de carga (LD) y almacenamiento (ST)
(direcciones 0x60 - 0xFF).
Como un ejemplo, los registros de los Temporizadores son
parte de los Registros I/O Extendidos.
Los Registros I/O y Registors I/O Extendidos se revisarn
conforme se estudien los diferentes recursos, la lista completa 21
se puede consultar en la Hoja de Especificaciones.

Registro de ESTADO (SREG: 0x3F)


Bit
Read/Write
Valor inicial

I: Habilitador global de Interrupciones,


con un 1 lgico, las interrupciones son habilitadas.
T: Para respaldo de un bit, es usado con la instruccin BLD para
Carga y BST para Almacenamiento.
H: Bandera de acarreo de los 4 bits inferiores (Half)
S: Bit de signo (Mantiene una XOR entre N y V)
V: Bandera de Sobreflujo, en operaciones de complemento a dos.
N: Bandera de Negativo
Z: Bandera de Cero

Se generan con operaciones


Aritmticas y lgicas

22

C: Bandera de Acarreo
22

Apuntador de Pila (SP)


$3E
$3D

La pila est implementada en el espacio de propsito general (que es de


2048 bytes).
Es usada durante la llamada de subrutinas, el manejo de interrupciones
o para el almacenamiento temporal de variables (con instrucciones
PUSH y POP).
El registro SP es el apuntador al tope de la pila. Realmente SP se
compone de 2 registros, para la parte alta (SPH) y para la parte baja
(SPL), esto para direccionar al espacio completo de memoria.

La pila tiene un crecimiento hacia abajo, es decir, de las direcciones


altas de memoria a las direcciones bajas.
Despus de un Reset, el apuntador de Pila tiene el valor de 0x0000, por
lo que si se manejan rutinas, debe ser inicializado con 0x08FF, para que
realice un almacenamiento dentro de un espacio vlido.
23

ACCESO AL ESPACIO DE PROPSITO GENERAL

La arquitectura AVR es del tipo Registro Registro,


la informacin de SRAM slo puede ser operada
cuando est en Registros.
Existen diversas instrucciones para cargas o
almacenamientos, ya sean de manera directa o
indirecta.

24

ACCESO AL ESPACIO DE PROPSITO GENERAL


T1

T2

T3

CLK CPU

Registro IR

Captura

Direccin

Calcula direccin

Direccin vlida
Dato a escribir

Datos

Almacenamiento
(Escritura en SRAM)

WR
Dato ledo

Datos
RD

La etapa de ejecucin de un acceso a memoria,


ya sea carga o almacenamiento, requiere de dos
ciclos de reloj.

Carga
(Lectura en SRAM)

25

MEMORIA EEPROM PARA DATOS

Espacio no voltil para el almacenamiento de datos, cuyo


tamao varia entre procesadores. Para el ATMega328 es de
1024 bytes.
La memoria EEPROM est en un espacio independiente y se
requiere de 3 Registros I/O para su acceso:
EEAR - Para el manejo de la direccin.

(dir.)

0x22

EEAR9

EEAR8

EERH

0x21

EEAR7

EEAR6

EEAR5

EEAR4

EEAR3

EEAR2

EEAR1

EEAR0

EERL
26

EEDR - Para el dato (0x1D)

(dir.)

0x20

Registro de datos de la EEPROM

EEDR

EECR - Para el control (0x1C)

(dir.)
0x1F

7
-

EEMP[1:0]

6
-

5
4
EEPM1 EEPM0

3
2
EERIE EEMPE

1
EEPE

0
EERE

EECR

EEPROM Programming Mode


Definen qu accin se realizar en la EEPROM, es posible con
una operacin borrar el viejo valor y escribir el nuevo (operacin
atmica).

EEMP1

EEMP0

Tiempo

Operacin

3.4 mS

Borra y escribe en una operacin

1.8 mS

nicamente borra

1.8 mS

Unicamente escribe

Reservado

27

Bits del registro de CONTROL :


(dir.)
0x1F

7
-

6
-

5
4
EEPM1 EEPM0

3
2
EERIE EEMPE

1
EEPE

0
EERE

EECR

EERIE:

EEPROM Ready Interrupt Enable


En alto habilita la interrupcin por EEPROM. La EEPROM
genera una interrupcin cuando EEWE/EEPE es limpiado.

EEMPE :

EEPROM Master Write Enable


Determina si la puesta en alto de EEPE producir una escritura
en la EEPROM. Al ponerse en alto, se cuenta con 4 ciclos para
iniciar la escritura con EEPE, de lo contrario se limpiar
automticamente por Hardware.

EEPE :

EEPROM Write Enable


Debe ponerse en alto para dar inicio a un ciclo de escritura. Se
limpiar automticamente por Hardware al finalizar la escritura.
Un programa de usuario puede monitorear este bit o si se pone en
alto a EERIE se producir una interrupcin.

EERE:

EEPROM Read Enable


Debe ponerse en alto para un ciclo de lectura, se limpiar
automticamente por Hardware. El dato ledo est disponible de
manera inmediata. No es posible realizar una lectura si hay una
escritura en proceso.

28

Rutina de Escritura en EEPROM :


; El dato a escribir est en R16
; Se escribir en las direcciones R18:R17
EEPROM_write:
; Asegura que no hay escritura en proceso
sbic EECR,EEPE
rjmp EEPROM_write

; Establece la direccin
out EEARH, r18
out EEARL, r17
; Coloca el dato
out EEDR,r16
; Pone en alto al habilitador maestro
sbi EECR,EEMPE
; Inicia la escritura
sbi EECR,EEPE
ret

29

Funcin de Escritura en EEPROM :


// Recibe el dato y la direccin a escribir

void

EEPROM_write (unsigned char dato,


unsigned int direccion )

{
// Asegura que no hay escritura en proceso
while ( EECR & 1 << EEPE )
;
// Establece la direccin
EEAR = direccion;
// Coloca el dato
EEDR = dato;
// Pone en alto al habilitador maestro
EECR |= ( 1 << EEMPE );
// Inicia la escritura
EECR |= ( 1 << EEPE );

30

Rutina de Lectura en EEPROM :


; El dato a leer se dejar en R16
; Se leer de las direcciones R18:R17
EEPROM_read:
; Asegura que no hay una escritura en proceso
sbic EECR,EEPE
rjmp EEPROM_read
; Establece la direccin
out EEARH, r18
out EEARL, r17
; Inicia la lectura
sbi EECR,EERE
; Coloca el dato
in r16, EEDR
ret

31

Funcin de Lectura en EEPROM :


// Regresa el dato ledo, se recibe la direccin
unsigned char EEPROM_read(unsigned int direccion)
{
// Asegura que no hay una escritura en proceso
while ( EECR & 1 << EEPE)
;
// Establece la direccin
EEAR = direccion;

// Inicia la lectura
EECR |= ( 1 << EERE );
// Regresa el dato
return EEDR;
}

32

PUERTOS DE ENTRADA/SALIDA

Incluye 3 puertos, todas las terminales con ms de una funcin alterna.


PB 8 bits
PC 7 bits
PD 8 bits

33

Puertos de Entrada/Salida

Para cada puerto se manejan tres registros, dentro del


espacio de registros I/O

PORTx: Un registro de lectura/escritura sobre un


lacth, conectado a la terminal del puerto. En este se
escribe, cuando el puerto est configurado como
salida.
DDRx: Un registro de lectura/escritura que define la
direccin del puerto. Las direcciones pueden
configurarse de manera independiente, para cada
terminal.

1 Salida

0 Entrada

PINx: Un registro solo de lectura, para hacer lecturas


directas en las terminales de los puertos.

34

Registros para el manejo de puertos


7

0x0B

PORTB7

PORTB6

PORTB5

PORTB4

PORTB3

PORTB2

PORTB1

PORTB0

PORTB

0x0A

DDRB7

DDRB6

DDRB5

DDRB4

DDRB3

DDRB2

DDRB1

DDRB0

DDRB

0x09

PINB7

PINB6

PINB5

PINB4

PINB3

PINB2

PINB1

PINB0

PINB

0x08

PORTC6

PORTC5

PORTC4

PORTC3

PORTC2

PORTC1

PORTC0

PORTC

0x07

DDRC6

DDRC5

DDRC4

DDRC3

DDRC2

DDRC1

DDRC0

DDRC

0x06

PINC6

PINC5

PINC4

PINC3

PINC2

PINC1

PINC0

PINC

0x05

PORTD7

PORTD6

PORTD5

PORTD4

PORTD3

PORTD2

PORTD1

PORTD0

PORTD

0x04

DDRD7

DDRD6

DDRD5

DDRD4

DDRD3

DDRD2

DDRD1

DDRD0

DDRD

0x03

PIND7

PIND6

PIND5

PIND4

PIND3

PIND2

PIND1

PIND0

PIND

35

Puertos de Entrada/Salida
INTERIOR DEL
MICROCONTROLADOR

PUD
DDRxn
Q

CLR

WDDRx
RESET

PORTxn
Pxn

Terminal n del
Puerto x

CLR

WPORTx
RESET

SLEEP

El bit PUD (Pull-Up


disable) est en el
registro SFIOR
(Special Function IO
Register).

BUS DE DATOS

RDDRx

RPORTx

SINCRONIZACIN
RPINx
PINxn
D

36
clk I/O

Puertos de Entrada/Salida
( Configuraciones )

DDRxn PORTxn

PUD
(en SFIOR)

E/S

Pull-Up

Comentario

Entrada

No

Sin resistor de Pull-Up

Entrada

Si

Con resistor de Pull-Up

Entrada

No

Sin resistor de Pull-Up

Salida

No

Salida en bajo

Salida

No

Salida en alto

37

EJEMPLOS:
1.

Muestre el cdigo requerido para configurar la


parte alta del puerto B como entradas y la parte
baja como salidas, y habilite los resistores de
Pull-Up de las 2 entradas ms significativas.

2.

Muestre la secuencia de cdigo que configure al


puerto B como entrada y al puerto D como
salida, para luego transferir la informacin del
puerto B al puerto D.

38

Sistema de Interrupciones

Una interrupcin es la ocurrencia de una condicin un


evento generado por un recurso del MCU que ocasiona
la suspensin temporal del programa principal.
El evento es atendido con una rutina de servicio a la
interrupcin (ISR) o un manejador de interrupcin.
La rutina de atencin para una interrupcin debe
colocarse en una direccin pre-establecida por Hardware,
formando parte de un vector de interrupciones.
Al concluir con la ISR, la CPU contina con la ejecucin
del programa principal.
Al utilizar un sistema manejador de interrupciones se
tiene la ilusin de que se estn haciendo diferentes tareas
en forma simultnea.
39

Sistema de Interrupciones
Un aspecto importante es que los eventos pueden ocurrir en
cualquier momento, es decir, en forma asncrona.
Programa Principal

tiempo

(a)

Nivel de
Interrupciones

ISR
*

Nivel
Base

Programa
Principal
tiempo

* Interrupcin
** Retorno de Interrupcin

ISR
**

*
Programa
Principal

**
Programa
Principal

(b)
40

Interrupciones en los AVRs

Se tienen diferentes fuentes de Interrupcin:

Por inicializacin o Reset.

Interrupciones externas.

Ante cambios en las terminales.

Interrupciones por los temporizadores,


comparacin, captura o desbordamiento.

pueden

ser

por

Al completar una transferencia serial (puerto SPI).


Ocasionadas por el puerto serie (USART), por transmisin,
recepcin o buffer vaco.

Por el convertidor analgico digital.

Al finalizar una escritura en EEPROM.

Por el comparador analgico.

Por la interfaz serial a dos hilos (TWI).

Al escribir en memoria de programa.


41

El nmero real de interrupciones depende del dispositivo.

Interrupciones en los AVRs

Las interrupciones no estn activas despus de un reset.


Su activacin requiere la puesta en alto del bit I, en el
registro de estado (SREG), adems de las habilitaciones
individuales para que los recursos puedan interrumpir a
la CPU.
Adems del reset, en el ATMega328 se tienen 25 fuentes
de interrupcin, cada una con su propia direccin.
Al generarse una interrupcin, el PC es almacenado en la
pila y toma el valor de una entrada en el vector de
interrupciones (segn sea la interrupcin). Adems de
desactivar al bit I para no aceptar ms interrupciones.
La ISR debe terminar con la instruccin RETI, la cual
recupera el valor del PC de la pila y ajusta al bit I.

42

Vector de interrupciones en el ATMega328


Vect.

Dir.

Fuente

Descripcin

0x0000

RESET

Reset del sistema (diferentes condiciones)

0x0002

INT0

Interrupcin Externa 0

0x0004

INT1

Interrupcin Externa 1

0x0006

PCINT0

Int. por cambio de pines 0

0x0008

PCINT1

Int. por cambio de pines 1

0x000A

PCINT2

Int. por cambio de pines 2

0x000C

WDT

Reset por Watchdog Timer

0x000E

TIMER2_COMPA

El timer 2 coincide con su comparador A

0x0010

TIMER2_COMPB

El timer 2 coincide con su comparador B

10

0x0012

TIMER2_OVF

11

0x0014

TIMER1_CAPT

12

0x0016

TIMER1_COMPA

El timer 1 coincide con su comparador A

13

0x0018

TIMER1_COMPB

El timer 1 coincide con su comparador B

14

0x001A

TIMER1_OVF

Desbordamiento del timer 2


Captura de entrada con el timer 1

Desbordamiento del timer 1

43

Vect.

Dir.

Fuente

15

0x001C

TIMER0_COMPA

El timer 0 coincide con su comparador A

16

0x001E

TIMER0_COMPB

El timer 0 coincide con su comparador B

17

0x0020

TIMER0_OVF

18

0x0022

SPI_STC

19

0x0024

USART_RX

20

0x0026

USART_UDRE

Registro de Datos de la USART vaco

21

0x0028

USART_TX

Transmisin completa por la USART

22

0x002A

ADC

23

0x002C

EE_READY

24

0x002E

ANALOG_COMP

25

0x0030

TWI

26

0x0032

SPM_READY

Descripcin

Desbordamiento del timer 0


Transferencia completa por SPI
Recepcin completa por la USART

Conversin del ADC completa


Concluyo una escritura en EEPROM
Comparador analgico

Interfaz serial a dos hilos (2-wire)


Almacenamiento en memoria de
programa listo

La ubicacin de los vectores de interrupcin puede modificarse


para que el MCU inicie ejecutando instrucciones desde la seccin
de arranque.

44

Manejo de Interrupciones
; Un programa
.org
jmp
jmp
jmp

generalmente inicia en la direccin 0


0x000
Principal ; Evita los vectores de interrupcin
Externa_0 ; Bifurca a su ISR correspondiente
Externa_1 ; Bifurca a su ISR correspondiente

. . .
.org

Principal: . . .
. . .
. . .

0x034

; Ac estaran otras bifurcaciones


; Despus de los vectores de interrupcin
;
; Ac estar el cdigo principal
; Debe activar las interrupciones

; Posterior al cdigo principal, deben situarse las ISRs


Externa_0:
. . .
RETI
Externa_1:
. . .
RETI

; Respuesta a la interrupcin externa 0


; Debe terminar con RETI
; Respuesta a la interrupcin externa 1
; Debe terminar con RETI

Nota: La instruccin JMP ocupa dos palabras de 16 bits.

45

Manejo de Interrupciones
(Alto Nivel)
#include <avr/io.h>
#include <avr/interrupt.h>

// Entradas y salidas
// Interrupciones

// Las ISRs se ubican antes del programa principal


ISR (INT0_vect)
{
. . . .
}

// Servicio a la interrupcin externa 0

ISR (INT1_vect)
{
. . . .
}

// Servicio a la interrupcin externa 1

int main(void)
{
. . . . .
}

// Programa Principal
// Debe activar las interrupciones

En C, todas las funciones de atencin a interrupcin se llaman ISR, difieren en


el argumento que corresponde a la etiqueta de la fuente de interrupcin,
seguida por la palabra vect.

46

Manejo de Interrupciones

Para que un programa use las interrupciones, se


requiere:
1. Configurar el recurso o recursos para monitorear el
evento o eventos.
2. Habilitar las interrupciones (habilitador individual
y global).
3. Continuar con la ejecucin normal de la aplicacin.

47

Manejo de Interrupciones
Cuando ocurre una interrupcin el MCU realiza:
1. Concluye con la instruccin bajo ejecucin.
2. Desactiva al habilitador global de interrupciones,
para que no pueda recibir una nueva interrupcin,
mientras atiende a la actual.
3. Respalda en la pila al PC (previamente
incrementado).
4. Asigna al PC el valor del vector de interrupciones,
para dar paso a la ISR.
5. Atiende al evento con la ISR.
48

Manejo de Interrupciones
Cuando una ISR termina (con la instruccin RETI, si
se program en ensamblador):
1. Se limpia la bandera del evento que gener la
interrupcin.
2. El habilitador global se activa nuevamente.
3. El PC toma el valor del tope de la pila, para que la
ejecucin contine en el programa principal.

49

Sistema de Inicializacin
Se tienen las siguientes fuentes de Inicializacin (Reset):
Reset de encendido (Power-on Reset). El MCU es
inicializado cuando el voltaje de la fuente est por abajo del
voltaje de umbral de encendido (VPOT, tpico 1.3 V).
Reset Externo. El MCU es inicializado cuando un nivel bajo
est presente en la terminal RESET por un tiempo mayor que la
longitud mnima del pulso (trst, tpico 2.5 uS).
Watchdog Reset. El MCU es inicializado cuando el Watchdog
Timer est habilitado y su periodo termina.

Brown-out Reset. El MCU es inicializado cuando el detector de


reduccin de voltaje est habilitado y el voltaje VCC de la fuente
va por debajo del umbral establecido (VBOT, cuyo valor es
configurable).
50

Sistema de Inicializacin

51

Sistema de Inicializacin
En el registro MCUSCR (0x34) se registra la condicin de reset,
poniendo al bit correspondiente en alto.

7
-

6
-

5
-

4
-

3
WDRF

2
BORF

1
EXTRF

0
PORF

MCUSR

WDRF: Watchdog Reset Flag


BORF: Brown-out Reset Flag

Tienen Cero despus de


suministrar la alimentacin
(Power-on Reset)

EXTRF: External Reset Flag


PORF: Power-on Reset Flag
52

Reset de Encendido (Power on Reset)


Una vez que el MCU se recupera de una condicin de Reset, espera
un tiempo de establecimiento (Tout inicialmente es de 65 ms),
antes de recuperar al sistema, para garantizar que los registros
tienen su valor inicial.

Vcc

RESET

TIME OUT

VPOT

VRST

tOUT

RESET
INTERNO

53

Reset Externo
Con la terminal externa RESET se inicializa al sistema introduciendo
un nivel bajo de voltaje. (a) Al encender el sistema y (b) en cualquier
instante.
Vcc

VPOT

RESET

VRST

VRST

tOUT

TIME OUT

tOUT

RESET
INTERNO
(a)

(b)

54

Inicializacin por Brown-out


Se refiere a una inicializacin cuando el voltaje de alimentacin
(Vcc) cae por debajo de un umbral pre-establecido (VBOT)
VBOT+

VBOT-

Vcc

tOUT

TIME OUT

RESET
INTERNO

Dentro de los Bits de configuracin se tienen los bits BODLEVEL para


determinar el voltaje de umbral (VBOT), como se muestra en la tabla:

BODLEVEL
111

Min

Tip

Max

Detector de bajo voltaje deshabilitado

110

1.7 V

1.8 V

2.0 V

101

2.5 V

2.7 V

2.9 V

100

4.1 V

4.3 V

4.5 V

otras

Reservado

VBOT+ = VBOT + VHYST/2 y VBOT- = VBOT - VHYST/2

(VHYST = 50 mV, tpico)

55

Inicializacin por Watchdog


Cuando el Watchdog Timer desborda genera un pulso con una
duracin de 1 ciclo de reloj. Con este pulso se acciona el reset
interno e inicia el tiempo de establecimiento.

1 ciclo de reloj

Desbordamiento
del Watchdog Timer

TIME OUT

tOUT

RESET
INTERNO
56

Sistema del reloj

Se tienen diferentes fuentes para generar la seal de reloj en el MCU y a


la vez, la seales de reloj se distribuyen por los diferentes mdulos.

57

Seales de reloj en un AVR


La unidad de control del reloj se encarga de generar diferentes
seales de reloj y distribuirlas a los diferentes mdulos, las
diferentes seales de reloj son:
clkCPU: Ruteado al ncleo AVR, incluyendo al archivo de
registros, registro de Estado, Memoria de datos, apuntador de
pila, etc.
clkFLASH: Seal de reloj suministrada a las memorias FLASH
y EEPROM.
clkADC: Reloj dedicado al ADC, el ADC trabaja a una
frecuencia menor que la CPU con el objetivo de reducir el
ruido generado por interferencia digital y mejorar las
conversiones.

58

Seales de reloj en un AVR


clkI/O: Es la seal de reloj utilizada por los principales mdulos de
recursos: Temporizadores, interfaz SPI y USART. Adems de ser
requerido por el mdulo de interrupciones externas.
clkASY: Esta seal de reloj es asncrona con respeto al resto del
sistema y es empleada para sincronizar al temporizador 2, el
mdulo que genera esta seal est optimizado para manejarse con
un cristal externo de 32.768 kHz. Frecuencia que permite usar al
temporizador como un contador de tiempo real, an cuando el
dispositivo est en algn modo de reposo.

59

Sistema del reloj

La fuente de reloj se selecciona con los bits de configuracin CKSEL,


estos no corresponden a algn registro. Se tienen las opciones:

Opcin para el Reloj del Sistema

Bits CKSEL[3:0]

1. Cristal de Baja Potencia

1111 1000

2. Cristal de rango completo

0111 0110

3. Cristal de Baja Frecuencia

0101 0100

4. Oscilador RC Interno de 128 KHz

0011

5. Oscilador RC Calibrado Interno

0010

6. Reloj Externo

0000

Reservado

0001

Estos bits se deben programar durante la programacin del microcontrolador.

Existen otro par de bits (SUT, Set up Time) para definir el retardo inicial en la
operacin del oscilador, despus de un reset. Trabajan en combinacin con los
60
bits CKSEL.

1. Cristal de Baja Potencia


C2
XTAL2
C1
XTAL1

GND

Rango de Frecuencias
(MHz)

Valores recomendados para


C1 y C2 (pF)

CKSEL [3:1]

0.4 0.9

100

0.9 3.0

12 22

101

3.0 8.0

12 22

110

8.0 16.0

12 22

111
61

Cristal de Baja Potencia


Establecimiento Retardo despus
Oscilador/Condiciones de
despus de bajo
de un reset
CKSEL0
potencia
consumo
(VCC = 5 V)
Resonador cermico/ rpido
258 ck
14 CK + 4.1 ms
0
crecimiento de potencia
Resonador cermico/ lento
258 ck
14 CK + 65 ms
0
crecimiento de potencia
Resonador cermico/ BOD
1K ck
14 CK
0
habilitado
Resonador cermico/ rpido
1K ck
14 CK + 4.1 ms
0
crecimiento de potencia
Resonador cermico/ lento
1K ck
14 CK + 65 ms
1
crecimiento de potencia
Cristal/ BOD habilitado
16K ck
14 CK
1
Cristal/ rpido crecimiento de
16K ck
14 CK + 4.1 ms
1
potencia
Cristal/ lento crecimiento de
16K ck
14 CK + 65 ms
1
potencia

SUT
[1:0]
00

01
10
11
00
01
10
62

11

2. Cristal de Rango Completo


C2
XTAL2
C1
XTAL1

GND

Rango de Frecuencias
(MHz)

Valores recomendados para


C1 y C2 (pF)

CKSEL [3:1]

0.4 20

12 22

011

63

Cristal de Rango Completo


Establecimiento Retardo despus
Oscilador/Condiciones de
despus de bajo
de un reset
CKSEL0
potencia
consumo
(VCC = 5 V)
Resonador cermico/ rpido
258 ck
14 CK + 4.1 ms
0
crecimiento de potencia
Resonador cermico/ lento
258 ck
14 CK + 65 ms
0
crecimiento de potencia
Resonador cermico/ BOD
1K ck
14 CK
0
habilitado
Resonador cermico/ rpido
1K ck
14 CK + 4.1 ms
0
crecimiento de potencia
Resonador cermico/ lento
1K ck
14 CK + 65 ms
1
crecimiento de potencia
Cristal/ BOD habilitado
16K ck
14 CK
1
Cristal/ rpido crecimiento de
16K ck
14 CK + 4.1 ms
1
potencia
Cristal/ lento crecimiento de
16K ck
14 CK + 65 ms
1
potencia

SUT
[1:0]
00

01
10
11
00
01
10
64

11

3. Cristal de Baja Frecuencia

Para usar un cristal de 32.768 Khz, el cual proporciona la base para un


contador de tiempo real, puede usarse CKSEL = 0101 o 0100.

Despus de un modo de bajo consumo, el tiempo de establecimiento es de


1 K ck cuando CKSEL = 0100 y 32 K ck si CKSEL = 0101.

Los tiempos de arranque despus de un reset estn dados por:

SUT [1:0]

Tiempo

Uso recomendado

00

4 ck

01

4 ck + 4.1 ms

Rpido crecimiento de potencia o


BOD habilitado
Lento crecimiento de potencia

10

4 ck + 65 ms

Frecuencia estable al arranque

11

Reservado
65

4. Oscilador RC Interno de 128 KHz


Es un oscilador de baja potencia que proporciona un reloj
de 128 KHz a 3 V y 25 C, no est diseado para alta
precisin.
La seleccin se realiza con CKSEL = 0011.
Sus tiempos de establecimiento son:
SUT [1:0]

Despus de reset

Salir de bajo consumo

00

14 ck

6 ck

01

14 ck + 4 ms

6 ck

10

14 ck + 64 ms

6 ck

11

Reservado
66

5. Oscilador RC Calibrado Interno

El oscilador RC interno es de 8 MHz, calibrado de fbrica a 3 V y 25 C.

La frecuencia puede variar entre 7.3 y 8.1 MHz, para intervalos de voltaje entre
1.8 y 5.5 V y de temperatura entre -40 a 85 C.

Despus de un reset, el hardware utiliza el valor de calibracin almacenado en el


registro OSCCAL, el cual puede ser modificado por el usuario si se considera
necesario.

El MCU tiene al fusible CKDIV8, por medio del cual se habilita una divisin entre
8 para que opere a una frecuencia de 1 Mhz, este fusible est programado por
default.

Sus tiempos de establecimiento son:

SUT [1:0]

Despus de reset (VCC = 5 V)

Salir de bajo consumo

00

14 ck

6 ck

01

14 ck + 4.1 ms

6 ck

10

14 ck + 65 ms

6 ck

11

Reservado

67

6. Reloj Externo
PB7

Seal de Reloj
Externa

XTAL2

XTAL1

GND

Sus tiempos de establecimiento, despus de un reset, son:

SUT [1:0]

Retardo despus de un reset (VCC = 5 V)

00

14 ck

01

14 ck + 4.1 ms

10

14 ck + 65 ms

11

Reservado

Despus de algn modo de bajo consumo,


el retraso es de 6 ciclos de reloj.

68

Administracin de la Potencia y modos SLEEP


Los modos de bajo consumo (SLEEP) habilitan a la aplicacin a
apagar mdulos sin usar en el MCU y por lo tanto, ahorrar
energa.
Los AVR tienen 5 modos SLEEP y para entrar en alguno de
ellos, el bit SE (SLEEP Enable) debe ponerse en alto.
En el ATMega328 la configuracin debe realizarse en el registro
SMCR (Sleep Mode Control Register).

Los bits SM2, SM1 y SM0 determinan el modo. Deben


configurarse antes de ejecutar la instruccin SLEEP, con la que
el MCU es llevado al modo de bajo consumo.
69

Modos de bajo consumo


SM2

SM1

SM0

Modo de bajo consumo

Modo ocioso (Idle)

Modo de reduccin de ruido en el


ADC

Modo de baja potencia

Modo de ahorro de potencia

Reservado

Reservado

Modo de espera (Standby)

Modo de espera extendido

Notas: Para el modo de espera (Standby) se recomienda usar cristales o resonadores externos.
70

Administracin de la Potencia y modos SLEEP


Modo ocioso: Todos los recursos trabajan, la CPU no ejecuta
instrucciones (no tienen seal de reloj). El reloj principal y del
temporizador estn activos. Cualquier evento de los diferentes
recursos provoque una salida del modo de reposo.
Modo de reduccin de ruido en el ADC: nicamente trabaja
el ADC y el oscilador asncrono para el temporizador 2.
Adecuado para aplicaciones que requieren el monitoreo de
parmetros analgicos en periodos preestablecidos de tiempo.
Modo de baja potencia: No hay reloj, es el modo con el menor
consumo de energa. El MCU puede ser reactivado por eventos
en la interfaz de dos hilos o por las interrupciones externas.

71

Administracin de la Potencia y modos SLEEP


Modo de ahorro de potencia: Slo est activo el oscilador
asncrono, se mantiene activo el temporizador 2, sincronizado
con una fuente de reloj externa. Ideal para aplicaciones que
involucren un reloj de tiempo real.
Modo de espera: Este modo es muy similar al modo de baja
potencia, la nica diferencia es que en este modo se mantiene
activo el suministro del reloj principal.

Modo de espera extendido: Este modo es muy similar al


modo de ahorro de potencia, la nica diferencia es que en este
modo tambin est activo el suministro del reloj principal.

72

Administracin de la Potencia y
modos SLEEP

clkASY

Reloj Principal

Oscilador del
temporizador

INT0, INT1 y
cambio en pines

Interfaz de dos
hilos (TWI)

Temporizador 2

EEPROM, Memoria
de programa lista

ADC

WDT

Otros I/O

Baja potencia
Ahorro de potencia

Modo de espera (standby)


Modo de espera extendido

Eventos que despiertan al MCU

clkADC

Reduccin de ruido en el
ADC

Osciladores

clkIO

Modo ocioso (idle)

clkFLASH

Modo de Bajo Consumo


de Energa

clkCPU

Reloj Activo

X
X

X
X

X
X

73

Anda mungkin juga menyukai