4 Interrupt y IO ATMEL

23
Conceptos básicos de Interrupciones y E/S Atmel Taller de Microcontroladores año 2012 Optativa de grado y Curso de Posgrado

Transcript of 4 Interrupt y IO ATMEL

Page 1: 4 Interrupt y IO ATMEL

Conceptos básicos de

Interrupciones y E/S

Atmel

Taller de Microcontroladores

año 2012

Optativa de grado y

Curso de Posgrado

Page 2: 4 Interrupt y IO ATMEL

Interrupciones: conceptos básicos

• Mecanismo de control de flujo implementado en la mayoría de losmicrocontroladores para poder interactuar con el exterior.

• Permite interactuar con eventos sucediendo asíncronicamente a lastareas realizadas por el micro.

• Ejemplos: Un botón presionado por un usuario, Datos arribando por la UART, muestreos del ADC, un timer, etc.

Inst 1Inst 2Inst 3Inst 4Inst 5…Inst n

interrupción Inst 1Inst 2…Inst n

Programa Servicio deInterrupción

llamada

retorno

Page 3: 4 Interrupt y IO ATMEL

Interrupciones: conceptos básicos

Programa con soporte para interrupciones: estructura básica

Ejemplo: Un programa manejado por interrupción que haga “nada” y se active externamente.

Pasos:

1. Seteo de las direcciones de salto en los vectores de interrupción2. Configuración de las máscaras de interrupción necesarias para

habilitar la interrupción deseada3. Configuración del registro de control (MCUCR)4. Habilitación de interrupciones global (SREG)

Page 4: 4 Interrupt y IO ATMEL

NOTA: Definición de nombresTodos los registros en la arquitectura se mapean en memoria física:

• banco de registros• puertos de entrada/salida• registros de control y estado• vectores de interrupción…

• Por convención se usan ciertos nombre predefinidos y aceptados• El mapeo de esos nombres a direcciones reales de memoria esta

en archivos de definición (*def.inc)• Al incluir estos archivos se pueden utilizar en el programa todos los

nombres de puertos, los nombres de bits individuales, etc.

Page 5: 4 Interrupt y IO ATMEL

;***** I/O Register Definitions.equ SREG =$3f.equ SPH =$3e.equ SPL =$3d.equ GIMSK =$3b.equ GIFR =$3a.equ TIMSK =$39.equ TIFR =$38.equ MCUCR =$35.equ TCCR0 =$33.equ TCNT0 =$32.equ TCCR1A =$2f.equ TCCR1B =$2e.equ TCNT1H =$2d.equ TCNT1L =$2c.equ OCR1AH =$2b.equ OCR1AL =$2a.equ OCR1BH =$29.equ OCR1BL =$28

;***** Bit Definitions.equ INT1 =7.equ INT0 =6

.equ TOIE1 =7

.equ OCIE1A =6

.equ OCIE1B =5

.equ TICIE =3

.equ TOIE0 =1

.equ TOV1 =7

.equ OCF1A =6

.equ OCF1B =5

.equ ICF1 =3

.equ TOV0 =1

.equ SRE =7

.equ SRW =6

.equ SE =5

.equ SM =4

.equ ISC11 =3

.equ ISC10 =2

.equ ISC01 =1

.equ ISC00 =0

8515def.inc

.equ PORTA =$1b

.equ DDRA =$1a

.equ PINA =$19

.equ PORTB =$18

.equ DDRB =$17

.equ PINB =$16

.equ PORTC =$15

.equ DDRC =$14

.equ PINC =$13

.equ PORTD =$12

.equ DDRD =$11

.equ PIND =$10

Page 6: 4 Interrupt y IO ATMEL

8515def.inc

.equ INT0addr=$001 ;External Interrupt0 Vector Addres s

.equ INT1addr=$002 ;External Interrupt1 Vector Addres s

.equ ICP1addr=$003 ;Input Capture1 Interrupt Vector A ddress

.equ OC1Aaddr=$004 ;Output Compare1A Interrupt Vector Address

