Vous êtes sur la page 1sur 15

Interrupt

Chapter 10

The AVR microcontroller


and embedded
systems
using assembly and c

AVR Microcontroller and Embedded System Using Assembly and C © 2011 Pearson Higher Education,
Mazidi, Naimi, and Naimi Upper Saddle River, NJ 07458. • All Rights Reserved.
Contents
 Polling Vs. interrupt
 Interrupt unit
 Steps in executing an interrupt
 Edge trigger Vs. Level trigger in external
interrupts
 Timer interrupt
 Interrupt priority
 Interrupt inside an interrupt
 Task switching and resource conflict

AVR Microcontroller and Embedded System Using Assembly and C: By: Mazidi, Naimi, and Naimi © 2011 Pearson Higher Education,
Edited by : Dr. Irfan-ud Din , Prof., INHA University in Tashkent. Upper Saddle River, NJ 07458. • All Rights Reserved.
Polling Vs. Interrupt
 Polling  Interrupt
 Ties down the CPU  Efficient CPU use
 Has priority
 Can be masked

while (true) main( )


{ {
if(PIND.2 == 0) Do your common task
//do something; }
}
whenever PIND.2 is 0 then
do something

AVR Microcontroller and Embedded System Using Assembly and C: By: Mazidi, Naimi, and Naimi © 2011 Pearson Higher Education,
Edited by : Dr. Irfan-ud Din , Prof., INHA University in Tashkent. Upper Saddle River, NJ 07458. • All Rights Reserved.
Interrupt unit

TIFR OCF2 TOV2 ICF1 OCF1A OCF1B TOV1 OCF0 TOV0

RAM EEPROM Timers


TIMSK
PROGRAM SREGOCIE2 ITOIE2 T TICIE1
H OCIE1A
S OCIE1B
V TOIE1
N Z OCIE0C TOIE0
ROM
GICR INT1 INT0 INT2 - - - IVSEL IVCE
Program
Bus Bus
CPU

SREG

TIMSK
GICR
Other
OSC Interrupt Ports
Peripherals
Unit

I/O
PINS
AVR Microcontroller and Embedded System Using Assembly and C: By: Mazidi, Naimi, and Naimi © 2011 Pearson Higher Education,
Edited by : Dr. Irfan-ud Din , Prof., INHA University in Tashkent. Upper Saddle River, NJ 07458. • All Rights Reserved.
Steps in executing an interrupt
Address Code
PB0 1 40 VCC .INCLUDE "M32DEF.INC"
PB1 2 39 PA0 (ADC0) .ORG 0 ;location for reset
0002 0000 JMP MAIN
(INT2) PB2 3 38 PA1 (ADC1)
0002 .ORG 0x02 ;location for external INT0
(OC0/AIN0) PB3 4 37 PA2 (ADC2)
0002 JMP EX0_ISR
(SS) PB4 5 ATmega32 36 PA3 (ADC3) 0004 MAIN: LDI R20,HIGH(RAMEND)
(MOSI) PB5 6 35 PA4 (ADC4) 0005 OUT SPH,R20
(MISO) PB6 7 34 PA5 (ADC5)
0006 LDI R20,LOW(RAMEND)
(SCK) PB7 8 PC: 0016
0015
0014
0013
0012
000D
0009
000A
000B
000C
0006
0008
000F
0004
000E
0007
0005
0000 33 PA6 (ADC6)
0007 OUT SPL,R20
0008 SBI DDRC,3 ;PC.3 = output
RESET 9 32 PA7 (ADC7) 0009 SBI PORTD,2 ;pull-up activated
VCC 10 31 AGND 000A LDI R20,1<<INT0 ;Enable INT0
GND 11 30 AVCC
000B OUT GICR,R20
000C SEI ;Set I (Enable Interrupts)
XTAL2 12 29 PC7 (TOSC2)
000D LDI R30, 3
XTAL1 13 28 PC6 (TOSC1) 000E LDI R31, 4
(RXD) PD0 14 27 PC5 (TDI) 000F ADD R30, R31
(TXD) PD1 15 SP 26 PC4 (TDO)
0010 HERE:JMP HERE
(INT0) PD2 16 25 PC3 (TMS)
0012 EX0_ISR:IN R21,PORTC
(INT1) PD3 17 24 PC2 (TCK) 0013 LDI R22,0x08
0014
(OC1B) PD4 18 Stack 23 PC1 (SDA)
0015
EOR
OUT
R21,R22
PORTC,R21
(OC1A) PD5 19 22 PC0 (SCL)
0016 RETI
(ICP) PD6 20 21 PD7 (OC2)

AVR Microcontroller and Embedded System Using Assembly and C: By: Mazidi, Naimi, and Naimi © 2011 Pearson Higher Education,
Edited by : Dr. Irfan-ud Din , Prof., INHA University in Tashkent. Upper Saddle River, NJ 07458. • All Rights Reserved.
Edge trigger Vs. Level trigger in external interrupts
MCUCR SE SM2 SM1 SM0 ISC11 ISC10 ISC01 ISC00

LDI R20,0x02 ;falling


OUT MCUCR,R20

AVR Microcontroller and Embedded System Using Assembly and C: By: Mazidi, Naimi, and Naimi © 2011 Pearson Higher Education,
Edited by : Dr. Irfan-ud Din , Prof., INHA University in Tashkent. Upper Saddle River, NJ 07458. • All Rights Reserved.
Edge trigger Vs. Level trigger (Cont.)
MCUCSR JTD ISC2 - JTRF WDRF BORF EXTRF PORF

AVR Microcontroller and Embedded System Using Assembly and C: By: Mazidi, Naimi, and Naimi © 2011 Pearson Higher Education,
Edited by : Dr. Irfan-ud Din , Prof., INHA University in Tashkent. Upper Saddle River, NJ 07458. • All Rights Reserved.
Using Timer0 overflow interrupt
ATmega32

 This program uses Timer0 to generate a +5


PORTB.5

square wave on pin PORTB.5, while at the


same time data is being transferred from 8
PORTD PORTC
8

PORTC to PORTD.

1 ;Program 10-1 18 int.


Timer LDI R20,(1<<TOIE0)
2 .INCLUDE "M32DEF.INC" 19
init. OUT TIMSK,R20
3 .ORG 0x0 ;location for reset 20 SEI
4 JMP MAIN 21 LDI R20,-32 ;value for 4µs
5 .ORG 0x16 ;loc. for Timer0 over. 22 OUT TCNT0,R20
Timer
23 init.
6 JMP T0_OV_ISR LDI R20,0x01
7 ;----main program for initialization 24 OUT TCCR0,R20
8 .ORG 0x100 25 HERE: IN R20,PINC
9 MAIN: LDI R20,HIGH(RAMEND) 26 OUT PORTD,R20
10 OUT SPH,R20 27 JMP HERE
11 LDI R20,LOW(RAMEND) 28 ;--------ISR for Timer 0
12 OUT SPL,R20 29 T0_OV_ISR:
13 SBI DDRB,5 ;output 30 IN R16,PORTB
14 LDI R20,0 31 LDI R17,0x20
15 OUT DDRC, R20 32 EOR R16,R17
16 LDI R20,0xFF 33 OUT PORTB,R16
17 OUT DDRD, R20 34 RETI
AVR Microcontroller and Embedded System Using Assembly and C: By: Mazidi, Naimi, and Naimi © 2011 Pearson Higher Education,
Edited by : Dr. Irfan-ud Din , Prof., INHA University in Tashkent. Upper Saddle River, NJ 07458. • All Rights Reserved.
Timer0 compare match interrupt
 using Timer0 and CTC mode generate a square wave on pin PORTB.5, while at the
same time data is being transferred from PORTC to PORTD.
.INCLUDE "M32DEF.INC"
.ORG 0x0 ;location for reset
JMP MAIN
.ORG 0x14 ;location for Timer0 compare match
JMP T0_CM_ISR
;-main program for initialization and keeping CPU busy
.ORG 0x100
MAIN: LDI R20,HIGH(RAMEND)
Time (µS)
OUT SPH,R20
LDI R20,LOW(RAMEND)
OUT SPL,R20
HERE: IN R20,PINC
LDI R20,39
OUT PORTD,R20
Timer init. OUT OCR0,R20 ;OCR0 = 39
JMP HERE
LDI R20,0x09
;--------ISR for Timer 0
OUT TCCR0,R20 ;Start Timer0
T0_CM_ISR:
SBI DDRB,5 ;PB5 as an output
IN R16,PORTB
LDI R20,(1<<OCIE0) ;Timer0 compare match
Timer int. LDI R17,0x20
OUT TIMSK,R20
init. EOR R16,R17
SEI ;Set I
OUT PORTB,R16
LDI R20,0x00
RETI
OUT DDRC,R20 ;make PORTC input
LDI R20,0xFF
OUT
AVR Microcontroller and EmbeddedDDRD,R20
System Using Assembly;make
and C: By:PORTD output
Mazidi, Naimi, and Naimi © 2011 Pearson Higher Education,
Edited by : Dr. Irfan-ud Din , Prof., INHA University in Tashkent. Upper Saddle River, NJ 07458. • All Rights Reserved.
Interrupt priority
Highest
priority

Lowest
priority
AVR Microcontroller and Embedded System Using Assembly and C: By: Mazidi, Naimi, and Naimi © 2011 Pearson Higher Education,
Edited by : Dr. Irfan-ud Din , Prof., INHA University in Tashkent. Upper Saddle River, NJ 07458. • All Rights Reserved.
Interrupt inside an interrupt
 The I flag is cleared when the AVR begins
to execute an ISR. So, interrupts are
disabled.
 The I flag is set when RETI is executed.

AVR Microcontroller and Embedded System Using Assembly and C: By: Mazidi, Naimi, and Naimi © 2011 Pearson Higher Education,
Edited by : Dr. Irfan-ud Din , Prof., INHA University in Tashkent. Upper Saddle River, NJ 07458. • All Rights Reserved.
Task switching and resource conflict
 Does the following program work?

1 .INCLUDE "M32DEF.INC" 17 LDI R20,(1<<OCIE0)


2 .ORG 0x0 ;location for reset 18 OUT TIMSK,R20
3 JMP MAIN 19 SEI
4 .ORG 0x14 ;Timer0 compare match 20 LDI R20,0xFF
5 JMP T0_CM_ISR 21 OUT DDRC,R20
6 ;---------main program------------------------------ 22 OUT DDRD,R20
7 .ORG 0x100 23 LDI R20, 0
8 MAIN: LDI R20,HIGH(RAMEND) 24 HERE: OUT PORTC,R20
9 OUT SPH,R20 25 INC R20
10 LDI R20,LOW(RAMEND) 26 JMP HERE
11 OUT SPL,R20 ;set up stack 27 ;--------------------------ISR for Timer0
12 SBI DDRB,5 ;PB5 = output 28 T0_CM_ISR:
13 LDI R20,160 29 IN R20,PIND
14 OUT OCR0,R20 30 INC R20
15 LDI R20,0x09 31 OUT PORTD,R20
16 OUT TCCR0,R20 32 RETI

AVR Microcontroller and Embedded System Using Assembly and C: By: Mazidi, Naimi, and Naimi © 2011 Pearson Higher Education,
Edited by : Dr. Irfan-ud Din , Prof., INHA University in Tashkent. Upper Saddle River, NJ 07458. • All Rights Reserved.
Solution 1: different registers
 Use different registers for different tasks.

1 .INCLUDE "M32DEF.INC" 17 LDI R20,(1<<OCIE0)


2 .ORG 0x0 ;location for reset 18 OUT TIMSK,R20
3 JMP MAIN 19 SEI
4 .ORG 0x14 ;Timer0 compare match 20 LDI R20,0xFF
5 JMP T0_CM_ISR 21 OUT DDRC,R20
6 ;---------main program------------------------------ 22 OUT DDRD,R20
7 .ORG 0x100 23 LDI R20, 0
8 MAIN: LDI R20,HIGH(RAMEND) 24 HERE: OUT PORTC,R20
9 OUT SPH,R20 25 INC R20
10 LDI R20,LOW(RAMEND) 26 JMP HERE
11 OUT SPL,R20 ;set up stack 27 ;--------------------------ISR for Timer0
12 SBI DDRB,5 ;PB5 = output 28 T0_CM_ISR:
13 LDI R20,160 29 IN R21,PIND
14 OUT OCR0,R20 30 INC R21
15 LDI R20,0x09 31 OUT PORTD,R21
16 OUT TCCR0,R20 32 RETI

AVR Microcontroller and Embedded System Using Assembly and C: By: Mazidi, Naimi, and Naimi © 2011 Pearson Higher Education,
Edited by : Dr. Irfan-ud Din , Prof., INHA University in Tashkent. Upper Saddle River, NJ 07458. • All Rights Reserved.
Solution 2: Context saving
 Save the contents of registers on the stack before
execution of each task, and reload the registers at the
end of the task.
1 .INCLUDE "M32DEF.INC" 18 OUT TIMSK,R20
2 .ORG 0x0 ;location for reset 19 SEI
3 JMP MAIN 20 LDI R20,0xFF
4 .ORG 0x14 ;Timer0 compare match 21 OUT DDRC,R20
5 JMP T0_CM_ISR 22 OUT DDRD,R20
6 ;---------main program------------------------------ 23 LDI R20, 0
7 .ORG 0x100 24 HERE: OUT PORTC,R20
8 MAIN: LDI R20,HIGH(RAMEND) 25 INC R20
9 OUT SPH,R20 26 JMP HERE
10 LDI R20,LOW(RAMEND) 27 ;--------------------------ISR for Timer0
11 OUT SPL,R20 ;set up stack 28 T0_CM_ISR:
12 SBI DDRB,5 ;PB5 = output 29 PUSH R20 ;save R20
13 LDI R20,160 30 IN R20,PIND
14 OUT OCR0,R20 31 INC R20
15 LDI R20,0x09 32 OUT PORTD,R20
16 OUT TCCR0,R20 33 POP R20 ;restore R20
17 LDI R20,(1<<OCIE0) 34 RETI
AVR Microcontroller and Embedded System Using Assembly and C: By: Mazidi, Naimi, and Naimi © 2011 Pearson Higher Education,
Edited by : Dr. Irfan-ud Din , Prof., INHA University in Tashkent. Upper Saddle River, NJ 07458. • All Rights Reserved.
Saving SREG
 We should save SREG, when we change
flags in the ISR.

PUSH R20
IN R20,SREG
PUSH R20
...
POP R20
OUT SREG,R20
POP R20

AVR Microcontroller and Embedded System Using Assembly and C: By: Mazidi, Naimi, and Naimi © 2011 Pearson Higher Education,
Edited by : Dr. Irfan-ud Din , Prof., INHA University in Tashkent. Upper Saddle River, NJ 07458. • All Rights Reserved.

Vous aimerez peut-être aussi