93. RETI – Return from Interrupt
93.1. Description
Returns from interrupt. The return address is loaded from the STACK and the Global Interrupt Flag is set.
Note that the Status Register is not automatically stored when entering an interrupt routine, and it is not
restored when returning from an interrupt routine. This must be handled by the application program. The
Stack Pointer uses a pre-increment scheme during RETI.
Operation: Comment:
(i) PC(15:0) ← STACK Devices with 16-bit PC, 128KB Program memory maximum.
(ii) PC(21:0) ← STACK Devices with 22-bit PC, 8MB Program memory maximum.
Syntax: Operands: Program Counter: Stack:
(i) RETI None See Operation SP ← SP + 2 (2 bytes,
16 bits)
(ii) RETI None See Operation SP ← SP + 3 (3 bytes,
22 bits)
16-bit Opcode:
1001 0101 0001 1000
93.2. Status Register (SREG) and Boolean Formula
I T H S V N Z C
1 – – – – – – –
I 1
The I Flag is set.
Example:
...
extint: push r0 ; Save r0 on the Stack
...
pop r0 ; Restore r0
reti ; Return and enable interrupts
Words 1 (2 bytes)
Cycles 4 devices with 16-bit PC
5 devices with 22-bit PC
Note: RETI behaves differently in megaAVR and AVR XMEGA devices. In the megaAVR series of
devices, the global interrupt flag is cleared by hardware once an interrupt occurs and this bit is set when
RETI is executed. In the AVR XMEGA devices, RETI will not modify the global interrupt flag in SREG
Atmel AVR Instruction Set Manual [OTHER]
Atmel-0856L-AVR-Instruction-Set-Manual_Other-11/2016
140