.equ OC1Baddr=$005 ;Output Compare1B Interrupt Vector Address

.equ OVF1addr=$006 ;Overflow1 Interrupt Vector Addres s

.equ OC0addr =$007 ;Output Compare0 Interrupt Vector Address

.equ OVF0addr=$008 ;Overflow0 Interrupt Vector Addres s

.equ SPIaddr =$009 ;SPI Interrupt Vector Address

.equ URXCaddr=$00a ;UART Receive Complete Interrupt V ector Address

.equ UDREaddr=$00b ;UART Data Register Empty Interrup t Vector Address.equ UTXCaddr=$00c ;UART Transmit Complete Interrupt Vector Address.equ ACIaddr =$00d ;Analog Comparator Interrupt Vecto r Address

Vectores de interrupciones

Page 7: 4 Interrupt y IO ATMEL

Volvamos al ejemplo…Paso 1Seteo de las direcciones de salto en los vectores de interrupción

La memoria de programa, desde la dirección $0000, contiene la tabla deVectores de interrupción.El programa real debe comenzar después de esa tabla.La tabla almacena vectores que contienen la dirección de las rutinas deInterrupción correspondientes.

Dirección de la rutina de manejo de interrupción externa INT0

INT1$0002

….….….

Dirección de la rutina de manejo de interrupción externa INT0

INT0$0001

Dirección de la rutina de reset del procesadorReset$0000

ComentarioVectorDirección

Page 8: 4 Interrupt y IO ATMEL

La directiva .orgDirectiva ampliamente usada en ensambladores para reservar y definir Espacios de memoria

; Interrupt service vectors; Handles reset and external interrupt vectors INT0 and INT1

.org $0000rjmp Reset ; Reset vector (when the MCU is reset)

.org INT0addrrjmp IntV0 ; INT0 vector (ext. interrupt from pin PD2)

.org INT1addrrjmp IntV1 ; INT1 vector (ext. interrupt from pin PD3)

; - Rutina Reset vectorReset:

ldi TEMP,low(RAMEND) ; Set initial stack ptr location at ramendout SPL,TEMPldi TEMP, high(RAMEND)out SPH, TEMP......

Page 9: 4 Interrupt y IO ATMEL

Paso 2Configuración de las máscaras de interrupción

necesarias para habilitar la interrupción deseada

Para este paso es necesario configurar bits particulares del registroGIMSK (General Interrupt MaSK register)

00000000

RRRRRRR/WR/W

------INT0INT1

01234567bit

Read/write

Valor inicial

GIMSK

Estos dos a ‘1’

Page 10: 4 Interrupt y IO ATMEL

Paso 3Configuración del registro de control (MCUCR)

00000000

ISC00ISC01ISC10ISC11SMSESRWSRE

01234567bit

Valor inicial

MCUCR

Se deben tocar estos cuatro

Para este paso es necesario configurar bits particulares del registroMCUCR (General Control register) NOTA: MCUCR es acrónimo de MCU Control Register

Page 11: 4 Interrupt y IO ATMEL

Configuración de ISCxx

Nivel de bajada en el pin INTx genera interrupción11

Nivel de subida en el pin INTx genera interrupción01

Reservado10

Nivel bajo en el pin INTx genera interrupción00

DescripciónISCx0ISCx1

Si se desea que INT1 se active en flanco de subida e INT0 en nivel bajo, los cuatro bits deberán ser:

1 0 0 0

Page 12: 4 Interrupt y IO ATMEL

Paso 4Habilitación de interrupciones global (SREG)

Para este paso es necesario configurar bits particulares del registroSREG (Status register)

00000000

CZNVSHTI

01234567bit

Valor inicial

SREG

Se debe tocar este bit

I = 0 deshabilita TODAS las interrupciones(la instrucción SEI hace lo mismo)

I = 1 habilita las interrupciones

Page 13: 4 Interrupt y IO ATMEL

Funcionamiento del programaDespués de la inicialización vista el programa hará lo siguiente:

1. Un evento externo genera una INT0 en el pin PD22. Se ejecuta la instrucción de salto en el vector INT03. Se ejecuta la rutina asociada al vector4. En algún momento se ejecuta un RETI retornando

al programa principal

NOTAR QUE en los vectores de interrupciónlo que hay son instrucciones de salto alas direcciones de las rutinas correspondientes

Page 14: 4 Interrupt y IO ATMEL

Programa .ASM de ejemploHints importantes en un código ASM:

• Programando interrupciones de dispositivos

.include "m8def.inc"

.def Temp1 = r16

.def Temp2 = r17

.def Temp3 = r18

.def item = r19

.def nivel = r20

.def char = r21

.equ CLOCK = 8000000

.equ BAUD = 9600

.equ UBRRVAL = CLOCK/(BAUD*16)-1

Definición de símbolos

Parámetros de inicializaciónDel Usart

Un programa con 3 interrupciones: • La de reset (inicio del programa), • La interrupción externa INT0, que muestra un mensage y• El servicio de recepción de caracteres de la Usart (interrupción interna)

Page 15: 4 Interrupt y IO ATMEL

Programa .ASM de ejemploHints importantes en un código ASM:

• Programando interrupciones de dispositivos

.org 0x0000rjmp RESETrjmp INT0 rjmp Idlerjmp Idlerjmp Idle rjmp Idle rjmp Idle rjmp Idle rjmp Idle rjmp Idle rjmp Idle rjmp serialReceiverjmp Idle rjmp Idle rjmp Idle rjmp Idle rjmp Idlerjmp Idle rjmp Idle

Vector de la interrupción de reset

Vector de la interrupción de la Usartpor carácter recibido

Vector de la interrupción externa INT0

Page 16: 4 Interrupt y IO ATMEL

Programa .ASM de ejemploHints importantes en un código ASM:

• Programando interrupciones de dispositivos

serialReceive:push Temp1in Temp1, UDRmov char, Temp1rcall sendCharpop Temp1reti

INT0:ldi ZH,high(2*msgINT0)ldi ZL,low (2*msgINT0)rcall clearLcdldi char,0x03rcall printAtrcall loadBytereti

msgINT0:.db “INT0 activa",0

Servicio de interrupciónDe la Usart

Servicio de las demás interrupciones

Page 17: 4 Interrupt y IO ATMEL

Programa .ASM de ejemploHints importantes en un código ASM:

• Programando interrupciones de dispositivos; Aqui Comienza a ejecutar el procesador; --------------------------------------RESET:

; Inicializa el stack pointerldi Temp1, low(RAMEND)out SPL, Temp1ldi Temp1, high(RAMEND)out SPH, Temp1

;Inicializa la Uartldi Temp1, LOW(UBRRVAL)out UBRRL, Temp1ldi Temp1, HIGH(UBRRVAL)out UBRRH, Temp1; Formato: 8 Bitldi Temp1, 1<<URSEL)|(3<<UCSZ0)out UCSRC, Temp1sbi UCSRB, RXCIEsbi UCSRB, RXEN

Comienzo de la interrupción de reset

Carga el SP con el fin de RAM

Inicialización del dispositivoUsart

Page 18: 4 Interrupt y IO ATMEL

Programa .ASM de ejemploHints importantes en un código ASM:

• Programando interrupciones de dispositivos

;Inicializa PortD para irq int0ldi Temp1, 0x00out DDRD, Temp1ldi Temp1, 0b00000010out MCUCR, Temp1ldi Temp1, 0b01000000out GIMSK, Temp1

; Habilitar Interrupcionessei

;**********************************; Bucle Principal;**********************************final:

rjmp final

Puerto D seteado como input

Int 0 se activa en flancoAscendente de clock

Activa INT0

Habilita todas las interrupciones

Puesto que todo sucedeen las interrupcionesaca no se hace nada ySolo se itera

Page 19: 4 Interrupt y IO ATMEL

Puertos de entrada/salida

Los puertos de entrada/salida se mapean en la zona de memoriaa continuación del banco de registros y antes de la memoria de usogeneral

Tamaño variable según el modelo de microcontrolador dependiendo dela cantidad y tipo de dispositivos internos que posea

Diseño ortogonal:

Puertos

Registros de control y estado del MCU

Registros de flags del MCU

Registros de manejo de interrupciones externas

Registros de manejo de dispositivos internos

Registros de acceso a los puertos externos

Page 20: 4 Interrupt y IO ATMEL

Puertos E/S del ATmega8.equ SREG =$3f 63 ; status register.equ SPH =$3e 62 ; stack high.equ SPL =$3d 61 ; stack low

.equ GIMSK =$3b 59 ; general interrupt mask

.equ GIFR =$3a 58 ; general interrupt flag register

.equ TIMSK =$39 57 ; timer/counter interrupt mask register

.equ TIFR =$38 56 ; timer/counter interrupt flag register

.equ MCUCR =$35 53 ; MCU control register

.equ TCCR0 =$33 51 ; timer/counter0 control register

.equ TCNT0 =$32 50 ; timer/counter0

.equ TCCR1A =$2f 47 ; timer/counter1 control register A

.equ TCCR1B =$2e 46 ; timer/counter1 control register B

.equ TCNT1H =$2d 45 ; timer/counter1 high

.equ TCNT1L =$2c 44 ; timer/counter1 low

.equ OCR1AH =$2b 43 ; output compare register 1 A high

.equ OCR1AL =$2a 42 ; output compare register 1 A low

.equ OCR1BH =$29 41 ; output compare register 1 B high

.equ OCR1BL =$28 40 ; output compare register 1 B low

.equ ICR1H =$25 37 ; input capture register 1 high

.equ ICR1L =$24 36 ; input capture register 1 low

.equ WDTCR =$21 33 ; watch dog timer control

Flags y pila

INTs

Tim

er,

com

para

dor

y c

onta

dor

control

entrada

Watchdog

Page 21: 4 Interrupt y IO ATMEL

Puertos E/S del ATmega8.equ EEARH =$1f 31 ; eeprom address register high.equ EEARL =$1e 30 ; eeprom address register low.equ EEDR =$1d 29 ; eeprom data register.equ EECR =$1c 28 ; eeprom control register.equ PORTA =$1b 27 ; puerto A.equ DDRA =$1a 26 ; data direction register A.equ PINA =$19 25 ; pin A.equ PORTB =$18 24 ; puerto B.equ DDRB =$17 23 ; data direction register B.equ PINB =$16 22 ; pin B.equ PORTC =$15 21 ; puerto C.equ DDRC =$14 20 ; data direction register C.equ PINC =$13 19 ; pin C.equ PORTD =$12 18 ; puerto D.equ DDRD =$11 17 ; data direction register D.equ PIND =$10 16 ; pin D.equ SPDR =$0f 15 ; SPI data register.equ SPSR =$0e 14 ; SPI status register.equ SPCR =$0d 13 ; SPI control register.equ UDR =$0c 12 ; USART data register.equ USR =$0b 11 ; USART status register.equ UCR =$0a 10 ; USART control register.equ UBRR =$09 09 ; USART baud rate register.equ ACSR =$08 08 ; analog comp control and status register

Manejoeeprom

Puert

os d

e E

/S a

ccesib

les

por

pin

es

SPI

USART

Comp.

Page 22: 4 Interrupt y IO ATMEL

Pines de E/S• Accesibles vía cuatro puertos de 8 bits (A, B, C, D)

• Puertos configurables bit a bit como entrada, salida, pull-up o triestado

•Tres registros por cada puerto:

• PORT : valor de salida en modo escritura o habilitación de pull-upen modo lectura

• PIN: valor de entrada en modo lectura• DDR: selección de entrada o salida para cada pin

• 1 – salida• 0 - entrada

Page 23: 4 Interrupt y IO ATMEL

Puerto de E/S genérico