Avr Core
Avr Core
Description
The AVR Embedded RISC Microcontroller Core is a low-power CMOS 8-bit microprocessor based on the AVR enhanced RISC architecture. By executing powerful instructions in a single clock cycle, it achieves throughputs approaching 1 MIPS per MHz allowing the system designer to optimize power consumption versus processing speed. The AVR Core is based on an enhanced RISC architecture that combines a rich instruction set with the 32 general purpose working registers. Each of the 32 registers are directly connected to the Arithmetic Logic Unit (ALU), allowing two independent registers to be accessed in one single instruction executed in one clock cycle. The resulting architecture is more code efficient while achieving throughputs up to ten times faster than conventional CISC microcontrollers. The architecture supports high level languages efficiently as well as extremely dense assembler code programs. It also provides any number of external and internal interrupts. The AVR Core is provided in an encrypted netlist format with Verilog and VHDL simulation models, a fully functional test bench and ATPG vectors for >99% fault coverage. It is supported with a full suite of program and system development tools including: macro assemblers, ANSI C Compilers, program debugger/simulators, and in-circuit emulator.
Rev. 0890A02/99
I/O Configuration
Figure 1. AVR Core I/O Configuration
coreso Scan Test coresi corese Clock cp2 pc inst adr iore iowe ramre ramwe Data Memory ramadr
dbusout dbusin
astacp2 astamode astase astasi astaso ireset cpuwait leavbus lbit12 irqlines irqack irqackad sleepi irqok globint pclden pcld ASTA Test
Program Memory
I/O Registers
AVR CORE
Control
Interrupt
Sleep Control
Watchdog
wdri
Memory Programming
AVR Core
AVR Core
I/O Description
Table 1. I/O Description Name Input/ Output Function Clock Port cp2 Clock Input Any register in the core will update its contents only on the positive edge of cp2. Control Ports When high, ireset causes the core to reset the program counter pc, the status register SREG, and the stack pointer, loading all with zeros ($0000). When ireset is high and leavbus is inactive, zero ($00) is driven on the Data Bus dbusout, and the I/O Write Strobe iowe is held high while the I/O Read Strobe and the Data Memory Strobes (ramre, ramwe) are held low. This allows I/O registers to be reset by reading zero from the Bus. This signal is used to add wait cycles to allow slow memory accesses. When cpuwait is high, the core repeats the current cycle (only for instructions addressing the RAM space such as ld or st). When cpuwait is released, the cycle is executed as normal. For details, refer to the timing diagrams below. This signal is used to control dbusout externally. When high, dbusin is connected directly to dbusout, and all I/O and Data Memory Strobes are held low. Disables lpm and elpm instructions. Program Memory Ports pc [15:0] Program Counter inst [15:0] Program Memory data bus Output Program Memory always returns the instruction stored at the address pointed to. The size of this port determines the program memory size. Instruction from Program Memory is presented to the core, selected by the address on pc address bus. I/O Registers adr [5:0] I/O Register address bus iore I/O Registers read strobe iowe I/O Registers write strobe Output Valid only when accompanied by a strobe on iore or iowe lines. Used only with the 64 I/O memory locations. These locations can be mapped into the regular Data Memory Address Space. The core will then issue an iore or ramre read strobe based on target address. Used only with the 64 I/O memory locations. These locations can be mapped into the regular Data Memory Address Space. The core will then issue an iowe or ramwe read strobe based on target address. Data Memory Ports ramadr [15:0] Data Memory address bus ramre Data Memory read strobe Output Valid only when accompanied by a strobe on ramre or ramwe lines. Used to address the SRAM memory locations. The core will issue an iore or ramre read strobe based on target address.
Input
Input
leavbus leave dbusout lbit12 Logical and between Lock bit 1 and 2
Input
Input
Input
Output
Output
Output
Table 1. I/O Description (Continued) Name ramwe Data Memory write strobe dbusin [7:0] Data Bus Input dbusout [7:0] Data Bus Output Input/ Output Output Input Output Function Used to address the SRAM memory locations. The core will issue an iore or ramre read strobe based on target address. All data transfers use dbusin or dbusout to transfer data into or out of the core. Memory locations are selected by the address on ramadr (Data Memory Address). I/O Register locations are selected by the address on adr. Interrupt Ports irqlines [6:0] Interrupt Request Lines Each interrupt source drives its own dedicated IRQ line into the Core. When the global interrupt bit is enabled, a high level (one) on any interrupt line will push the current pc on the stack. The associated interrupt handler vector address is put in the Program Counter pc before execution is restarted. irqack will go high (one) for one clock cycle to acknowledge the interrupt being executed. This is often used as input to interrupt flags designed to clear when their corresponding interrupt handler is executed. The irqackad lines identify which interrupt is being executed during the same cycle. The address of the interrupt being executed. The address is valid only if the irqack signal is set (one). Sleep Controller Ports sleepi Sleep instruction irqok Interrupt Request OK globint Global interrupts enabled Output Set while executing the sleep instruction. This should cause the sleep controller to stop the clock to the core if sleep mode has been enabled. When in sleep mode (clock stopped), this signal will tell the sleep controller that an interrupt exists which should cause the clock to restart. The sleep controller should start the core clock as soon as possible. This is the current state of the I bit in the Core State Register. This signal is used to qualify wake-up from power-down by external interrupts. Memory Programming Ports pclden enable pc load pcld [1:0] Load Program Counter Input Input Enable pc load with pcld signals. Load Program Counter pc from dbusin if pclden is active. pcld [1] load high byte, pcld [0] load low byte. Watchdog Port wdri Watchdog reset instruction Output Set while executing the wdi (watchdog reset) instruction. Scan Test Ports corese coresi [2:0]
(1)
Input
Output
Output
Output
Output
Core Test Scan Enable Core Test Scan Inputs Core Test Scan Outputs
coreso [2:0](1)
AVR Core
AVR Core
Table 1. I/O Description (Continued) Name Input/ Output Function ASTA Test Ports astacp2 ASTA clock astamode [1:0](1) astase [8:0](1) astasi [8:0](1) astaso [8:0]
Note:
(1)
Any register in the ASTA interface will update its contents only on the positive edge of astacp2. ASTA mode inputs used to swap between ASTA mode or normal function mode. ASTA Test Scan Enables ASTA Test Scan Inputs ASTA Test Scan Outputs
AVR CORE
UART
ADC/DAC
ALU
Status Register
Analog Comparators
Systemspecific Logic
Watchdog Timer
Interrupt Controller
Timer Counters
The AVR core is based on a Harvard architecture with separate memories and buses for program and data (Figure 2). The memory spaces in the AVR architecture are all linear and regular memory maps. 5
$ FFFF
The central AVR architectural element is a fast-access register file containing 32 x 8-bit general purpose registers with a single clock cycle access time. This means that during one clock cycle, one ALU operation is executed. Two operands are accessed from the register file, the operation is executed, and the result is stored back in the register file - in one clock cycle. The ALU supports arithmetic and logic functions between registers or between a constant and a register, as well as single register operations. The program memory can be implemented in ROM or Flash memory. It is accessed with a single level of pipelining. While one instruction is being executed, the next instruction is pre-fetched from the program memory. This enables instructions to be executed in every clock cycle. All AVR instructions have a single 16-bit word format, meaning that every program memory address contains a single instruction. During interrupts and subroutine calls, the return address is stored on a software stack. The 8-bit data memory (Figure 3) has 16-bit direct addressing. This gives a potential memory space of 64K bytes. The data memory address space includes the register file, and a 64-address I/O memory space for peripheral functions such as control registers, timer-counters and A/D converters. As shown in Figure 3, the I/O memory space is automatically re-mapped for access by the register file.
AVR Core
AVR Core
The General Purpose Register File
The figure below shows the structure of the 32 general purpose working registers in the CPU. Figure 4. AVR CPU General Purpose Working Registers
7 R0 R1 R2 R13 General Purpose Working Registers R14 R15 R16 R17 R26 R27 R28 R29 R30 R31 $1A $1B $1C $1D $1E $1F X-register low byte X-register high byte Y-register low byte Y-register high byte Z-register low byte Z-register high byte $0D $0E $0F $10 $11 0 Addr. $00 $01 $02
All the register operating instructions in the instruction set have direct and single cycle access to all registers. The only exception is the five constant arithmetic and logic instructions SBCI, SUBI, CPI, ANDI and ORI between a constant and a register and the LDI instruction for load immediate constant data. These instructions apply to the second half of the registers in the register file - R16 to R31. The general SBC, SUB, CP, AND and OR and all other operations between two registers or on a single register apply to the entire register file. As shown in Figure 4, each register is also assigned a data memory address, mapping them directly into the first 32 locations of the user Data Space. Although not being physically implemented as SRAM locations, this memory organization provides great flexibility in access of the registers, as the X,Y and Z registers can be set to index any register in the file. THE X-REGISTER, Y-REGISTER AND Z-REGISTER The registers R26 to R31 have some added functions to their general purpose usage. These registers are address pointers for indirect addressing of the Data Space. The three indirect address registers X, Y and Z are defined as: Figure 5. The X, Y and Z Registers
15 X - register 7 R27 ($1B) 0 7 R26 ($1A) 0 0
0 0
0 0
In the different addressing modes these address registers have functions as fixed displacement, automatic increment and decrement (see the descriptions for the different instructions).
$FFFF
The first 96 locations address the Register File + I/O Memory, and the next locations address the external data memory. The five different addressing modes for the data memory cover: Direct, Indirect with Displacement, Indirect, Indirect with Pre-Decrement and Indirect with Post-Increment. In the register file, registers R26 to R31 feature the indirect addressing pointer registers. The direct addressing reaches the entire data space.
AVR Core
AVR Core
The Indirect with Displacement mode features a 63 address location reach from the base address given by the Y or Z-register. When using register indirect addressing modes with automatic pre-decrement or post-increment, the address registers X, Y and Z are decremented or incremented. The 32 general purpose working registers, 64 I/O registers and the 64K bytes of external data SRAM in the AVR Core are all accessible through all these addressing modes. See the next section for a detailed description of the different addressing modes.
The operand is contained in register d (Rd). REGISTER DIRECT, TWO REGISTERS RD AND RR Figure 8. Direct Register Addressing, Two Registers
The operands are contained in registers r (Rr) and d (Rd). The result is stored in register d (Rd).
The operand address is contained in 6 bits of the instruction word. n is the destination or source register address. DATA DIRECT Figure 10. Direct Data Addressing
A 16-bit Data Address is contained in the 16 LSBs of a two-word instruction. Rd/Rr specify the destination or source register. DATA INDIRECT WITH DISPLACEMENT Figure 11. Data Indirect with Displacement
The operand address is the result of the Y or Z-register contents added to the displacement contained in 6 bits of the instruction word.
10
AVR Core
AVR Core
DATA INDIRECT Figure 12. Data Indirect Addressing
The operand address is the contents of the X, Y or the Z-register. DATA INDIRECT WITH PRE-DECREMENT Figure 13. Data Indirect Addressing With Pre-Decrement
The X, Y or the Z-register is decremented before the operation. The operand address is the decremented contents of the X, Y or the Z-register. DATA INDIRECT WITH POST-INCREMENT Figure 14. Data Indirect Addressing With Post-Increment
The X, Y or the Z-register is incremented after the operation. The operand address is the content of the X, Y or the Z-register prior to incrementing.
11
CONSTANT ADDRESSING USING THE LPM INSTRUCTION Figure 15. Code Memory Constant Addressing
Constant byte address is specified by the Z-register contents. The 15 MSBs select the word address (0 - 32K) and the LSB selects low byte if cleared (LSB = 0) or high byte if set (LSB = 1). If ELPM is used, LSB of the RAM Page Z register RAMPZ is used to select low or high memory page (RAMPZ0 = 0: Low Page, RAMPZ0 = 1: High Page). DIRECT PROGRAM ADDRESS, JMP AND CALL Figure 16. Direct Program Memory Addressing
31 OP 16 LSBs 15 0 21 20 6 MSBs 16
Program execution continues at the address immediate in the instruction words. INDIRECT PROGRAM ADDRESSING, IJMP AND ICALL Figure 17. Indirect Program Memory Addressing
Program execution continues at address contained by the Z-register (i.e. the pc is loaded with the contents of the Z-register).
12
AVR Core
AVR Core
RELATIVE PROGRAM ADDRESSING, RJMP AND RCALL Figure 18. Relative Program Memory Addressing
13
MUX
from I/Os
DO
cp2 dbusout
Figure 20. AVR SRAM Memory Read, using 'ld' or lds instruction.
cp2
ramre
ramadr
valid
dbusin Id cycle 1
14
AVR Core
AVR Core
Figure 21. AVR SRAM Memory Read, using 'ld' or lds instruction with one wait state.
cp2
cpuwait
ramre
ramadr
valid
valid
X Id cycle 2
cp2
ramwe
ramadr
valid
dbusout
valid st cycle 1
Note:
Not valid when the source register is subject to post-incrementation or pre-decrementation, i.e. the instructions st-Z/Z+, r30/r31, st-Y/Y+, r28/r29, st-X/X+, r26/r27.
15
Figure 23. AVR SRAM Memory Write, using st or sts instruction with one wait cycle.
cp2
cpuwait
ramwe
ramadr
valid
valid
dbusout
valid st cycle 1
valid 1 st cycle 2
Note:
Not valid when the source register is subject to post-incrementation or pre-decrementation, i.e. the instructions st-Z/Z+, r30/r31, st-Y/Y+, r28/r29, st-X/X+, r26/r27.
Stack Access
Figure 24. Pushing Program Counter to SRAM Stack with 'rcall/icall instruction.
cp2
ramwe
ramadr
Stack Address
Stack Address -1
dbusout
PC low byte
PC high byte
pc
valid
inst
X rcall/icall/eicall cycle 1
valid
valid
next instruction
16
AVR Core
AVR Core
Figure 25. Popping Program Counter from SRAM Stack with 'ret/reti instruction.
cp2
ramre
ramadr
Stack Address
Stack Address -1
dbusin
PC high byte
PC low byte
pc
X ret/reti cycle 2
cp2
ramwe
ramadr
valid
17
Figure 27. Popping to Register from SRAM Stack with 'pop instruction.
cp2
ramre
ramadr
valid
I/O Memory
The I/O space definition of the AVR Core is shown in the following table: Table 2. AVR Core I/O Space
Address Hex $3F ($5F) $3E ($5E) $3D ($5D) $3C ($5C) $3B ($5B) $3A ($5A) $39 ($39) $38 ($58) $37 ($57) ... $00 ($20) Note: User specific I/O registers Reserved for next AVR Core generation Name SREG SPH SPL RAMPZ Function Status Register Stack Pointer High Stack Pointer Low Reserved for next AVR Core generation RAMPZ Register
In parentheses is the SRAM address as the registers can also be addressed as ordinary SRAM locations within the address space $20 - $5F as described in I/O Registers below.
Unused locations are not shown in the table
Note:
I/O Registers
All the peripheral status, control and data registers can be accessed by making them addressable in the I/O space by connecting adr, iore and iowe signals. The different I/O locations are directly accessed by the IN and OUT instructions transferring data between the 32 general purpose working registers and the I/O space. When using IN and OUT (SBIS and SBIC), the I/O register address $00 - $3F must be used. As the I/O registers are also represented in the SRAM address space, they can also be addressed as ordinary SRAM locations using ld/lds and st/sts instructions within the address space $20 - $5F. The SRAM address is obtained by adding $20 to the direct I/O address. The SRAM address is given in parentheses after the I/O direct address throughout this document. I/O registers within the address range $00 ($20) - $1F ($3F) are directly bit-accessible using the SBI and CBI instructions. In these registers, the value of single bits can be checked by using the SBIS and SBIC instructions. Refer to the instruction set chapter for more details. The different I/O and peripherals control registers are explained in the following sections.
18
AVR Core
AVR Core
Status Register
The core register most commonly read and written by software is the Status Register (SREG). This register is updated on all arithmetic and logical instructions, and is also supported by special instructions in the instruction set. Software can also access this register to store or manipulate register contents directly. The AVR status register - SREG - at I/O space location $3F is defined as:
Bit $3F ($5F) Read/Write Initial value 7 I R/W 0 6 T R/W 0 5 H R/W 0 4 S R/W 0 3 V R/W 0 2 N R/W 0 1 Z R/W 0 0 C R/W 0 SREG
Bit 7 - I: Global Interrupt Enable: The global interrupt enable bit must be set (one) for the interrupts to be enabled. The individual interrupt enable control must be performed externally. If the global interrupt enable bit is cleared (zero), none of the interrupts are enabled, independent of the external individual enable values. The I-bit is cleared by hardware after an interrupt has occurred, and is set by the RETI instruction to enable subsequent interrupts. Bit 6 - T: Bit Copy Storage: The bit copy instructions BLD (Bit LoaD) and BST (Bit STore) use the T bit as source and destination for the operated bit. A bit from a register in the register file can be copied into T by the BST instruction, and a bit in T can be copied into a bit in a register in the register file by the BLD instruction. Bit 5 - H: Half Carry Flag: The half carry flag H indicates a half carry in some arithmetic operations. See the Instruction Set Description for detailed information. Bit 4 - S: Sign Bit, S = N V: The S-bit is always an exclusive or between the negative flag N and the twos complement overflow flag V. See the Instruction Set Description for detailed information. Bit 3 - V: Twos Complement Overflow Flag: The twos complement overflow flag V supports twos complement arithmetics. See the Instruction Set Description for detailed information. Bit 2 - N: Negative Flag: The negative flag N indicates a negative result after the different arithmetic and logic operations. See the Instruction Set Description for detailed information. Bit 1 - Z: Zero Flag: The zero flag Z indicates a zero result after the different arithmetic and logic operations. See the Instruction Set Description for detailed information. Bit 0 - C: Carry Flag: The carry flag C indicates a carry in an arithmetic or logic operation. See the Instruction Set Description for detailed information.
19
The Stack Pointer points to the data SRAM stack area where the Subroutine and Interrupt Stacks are located. This Stack space in the data SRAM must be defined by the program before any subroutine calls are executed or interrupts are enabled. The Stack Pointer is decremented by one when data is pushed onto the Stack with the PUSH instruction, and it is decremented by two when data is pushed onto the Stack with subroutine CALL and interrupt. The Stack Pointer is incremented by one when data is popped from the Stack with the POP instruction, and it is incremented by two when data is popped from the Stack with return from subroutine RET or return from interrupt RETI. Extended Memory Pointer Registers - RAMPZ The AVR architecture supports four pointers, X-, Y-, Z-, and Stack-Pointer. On systems with more than 64K bytes of program memory, the Z-pointer will not reach the whole memory space with the 16 bits located in the General Purpose Register File. For the Z-pointer to reach the entire memory area, the remaining bit is read and written by software through I/O, through the register RAMPZ.
Bit $3B ($5B) Read/Write Initial value 7
-
6
-
5
-
4
-
3
-
2
-
1
-
0
RAMPZ0
RAMPZ
R/W 0
R/W 0
R/W 0
R/W 0
R/W 0
R/W 0
R/W 0
R/W 0
The RAMPZ register is normally used to select which 64K RAM Page is accessed by the Z pointer. As the AVR Core does not support more than 64K of SRAM memory, this register is used only to select which page in the program memory is accessed when the elpm instruction is used. The different settings of the RAMPZ0 bit have the following effects. RAMPZ0 = 0: Program memory address $0000 - $7FFF (lower 64K bytes) is accessed by elpm. RAMPZ0 = 1: Program memory address $8000 - $FFFF (upper 64K bytes) is accessed by elpm.
20
AVR Core
AVR Core
I/O Memory Access
I/O registers can be accessed in a single clock cycle. During this clock cycle, the core will issue a 6-bit address on adr, and either an iore or an iowe. While iore is high and adr matches the address of the register, the I/O register should drive its contents onto dbusin. When iowe is high and adr matches the address of the register, the register should update its contents only if this occurs on a rising edge of cp2. Figure 28. A typical I/O Register Construction. Write is synchronous, read is combinatorial.
iore adr[5:0]
Address Decode
cp2 dbusout
Figure 29. AVR I/O Register Read, using 'in' instruction. dbusin is driven by I/O Register.
cp2
iore
adr
valid
dbusin in
21
Figure 30. AVR I/O Register Write, using out instruction. dbusout is driven by AVR Core.
cp2
iowe
adr
valid
dbusout out
As the I/O registers are also represented in the SRAM address space, I/O registers are accessible by regular memory access instructions ld/ldd/lds and st/std/sts. The access will appear like any other memory access, but the address will be presented on adr and mapped from the address range 0x20-0x5F used in SRAM, down to the 0x00-0x3F recognized by the I/O registers. This operation is performed automatically by the core. Figure 31. AVR I/O Register Read, using 'ld' instruction. dbusin is driven by I/O Register.
cp2
iore
adr
valid
dbusin Id cycle 1
cp2
iowe
adr
valid
dbusout Id cycle 1
22
AVR Core
AVR Core
Reset and Interrupt Handling
The AVR Core provides 7 different interrupt sources. These interrupts and the separate reset vector each have a separate program vector in the program memory space. All interrupts are enabled by the I-bit in the status register. The lowest addresses in the program memory space are automatically defined as the Reset and Interrupt vectors. The complete list of vectors is shown in . The list also determines the priority levels of the different interrupts. The lower the address, the higher the priority level. ireset has the highest priority, and next are irqlines[0] to irqlines[6]. Table 3. Reset and Interrupt Vectors
Vector No. 1 2 3 4 5 6 7 8 Program Address $000 $002 $004 $006 $008 $00A $00C $00E Source ireset irqlines[0] irqlines[1] irqlines[2] irqlines[3] irqlines[4] irqlines[5] irqlines[6] Interrupt Definition Internal Reset Interrupt Request Line 0 Interrupt Request Line 1 Interrupt Request Line 2 Interrupt Request Line 3 Interrupt Request Line 4 Interrupt Request Line 5 Interrupt Request Line 6
The most typical and general program setup for the Reset and Interrupt Vector Addresses are:
Address $000 $001 $002 $004 $006 $007 $008 $009 $00A $00B $00C $00E ; $010 RESET: <instr> xxx ; Main program start Labels Code rjmp nop jmp jmp rjmp nop rjmp nop rjmp nop jmp jmp INT5 INT6 ; IRQ5 Handle ; IRQ6 Handle INT4 ; IRQ4 Handle INT3 ; IRQ3 Handle INT0 INT1 INT2 RESET Comments ; Reset Handle ; ; IRQ0 Handle ; IRQ1 Handle ; IRQ2 Handle
23
Reset
The ireset line controls the reset of the AVR Core. To properly reset the AVR, a three cycle pulse must be applied to the ireset input. After this, the program counter is reset to 0000 and the AVR Core is ready. Note: Setup and hold times must be respected on the ireset line (see timing diagrams).
Interrupts
None of the irqlines are latched in the AVR Core. For this reason, it is necessary to maintain the irqlines[6:0] signals until the corresponding acknowledgment. The figure below shows the interrupt acknowledgment schemes. Figure 33. Interrupt arriving in last cycle of instruction
cycle 0 CP2 cycle 1 cycle 2 cycle 3
ramadr
stack address
stack address-1
Drive PC to dbusout
high byte
low byte
ramwe
irqackad
irqack
Next PC valid
valid
24
AVR Core
AVR Core
Figure 34. Interrupt arriving in cycle other than last
cycle -X CP2 cycle 0 cycle 1 cycle 2 cycle 3
last cycle
ramadr
stack address
stack address-1
Drive PC to dbusout
high byte
low byte
ramwe
irqackad
irqack
Next PC valid
valid
25
AVR
astaso[8] Functional
YP
TE
AVRCORE
YP
EN
YP
Functional Inputs
TE
EN
astasi[3]
EN
TE
YP
TE
Outputs astasi[8]
Functional Outputs
EN
TE
YP
TE
YP
TE
YP
EN
EN
EN
astasi[4]
26
AVR Core
AVR Core
ASTA Signals
The signals which control the ASTA interface are described below. Table 4. ASTA Signals
Signal astacp2 astamode[1:0] astamode[0] = 0 Description Clock for all ASTA flip-flops ASTA mode select for inputs (astamode[0]) and outputs (astamode[1]) Functional Mode and External Capture Mode The ASTA input interface is transparent. This implies that the device is in Functional Mode. Nevertheless, the ASTA scan chains can capture all AVR input signals. Internal Control Mode The ASTA input interface is controlled by ASTA scan chains. The ASTA interface can control all AVR input signals. Functional Mode and Internal Capture Mode The ASTA output interface is transparent. This implies that the device is in Functional Mode. Nevertheless, the ASTA scan chains can capture all AVR output signals. External Control Mode The ASTA output interface is controlled by ASTA scan chains. The ASTA interface can control all AVR output signals. ASTA scan inputs ASTA scan outputs ASTA scan enables
astamode[0] = 1
astamode[1] = 0
In all scan chains LSB is scanned in first and MSB scanned out first.
27
0 To AVRCORE Input SO D Q 1
astase[X]
SE
astacp2
SI astamode[0]
The following signals control the ASTA scan input cell: Table 6. ASTA Scan Input Cell
Signal astacp2 astase[X] astamode[0] astamode[0] = 0 Description Clock for all ASTA flip-flops Local scan enable for the selected ASTA scan chain Test mode selector Functional Mode and External Capture Mode The ASTA input interface is transparent. This implies that the device is in Functional Mode. Nevertheless, the ASTA scan chains can capture all AVR input signals. See Table 4. Internal Control Mode The ASTA input interface is controlled by ASTA scan chains. The ASTA interface can control all AVR input signals. See Table 4.
astamode[0] = 1
28
AVR Core
AVR Core
Figure 37. ASTA Scan Output Cell
To next scan input cell
astase[X]
SE
astacp2
SI astamode[1]
The following signals control the ASTA scan output cell: Table 7. ASTA Scan Output Cell
Signal astacp2 astase[X] astamode[1] astamode[1] = 0 Description Clock for all ASTA flip-flops Local scan enable for the selected ASTA scan chain Test mode selector Functional Mode and Internal Capture Mode The ASTA output interface is transparent. This is Functional Mode. Nevertheless, the ASTA scan chains can capture all AVR output signals. See Table 4. External Control Mode The ASTA output interface is controlled by ASTA scan chains. The ASTA interface can control all AVR output signals. See Table 4.
astamode[1] = 1
29
astaso[1] = astasi[2] astaso[2] = astasi[3] astaso[3] = astasi[4] astaso[4] = astasi[5] astaso[5] = astasi[6] astaso[6] = astasi[7] astaso[7] = astasi[8] astaso[8] = asta_scout which results in a scan chain linked as follows: asta_scin, ASTA chain 0, ASTA chain 1, ASTA chain 2, ASTA chain 3, ASTA chain 4, ASTA chain 5, ASTA chain 6, ASTA chain 7, ASTA chain 8, asta_scout
Methodologies
Because the test goal for todays designs is over a 99% fault coverage, the recommended methodology for testing designs containing the AVR Embedded core is Full Scan. This is the simplest methodology. In specific cases however, good coverage can be achieved with Partial Scan, BIST or non scan techniques. To allow a large amount of freedom in a design, the ASTA architecture makes it possible to use all of these special DFT methodologies.
Test Configuration
A fourth scan chain must be created around the AVR Embedded Core by linking the nine ASTA scan chains as described in the previous section. With this scan chain, the AVR Embedded Core can be bypassed (the core is an ATPG black box for the designer due to its encrypted format), and ATPG test vectors can then be generated for the rest of the chip, including AVR standard peripherals, embedded Macros and UDL. Partial Scan or ad-hoc methodologies can also be used by controlling this scan chain.
30
AVR Core
AVR Core
Input/Output Timing
tCLK /astacp2 tHIGH tLOW
Inputs tSU
Valid tHO
Valid
Inputs
Parameter Clock cycle Input setup time Input hold time Clock to output delay Combinational delay; input to output
Note: The delays shown in this diagram are all process specific. For the corresponding characterized values, refer to one of the following datasheets: AVR Embedded Core ATC50 Electrical Characteristics (0.5 micron three-layer-metal CMOS process intended for use with a supply voltage of 3.3V 0.3V) AVR Embedded Core ATC50/E2 Electrical Characteristics (0.5 micron three-layer-metal CMOS/NVM process intended for use with a supply voltage of 3.3V 0.3V) AVR Embedded Core ATC35 Electrical Characteristics (0.35 micron three-layer-metal CMOS process intended for use with a supply voltage of 3.3V 0.3V)
31
32
AVR Core
AVR Core
AVR Core Instruction Set
Instruction Set Nomenclature:
Status Register (SREG): SREG: Status register C: Carry flag in status register Z: Zero flag in status register N: Negative flag in status register V: Twos complement overflow indicator S: N V, For signed tests H: Half Carry flag in the status register T: Transfer bit used by BLD and BST instructions I: Global interrupt enable/disable flag Registers and operands: Rd: Destination (and source) register in the register file Rr: Source register in the register file R: Result after instruction is executed K: Constant literal or byte data (8 bit) k: Constant address data for program counter b: Bit in the register file or I/O register (3 bit) s: Bit in the status register (3 bit) X,Y,Z: Indirect address register (X=R27:R26, Y=R29:R28 and Z=R31:R30) P: I/O port address q: Displacement for direct addressing (6 bit) I/O Registers RAMPZ: Register concatenated with the Z register enabling indirect addressing of the whole Program Area on MCUs with more than 64K bytes of Program Code (ELPM instruction). Stack: STACK:Stack for return address and pushed registers SP: Stack Pointer to STACK Flags: : 0: 1: -:
Flag affected by instruction Flag cleared by instruction Flag set by instruction Flag not affected by instruction
Z(N V) = 0 (N V) = 0 Z=1 Z+(N V) = 1 (N V) = 1 C+Z=0 C=0 Z=1 C+Z=1 C=1 C=1 N=1 V=1 Z=1
BRLT* BRGE BREQ BRGE* BRLT BRLO* BRSH/BRCC BREQ BRSH* BRLO/BRCS BRCS BRMI BRVS BREQ
Z+(N V) = 1 (N V) = 1 Z=0 Z(N V) = 0 (N V) = 0 C+Z=1 C=1 Z=0 C+Z=0 C=0 C=0 N=0 V=0 Z=0
BRGE* BRLT BRNE BRLT* BRGE BRSH* BRLO/BRCS BRNE BRLO* BRSH/BRCC BRCC BRPL BRVC BRNE
Signed Signed Signed Signed Signed Unsigned Unsigned Unsigned Unsigned Unsigned Simple Simple Simple Simple
* Interchange Rd and Rr in the operation before the test. i.e. CP Rd,Rr CP Rr,Rd
33
(continued)
34
AVR Core
AVR Core
Complete Instruction Set Summary (continued)
Mnemonic Operands Description Operation Flags #Clocks BRANCH INSTRUCTIONS RJMP IJMP JMP RCALL ICALL CALL RET RETI CPSE CP CPC CPI SBRC SBRS SBIC SBIS BRBS BRBC BREQ BRNE BRCS BRCC BRSH BRLO BRMI BRPL BRGE BRLT BRHS BRHC BRTS BRTC BRVS BRVC BRIE BRID Rd,Rr Rd,Rr Rd,Rr Rd,K Rr, b Rr, b P, b P, b s, k s, k k k k k k k k k k k k k k k k k k k k k k k Relative Jump Indirect Jump to (Z) Direct Jump to k Relative Subroutine Call Indirect Call to (Z) Direct Subroutine Call to k Subroutine Return Interrupt Return Compare, Skip if Equal Compare Compare with Carry Compare Register with Immediate Skip if Bit in Register Cleared Skip if Bit in Register is Set Skip if Bit in I/O Register Cleared Skip if Bit in I/O Register is Set Branch if Status Flag Set Branch if Status Flag Cleared Branch if Equal Branch if Not Equal Branch if Carry Set Branch if Carry Cleared Branch if Same or Higher Branch if Lower Branch if Minus Branch if Plus Branch if Greater or Equal, Signed Branch if Less Than Zero, Signed Branch if Half Carry Flag Set Branch if Half Carry Flag Cleared Branch if T Flag Set Branch if T Flag Cleared Branch if Overflow Flag is Set Branch if Overflow Flag is Cleared Branch if Interrupt Enabled Branch if Interrupt Disabled PC PC + k + 1 PC Z PC k PC PC + k + 1 PC Z PC k PC STACK PC STACK if (Rd = Rr) PC PC + 2 or 3 Rd Rr Rd Rr C Rd K if (Rr(b)=0) PC PC + 2 or 3 if (Rr(b)=1) PC PC + 2 or 3 if (P(b)=0) PC PC + 2 or 3 if (P(b)=1) PC PC + 2 or 3 if (SREG(s) = 1) then PCPC+k + 1 if (SREG(s) = 0) then PCPC+k + 1 if (Z = 1) then PC PC + k + 1 if (Z = 0) then PC PC + k + 1 if (C = 1) then PC PC + k + 1 if (C = 0) then PC PC + k + 1 if (C = 0) then PC PC + k + 1 if (C = 1) then PC PC + k + 1 if (N = 1) then PC PC + k + 1 if (N = 0) then PC PC + k + 1 if (N V= 0) then PC PC + k + 1 if (N V= 1) then PC PC + k + 1 if (H = 1) then PC PC + k + 1 if (H = 0) then PC PC + k + 1 if (T = 1) then PC PC + k + 1 if (T = 0) then PC PC + k + 1 if (V = 1) then PC PC + k + 1 if (V = 0) then PC PC + k + 1 if ( I = 1) then PC PC + k + 1 if ( I = 0) then PC PC + k + 1 None None None None None None None I None Z, N,V,C,H Z, N,V,C,H Z, N,V,C,H None None None None None None None None None None None None None None None None None None None None None None None None 2 2 3 3 3 4 4 4 1/2 1 1 1 1/2 1/2 1/2 1/2 1/2 1/2 1/2 1/2 1/2 1/2 1/2 1/2 1/2 1/2 1/2 1/2 1/2 1/2 1/2 1/2 1/2 1/2 1/2 1/2
(continued)
35
DATA TRANSFER INSTRUCTIONS MOV LDI LD LD LD LD LD LD LDD LD LD LD LDD LDS ST ST ST ST ST ST STD ST ST ST STD STS LPM ELPM IN OUT PUSH POP Rd, P P, Rr Rr Rd Rd, Rr Rd, K Rd, X Rd, X+ Rd, - X Rd, Y Rd, Y+ Rd, - Y Rd,Y+q Rd, Z Rd, Z+ Rd, -Z Rd, Z+q Rd, k X, Rr X+, Rr - X, Rr Y, Rr Y+, Rr - Y, Rr Y+q,Rr Z, Rr Z+, Rr -Z, Rr Z+q,Rr k, Rr Move Between Registers Load Immediate Load Indirect Load Indirect and Post-Inc. Load Indirect and Pre-Dec. Load Indirect Load Indirect and Post-Inc. Load Indirect and Pre-Dec. Load Indirect with Displacement Load Indirect Load Indirect and Post-Inc. Load Indirect and Pre-Dec. Load Indirect with Displacement Load Direct from SRAM Store Indirect Store Indirect and Post-Inc. Store Indirect and Pre-Dec. Store Indirect Store Indirect and Post-Inc. Store Indirect and Pre-Dec. Store Indirect with Displacement Store Indirect Store Indirect and Post-Inc. Store Indirect and Pre-Dec. Store Indirect with Displacement Store Direct to SRAM Load Program Memory Extended Load Program Memory In Port Out Port Push Register on Stack Pop Register from Stack Rd Rr Rd K Rd (X) Rd (X), X X + 1 X X - 1, Rd (X) Rd (Y) Rd (Y), Y Y + 1 Y Y - 1, Rd (Y) Rd (Y + q) Rd (Z) Rd (Z), Z Z+1 Z Z - 1, Rd (Z) Rd (Z + q) Rd (k) (X) Rr (X) Rr, X X + 1 X X - 1, (X) Rr (Y) Rr (Y) Rr, Y Y + 1 Y Y - 1, (Y) Rr (Y + q) Rr (Z) Rr (Z) Rr, Z Z + 1 Z Z - 1, (Z) Rr (Z + q) Rr (k) Rr R0 (Z) R0 (RAMPZ, Z ) Rd P P Rr STACK Rr Rd STACK None None None None None None None None None None None None None None None None None None None None None None None None None None None None None None None None 1 1 2 2 2 2 2 2 2 2 2 2 2 3 2 2 2 2 2 2 2 2 2 2 2 3 3 3 1 1 2 2
(continued)
36
AVR Core
AVR Core
Complete Instruction Set Summary (continued)
Mnemonic Operands Description Operation Flags #Clocks
BIT AND BIT-TEST INSTRUCTIONS SBI CBI LSL LSR ROL ROR ASR SWAP BSET BCLR BST BLD SEC CLC SEN CLN SEZ CLZ SEI CLI SES CLS SEV CLV SET CLT SEH CLH NOP SLEEP WDR P,b P,b Rd Rd Rd Rd Rd Rd s s Rr, b Rd, b Set Bit in I/O Register Clear Bit in I/O Register Logical Shift Left Logical Shift Right Rotate Left Through Carry Rotate Right Through Carry Arithmetic Shift Right Swap Nibbles Flag Set Flag Clear Bit Store from Register to T Bit load from T to Register Set Carry Clear Carry Set Negative Flag Clear Negative Flag Set Zero Flag Clear Zero Flag Global Interrupt Enable Global Interrupt Disable Set Signed Test Flag Clear Signed Test Flag Set Twos Complement Overflow. Clear Twos Complement Overflow Set T in SREG Clear T in SREG Set Half Carry Flag in SREG Clear Half Carry Flag in SREG No Operation Sleep Watchdog Reset (see specific descr. for Sleep function) (see specific descr. for WDR/timer) I/O(P,b) 1 I/O(P,b) 0 Rd(n+1) Rd(n), Rd(0) 0 Rd(n) Rd(n+1), Rd(7) 0 Rd(0)C,Rd(n+1) Rd(n),CRd(7) Rd(7)C,Rd(n) Rd(n+1),CRd(0) Rd(n) Rd(n+1), n=0..6 Rd(3..0)Rd(7..4),Rd(7..4)Rd(3..0) SREG(s) 1 SREG(s) 0 T Rr(b) Rd(b) T C1 C0 N1 N0 Z1 Z0 I1 I0 S1 S0 V1 V0 T1 T0 H1 H0 None None Z,C,N,V Z,C,N,V Z,C,N,V Z,C,N,V Z,C,N,V None SREG(s) SREG(s) T None C C N N Z Z I I S S V V T T H H None None None 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 3 1
37
Adds two registers and the contents of the C flag and places the result in the destination register Rd.
Operation:
(i)
Rd Rd + Rr + C
Syntax:
Operands:
Program Counter:
(i)
ADC Rd,Rr
16 bit Opcode:
0 d 31, 0 r 31
PC PC + 1
0001
11rd
dddd
rrrr
Rd3Rr3+Rr3R3+R3Rd3 Set if there was a carry from bit 3; cleared otherwise N V, For signed tests. Rd7Rr7R7+Rd7Rr7R7 Set if twos complement overflow resulted from the operation; cleared otherwise. R7 Set if MSB of the result is set; cleared otherwise. Rd7 Rr7 Rr7 R7 R7 Rd7 Set if the result is $00; cleared otherwise. Rd7Rr7+Rr7R7+R7Rd7 Set if there was carry from the MSB of the result; cleared otherwise.
S: V:
N:
Z:
C:
38
AVR Core
AVR Core
ADD - Add without Carry
Description:
Adds two registers without the C flag and places the result in the destination register Rd.
Operation:
(i)
Rd Rd + Rr
Syntax: Operands: Program Counter:
(i)
ADD Rd,Rr
16 bit Opcode:
0 d 31, 0 r 31
PC PC + 1
0000
11rd
dddd
rrrr
Rd3Rr3+Rr3R3+R3Rd3 Set if there was a carry from bit 3; cleared otherwise N V, For signed tests. Rd7Rr7R7+Rd7Rr7R7 Set if twos complement overflow resulted from the operation; cleared otherwise. R7 Set if MSB of the result is set; cleared otherwise. R7 R6 R5 R4 R3 R2 R1 R0 Set if the result is $00; cleared otherwise. Rd7 Rr7 +Rr7 R7+ R7 Rd7 Set if there was carry from the MSB of the result; cleared otherwise.
S: V:
N:
Z:
C:
39
Adds an immediate value (0-63) to a register pair and places the result in the register pair. This instruction operates on the upper four register pairs, and is well suited for operations on the pointer registers.
Operation:
(i)
Rdh:Rdl Rdh:Rdl + K
Syntax: Operands: Program Counter:
(i)
ADIW Rdl,K
16 bit Opcode:
dl {24,26,28,30}, 0 K 63
PC PC + 1
1001
0110
KKdd
KKKK
N V, For signed tests. Rdh7 R15 Set if twos complement overflow resulted from the operation; cleared otherwise. R15 Set if MSB of the result is set; cleared otherwise. R15 R14 R13 R12 R11 R10 R9 R8 R7 R6 R5 R4 R3 R2 R1 R0 Set if the result is $0000; cleared otherwise. R15 Rdh7 Set if there was carry from the MSB of the result; cleared otherwise.
N:
Z:
C:
40
AVR Core
AVR Core
AND - Logical AND
Description:
Performs the logical AND between the contents of register Rd and register Rr and places the result in the destination register Rd.
Operation:
(i)
Rd Rd Rr
Syntax: Operands: Program Counter:
(i)
AND Rd,Rr
16 bit Opcode:
0 d 31, 0 r 31
PC PC + 1
0010
00rd
dddd
rrrr
N V, For signed tests. 0 Cleared R7 Set if MSB of the result is set; cleared otherwise. R7 R6 R5 R4 R3 R2 R1 R0 Set if the result is $00; cleared otherwise.
N:
Z:
41
Performs the logical AND between the contents of register Rd and a constant and places the result in the destination register Rd.
Operation:
(i)
Rd Rd K
Syntax: Operands: Program Counter:
(i)
ANDI Rd,K
16 bit Opcode:
16 d 31, 0 K 255
PC PC + 1
0111
KKKK
dddd
KKKK
N V, For signed tests. 0 Cleared R7 Set if MSB of the result is set; cleared otherwise. R7 R6 R5R4 R3 R2 R1 R0 Set if the result is $00; cleared otherwise.
N:
Z:
42
AVR Core
AVR Core
ASR - Arithmetic Shift Right
Description:
Shifts all bits in Rd one place to the right. Bit 7 is held constant. Bit 0 is loaded into the C flag of the SREG. This operation effectively divides a twos complement value by two without changing its sign. The carry flag can be used to round the result.
Operation:
(i)
b7 - - - - - - - - - b0
Syntax:
C
Operands: Program Counter:
(i)
ASR Rd
16 bit Opcode:
0 d 31
PC PC + 1
1001
010d
dddd
0101
N V, For signed tests. N C (For N and C after the shift) Set if (N is set and C is clear) or (N is clear and C is set); Cleared otherwise (for values of N and C after the shift). R7 Set if MSB of the result is set; cleared otherwise. R7 R6 R5 R4 R3 R2 R1 R0 Set if the result is $00; cleared otherwise. Rd0 Set if, before the shift, the LSB of Rd was set; cleared otherwise.
N:
Z:
C:
43
(i)
SREG(s) 0
Syntax: Operands: Program Counter:
(i)
BCLR s
16 bit Opcode:
0s7
PC PC + 1
1001
0100
1sss
1000
0 if s = 7; Unchanged otherwise. 0 if s = 6; Unchanged otherwise. 0 if s = 5; Unchanged otherwise. 0 if s = 4; Unchanged otherwise. 0 if s = 3; Unchanged otherwise. 0 if s = 2; Unchanged otherwise. 0 if s = 1; Unchanged otherwise. 0 if s = 0; Unchanged otherwise.
Example:
bclr bclr 0 7 ; Clear carry flag ; Disable interrupts
44
AVR Core
AVR Core
BLD - Bit Load from the T Flag in SREG to a Bit in Register.
Description:
Copies the T flag in the SREG (status register) to bit b in register Rd.
Operation:
(i)
Rd(b) T
Syntax: Operands: Program Counter:
(i)
BLD Rd,b
16 bit Opcode:
0 d 31, 0 b 7
PC PC + 1
1111
100d
dddd
0bbb
Example:
; Copy bit bst bld r1,2 r0,4 ; Store bit 2 of r1 in T flag ; Load T flag into bit 4 of r0
45
Conditional relative branch. Tests a single bit in SREG and branches relatively to PC if the bit is cleared. This instruction branches relatively to PC in either direction (PC-64destinationPC+63). The parameter k is the offset from PC and is represented in twos complement form.
Operation:
(i)
Syntax:
Operands:
Program Counter:
(i)
BRBC s,k
0 s 7, -64 k +63
PC PC + k + 1 PC PC + 1, if condition is false
16 bit Opcode:
1111
01kk
kkkk
ksss
T -
H -
S -
V -
N -
Z -
C -
46
AVR Core
AVR Core
BRBS - Branch if Bit in SREG is Set
Description:
Conditional relative branch. Tests a single bit in SREG and branches relatively to PC if the bit is set. This instruction branches relatively to PC in either direction (PC-64destinationPC+63). The parameter k is the offset from PC and is represented in twos complement form.
Operation:
(i)
Syntax:
Operands:
Program Counter:
(i)
BRBS s,k
0 s 7, -64 k +63
PC PC + k + 1 PC PC + 1, if condition is false
16 bit Opcode:
1111
00kk
kkkk
ksss
T -
H -
S -
V -
N -
Z -
C -
47
Conditional relative branch. Tests the Carry flag (C) and branches relatively to PC if C is cleared. This instruction branches relatively to PC in either direction (PC-64destinationPC+63). The parameter k is the offset from PC and is represented in twos complement form. (Equivalent to instruction BRBC 0,k).
Operation:
(i)
If C = 0 then PC PC + k + 1, else PC PC + 1
Syntax:
Operands:
Program Counter:
(i)
BRCC k
-64 k +63
PC PC + k + 1 PC PC + 1, if condition is false
16 bit Opcode:
1111
01kk
kkkk
k000
T -
H -
S -
V -
N -
Z -
C -
48
AVR Core
AVR Core
BRCS - Branch if Carry Set
Description:
Conditional relative branch. Tests the Carry flag (C) and branches relatively to PC if C is set. This instruction branches relatively to PC in either direction (PC-64destinationPC+63). The parameter k is the offset from PC and is represented in twos complement form. (Equivalent to instruction BRBS 0,k).
Operation:
(i)
If C = 1 then PC PC + k + 1, else PC PC + 1
Syntax:
Operands:
Program Counter:
(i)
BRCS k
-64 k +63
PC PC + k + 1 PC PC + 1, if condition is false
16 bit Opcode:
1111
00kk
kkkk
k000
T -
H -
S -
V -
N -
Z -
C -
49
Conditional relative branch. Tests the Zero flag (Z) and branches relatively to PC if Z is set. If the instruction is executed immediately after any of the instructions CP, CPI, SUB or SUBI, the branch will occur if and only if the unsigned or signed binary number represented in Rd was equal to the unsigned or signed binary number represented in Rr. This instruction branches relatively to PC in either direction (PC-64destinationPC+63). The parameter k is the offset from PC and is represented in twos complement form. (Equivalent to instruction BRBS 1,k).
Operation:
(i)
If Rd = Rr (Z = 1) then PC PC + k + 1, else PC PC + 1
Syntax:
Operands:
Program Counter:
(i)
BREQ k
-64 k +63
PC PC + k + 1 PC PC + 1, if condition is false
16 bit Opcode:
1111
00kk
kkkk
k001
T -
H -
S -
V -
N -
Z -
C -
50
AVR Core
AVR Core
BRGE - Branch if Greater or Equal (Signed)
Description:
Conditional relative branch. Tests the Signed flag (S) and branches relatively to PC if S is cleared. If the instruction is executed immediately after any of the instructions CP, CPI, SUB or SUBI, the branch will occur if and only if the signed binary number represented in Rd was greater than or equal to the signed binary number represented in Rr. This instruction branches relatively to PC in either direction (PC-64destinationPC+63). The parameter k is the offset from PC and is represented in twos complement form. (Equivalent to instruction BRBC 4,k).
Operation:
(i)
If Rd Rr (N V = 0) then PC PC + k + 1, else PC PC + 1
Syntax:
Operands:
Program Counter:
(i)
BRGE k
-64 k +63
PC PC + k + 1 PC PC + 1, if condition is false
16 bit Opcode:
1111
01kk
kkkk
k100
T -
H -
S -
V -
N -
Z -
C -
51
Conditional relative branch. Tests the Half Carry flag (H) and branches relatively to PC if H is cleared. This instruction branches relatively to PC in either direction (PC-64destinationPC+63). The parameter k is the offset from PC and is represented in twos complement form. (Equivalent to instruction BRBC 5,k).
Operation:
(i)
If H = 0 then PC PC + k + 1, else PC PC + 1
Syntax:
Operands:
Program Counter:
(i)
BRHC k
-64 k +63
PC PC + k + 1 PC PC + 1, if condition is false
16 bit Opcode:
1111
01kk
kkkk
k101
T -
H -
S -
V -
N -
Z -
C -
52
AVR Core
AVR Core
BRHS - Branch if Half Carry Flag is Set
Description:
Conditional relative branch. Tests the Half Carry flag (H) and branches relatively to PC if H is set. This instruction branches relatively to PC in either direction (PC-64destinationPC+63). The parameter k is the offset from PC and is represented in twos complement form. (Equivalent to instruction BRBS 5,k).
Operation:
(i)
If H = 1 then PC PC + k + 1, else PC PC + 1
Syntax:
Operands:
Program Counter:
(i)
BRHS k
16 bit Opcode:
-64 k +63
1111
00kk
kkkk
T -
H -
S -
V -
N -
Z -
C -
53
Conditional relative branch. Tests the Global Interrupt flag (I) and branches relatively to PC if I is cleared. This instruction branches relatively to PC in either direction (PC-64destinationPC+63). The parameter k is the offset from PC and is represented in twos complement form. (Equivalent to instruction BRBC 7,k).
Operation:
(i)
If I = 0 then PC PC + k + 1, else PC PC + 1
Syntax:
Operands:
Program Counter:
(i)
BRID k
-64 k +63
PC PC + k + 1 PC PC + 1, if condition is false
16 bit Opcode:
1111
01kk
kkkk
k111
T -
H -
S -
V -
N -
Z -
C -
54
AVR Core
AVR Core
BRIE - Branch if Global Interrupt is Enabled
Description:
Conditional relative branch. Tests the Global Interrupt flag (I) and branches relatively to PC if I is set. This instruction branches relatively to PC in either direction (PC-64destinationPC+63). The parameter k is the offset from PC and is represented in twos complement form. (Equivalent to instruction BRBS 7,k).
Operation:
(i)
If I = 1 then PC PC + k + 1, else PC PC + 1
Syntax: Operands: Program Counter:
(i)
BRIE k
-64 k +63
PC PC + k + 1 PC PC + 1, if condition is false
16 bit Opcode:
1111
00kk
kkkk
k111
T -
H -
S -
V -
N -
Z -
C -
55
Conditional relative branch. Tests the Carry flag (C) and branches relatively to PC if C is set. If the instruction is executed immediately after any of the instructions CP, CPI, SUB or SUBI, the branch will occur if and only if the unsigned binary number represented in Rd was smaller than the unsigned binary number represented in Rr. This instruction branches relatively to PC in either direction (PC-64destinationPC+63). The parameter k is the offset from PC and is represented in twos complement form. (Equivalent to instruction BRBS 0,k).
Operation:
(i)
(i)
BRLO k
-64 k +63
PC PC + k + 1 PC PC + 1, if condition is false
16 bit Opcode:
1111
00kk
kkkk
k000
T -
H -
S -
V -
N -
Z -
C -
56
AVR Core
AVR Core
BRLT - Branch if Less Than (Signed)
Description:
Conditional relative branch. Tests the Signed flag (S) and branches relatively to PC if S is set. If the instruction is executed immediately after any of the instructions CP, CPI, SUB or SUBI, the branch will occur if and only if the signed binary number represented in Rd was less than the signed binary number represented in Rr. This instruction branches relatively to PC in either direction (PC-64destinationPC+63). The parameter k is the offset from PC and is represented in twos complement form. (Equivalent to instruction BRBS 4,k).
Operation:
(i)
Syntax:
Operands:
Program Counter:
(i)
BRLT k
-64 k +63
PC PC + k + 1 PC PC + 1, if condition is false
16 bit Opcode:
1111
00kk
kkkk
k100
T -
H -
S -
V -
N -
Z -
C -
57
Conditional relative branch. Tests the Negative flag (N) and branches relatively to PC if N is set. This instruction branches relatively to PC in either direction (PC-64 destinationPC+63). The parameter k is the offset from PC and is represented in twos complement form. (Equivalent to instruction BRBS 2,k).
Operation:
(i)
If N = 1 then PC PC + k + 1, else PC PC + 1
Syntax:
Operands:
Program Counter:
(i)
BRMI k
-64 k +63
PC PC + k + 1 PC PC + 1, if condition is false
16 bit Opcode:
1111
00kk
kkkk
k010
T -
H -
S -
V -
N -
Z -
C -
58
AVR Core
AVR Core
BRNE - Branch if Not Equal
Description:
Conditional relative branch. Tests the Zero flag (Z) and branches relatively to PC if Z is cleared. If the instruction is executed immediately after any of the instructions CP, CPI, SUB or SUBI, the branch will occur if and only if the unsigned or signed binary number represented in Rd was not equal to the unsigned or signed binary number represented in Rr. This instruction branches relatively to PC in either direction (PC-64destinationPC+63). The parameter k is the offset from PC and is represented in twos complement form. (Equivalent to instruction BRBC 1,k).
Operation:
(i)
If Rd Rr (Z = 0) then PC PC + k + 1, else PC PC + 1
Syntax:
Operands:
Program Counter:
(i)
BRNE k
-64 k +63
PC PC + k + 1 PC PC + 1, if condition is false
16 bit Opcode:
1111
01kk
kkkk
k001
T -
H -
S -
V -
N -
Z -
C -
59
Conditional relative branch. Tests the Negative flag (N) and branches relatively to PC if N is cleared. This instruction branches relatively to PC in either direction (PC-64destinationPC+63). The parameter k is the offset from PC and is represented in twos complement form. (Equivalent to instruction BRBC 2,k).
Operation:
(i)
If N = 0 then PC PC + k + 1, else PC PC + 1
Syntax:
Operands:
Program Counter:
(i)
BRPL k
-64 k +63
PC PC + k + 1 PC PC + 1, if condition is false
16 bit Opcode:
1111
01kk
kkkk
k010
T -
H -
S -
V -
N -
Z -
C -
60
AVR Core
AVR Core
BRSH - Branch if Same or Higher (Unsigned)
Description:
Conditional relative branch. Tests the Carry flag (C) and branches relatively to PC if C is cleared. If the instruction is executed immediately after execution of any of the instructions CP, CPI, SUB or SUBI the branch will occur if and only if the unsigned binary number represented in Rd was greater than or equal to the unsigned binary number represented in Rr. This instruction branches relatively to PC in either direction (PC-64destinationPC+63). The parameter k is the offset from PC and is represented in twos complement form. (Equivalent to instruction BRBC 0,k).
Operation:
(i)
If Rd Rr (C = 0) then PC PC + k + 1, else PC PC + 1
Syntax:
Operands:
Program Counter:
(i)
BRSH k
-64 k +63
PC PC + k + 1 PC PC + 1, if condition is false
16 bit Opcode:
1111
01kk
kkkk
k000
T -
H -
S -
V -
N -
Z -
C -
61
Conditional relative branch. Tests the T flag and branches relatively to PC if T is cleared. This instruction branches relatively to PC in either direction (PC-64destinationPC+63). The parameter k is the offset from PC and is represented in twos complement form. (Equivalent to instruction BRBC 6,k).
Operation:
(i)
If T = 0 then PC PC + k + 1, else PC PC + 1
Syntax:
Operands:
Program Counter:
(i)
BRTC k
-64 k +63
PC PC + k + 1 PC PC + 1, if condition is false
16 bit Opcode:
1111
01kk
kkkk
k110
T -
H -
S -
V -
N -
Z -
C -
62
AVR Core
AVR Core
BRTS - Branch if the T Flag is Set
Description:
Conditional relative branch. Tests the T flag and branches relatively to PC if T is set. This instruction branches relatively to PC in either direction (PC-64destinationPC+63). The parameter k is the offset from PC and is represented in twos complement form. (Equivalent to instruction BRBS 6,k).
Operation:
(i)
If T = 1 then PC PC + k + 1, else PC PC + 1
Syntax:
Operands:
Program Counter:
(i)
BRTS k
-64 k +63
PC PC + k + 1 PC PC + 1, if condition is false
16 bit Opcode:
1111
00kk
kkkk
k110
T -
H -
S -
V -
N -
Z -
C -
63
Conditional relative branch. Tests the Overflow flag (V) and branches relatively to PC if V is cleared. This instruction branches relatively to PC in either direction (PC-64destinationPC+63). The parameter k is the offset from PC and is represented in twos complement form. (Equivalent to instruction BRBC 3,k).
Operation:
(i)
If V = 0 then PC PC + k + 1, else PC PC + 1
Syntax:
Operands:
Program Counter:
(i)
BRVC k
-64 k +63
PC PC + k + 1 PC PC + 1, if condition is false
16 bit Opcode:
1111
01kk
kkkk
k011
I Example:
T -
H -
S -
V -
N -
Z -
C -
add
r3,r4
64
AVR Core
AVR Core
BRVS - Branch if Overflow Set
Description:
Conditional relative branch. Tests the Overflow flag (V) and branches relatively to PC if V is set. This instruction branches relatively to PC in either direction (PC-64 destinationPC+63). The parameter k is the offset from PC and is represented in twos complement form. (Equivalent to instruction BRBS 3,k).
Operation:
(i)
If V = 1 then PC PC + k + 1, else PC PC + 1
Syntax:
Operands:
Program Counter:
(i)
BRVS k
16 bit Opcode:
-64 k +63
1111
00kk
kkkk
T -
H -
S -
V -
N -
Z -
C -
65
(i)
SREG(s) 1
Syntax: Operands: Program Counter:
(i)
BSET s
16 bit Opcode:
0s7
PC PC + 1
1001
0100
0sss
1000
1 if s = 7; Unchanged otherwise. 1 if s = 6; Unchanged otherwise. 1 if s = 5; Unchanged otherwise. 1 if s = 4; Unchanged otherwise. 1 if s = 3; Unchanged otherwise. 1 if s = 2; Unchanged otherwise. 1 if s = 1; Unchanged otherwise. 1 if s = 0; Unchanged otherwise.
Example:
bset bset 6 7 ; Set T flag ; Enable interrupt
66
AVR Core
AVR Core
BST - Bit Store from Bit in Register to T Flag in SREG
Description:
(i)
T Rd(b)
Syntax: Operands: Program Counter:
(i)
BST Rd,b
16 bit Opcode:
0 d 31, 0 b 7
PC PC + 1
1111
101d
dddd
Xbbb
Example:
; Copy bit bst bld r1,2 r0,4 ; Store bit 2 of r1 in T flag ; Load T into bit 4 of r0
67
Calls to a subroutine within the entire program memory. The return address (to the instruction after the CALL) will be stored onto the stack. (See also RCALL).
Operation:
(i) (ii)
PC k PC k
Syntax:
Devices with 16 bits PC, 128K bytes program memory maximum. Devices with 22 bits PC, 8M bytes program memory maximum.
Operands: Program Counter:Stack
(i)
CALL k
0 k 64K 0 k 4M
PC kSTACK PC+2 SP SP-2, (2 bytes, 16 bits) PC kSTACK PC+2 SP SP-3 (3 bytes, 22 bits)
(ii)
CALL k
32 bit Opcode:
1001 kkkk
010k kkkk
kkkk kkkk
111k kkkk
T -
H -
S -
V -
N -
Z -
C -
68
AVR Core
AVR Core
CBI - Clear Bit in I/O Register
Description:
Clears a specified bit in an I/O register. This instruction operates on the lower 32 I/O registers - addresses 0-31.
Operation:
(i)
I/O(P,b) 0
Syntax: Operands: Program Counter:
(i)
CBI P,b
16 bit Opcode:
0 P 31, 0 b 7
PC PC + 1
1001
1000
pppp
pbbb
T -
H -
S -
V -
N -
Z -
C -
69
Description:
Clears the specified bits in register Rd. Performs the logical AND between the contents of register Rd and the complement of the constant mask K. The result will be placed in register Rd.
Operation:
(i)
Rd Rd ($FF - K)
Syntax: Operands: Program Counter:
(i)
CBR Rd,K
16 d 31, 0 K 255
PC PC + 1
N V, For signed tests. 0 Cleared R7 Set if MSB of the result is set; cleared otherwise. R7 R6 R5 R4 R3 R2 R1 R0 Set if the result is $00; cleared otherwise.
N:
Z:
70
AVR Core
AVR Core
CLC - Clear Carry Flag
Description:
(i)
C0
Syntax: Operands: Program Counter:
(i)
CLC
16 bit Opcode:
None
PC PC + 1
1001
0100
1000
1000
Example:
add clc r0,r0 ; Add r0 to itself ; Clear carry flag
71
Description:
Operation:
(i)
H0
Syntax: Operands: Program Counter:
(i)
CLH
None
PC PC + 1
16 bit Opcode:
1001
0100
1101
1000
H:
Example:
clh ; Clear the Half Carry flag
72
AVR Core
AVR Core
CLI - Clear Global Interrupt Flag
Description:
(i)
I0
Syntax: Operands: Program Counter:
(i)
CLI
16 bit Opcode:
None
PC PC + 1
1001
0100
1111
1000
I:
Example:
cli in sei r11,$16 ; Disable interrupts ; Read port B ; Enable interrupts
73
(i)
N0
Syntax: Operands: Program Counter:
(i)
CLN
16 bit Opcode:
None
PC PC + 1
1001
0100
1010
1000
N:
Example:
add cln r2,r3 ; Add r3 to r2 ; Clear negative flag
74
AVR Core
AVR Core
CLR - Clear Register
Description:
Clears a register. This instruction performs an Exclusive OR between a register and itself. This will clear all bits in the register.
Operation:
(i)
Rd Rd Rd
Syntax: Operands: Program Counter:
(i)
CLR Rd
0 d 31
PC PC + 1
0010
01dd
dddd
dddd
Status Register (SREG) and Boolean Formulae: I S: T 0 Cleared 0 Cleared 0 Cleared 1 Set H S 0 V 0 N 0 Z 1 C -
V:
N:
Z:
brne loop
75
Description:
(i)
S0
Syntax: Operands: Program Counter:
(i)
CLS
16 bit Opcode:
None
PC PC + 1
1001
0100
1100
1000
S:
Example:
add cls r2,r3 ; Add r3 to r2 ; Clear signed flag
76
AVR Core
AVR Core
CLT - Clear T Flag
Description:
(i)
T0
Syntax: Operands: Program Counter:
(i)
CLT
16 bit Opcode:
None
PC PC + 1
1001
0100
1110
1000
T:
0 T flag cleared
Example:
clt ; Clear T flag
77
Description:
(i)
V0
Syntax: Operands: Program Counter:
(i)
CLV
16 bit Opcode:
None
PC PC + 1
1001
0100
1011
1000
V:
Example:
add clv r2,r3 ; Add r3 to r2 ; Clear overflow flag
78
AVR Core
AVR Core
CLZ - Clear Zero Flag
Description:
(i)
Z0
Syntax: Operands: Program Counter:
(i)
CLZ
16 bit Opcode:
None
PC PC + 1
1001
0100
1001
1000
Z:
Example:
add clz r2,r3 ; Add r3 to r2 ; Clear zero
79
Operation:
(i)
Rd $FF - Rd
Syntax: Operands: Program Counter:
(i)
COM Rd
16 bit Opcode:
0 d 31
PC PC + 1
1001
010d
dddd
0000
S:
NV For signed tests. 0 Cleared. R7 Set if MSB of the result is set; cleared otherwise. R7 R6 R5 R4 R3 R2 R1 R0 Set if the result is $00; Cleared otherwise. 1 Set.
V:
N:
Z:
C:
80
AVR Core
AVR Core
CP - Compare
Description:
This instruction performs a compare between two registers Rd and Rr. None of the registers are changed. All conditional branches can be used after this instruction.
Operation:
(i)
Rd - Rr
Syntax: Operands: Program Counter:
(i)
CP Rd,Rr
16 bit Opcode:
0 d 31, 0 r 31
PC PC + 1
0001
01rd
dddd
rrrr
Rd3 Rr3+ Rr3 R3 +R3 Rd3 Set if there was a borrow from bit 3; cleared otherwise N V, For signed tests. Rd7 Rd7 R7+ Rd7 Rr7 R7 Set if twos complement overflow resulted from the operation; cleared otherwise. R7 Set if MSB of the result is set; cleared otherwise. Rd7 Rr7 +Rr7 R7+ R7 Rd7 Set if the result is $00; cleared otherwise. Rd7 Rr7+ Rr7 R7 +R7 Rd7 Set if the absolute value of the contents of Rr is larger than the absolute value of Rd; cleared otherwise.
S: V:
N:
Z:
C:
81
This instruction performs a compare between two registers Rd and Rr and also takes into account the previous carry. None of the registers are changed. All conditional branches can be used after this instruction.
Operation:
(i)
Rd - Rr - C
Syntax: Operands: Program Counter:
(i)
CPC Rd,Rr
16 bit Opcode:
0 d 31, 0 r 31
PC PC + 1
0000
01rd
dddd
rrrr
Rd3 Rr3+ Rr3 R3 +R3 Rd3 Set if there was a borrow from bit 3; cleared otherwise N V, For signed tests. Rd7 Rr7 R7+ Rd7 Rr7 R7 Set if twos complement overflow resulted from the operation; cleared otherwise. R7 Set if MSB of the result is set; cleared otherwise. R7 R6 R5 R4 R3 R2 R1 R0 Z Previous value remains unchanged when the result is zero; cleared otherwise. Rd7 Rr7+ Rr7 R7 +R7 Rd7 Set if the absolute value of the contents of Rr plus previous carry is larger than the absolute value of Rd; cleared otherwise.
S: V:
N:
Z:
C:
82
AVR Core
AVR Core
CPI - Compare with Immediate
Description:
This instruction performs a compare between register Rd and a constant. The register is not changed. All conditional branches can be used after this instruction.
Operation:
(i)
Rd - K
Syntax: Operands: Program Counter:
(i)
CPI Rd,K
16 bit Opcode:
16 d 31, 0 K 255
PC PC + 1
0011
KKKK
dddd
KKKK
Rd3 K3+ K3 R3+ R3 Rd3 Set if there was a borrow from bit 3; cleared otherwise N V, For signed tests. Rd7 K7 R7 +Rd7 K7 R7 Set if twos complement overflow resulted from the operation; cleared otherwise. R7 Set if MSB of the result is set; cleared otherwise. R7 R6 R5 R4 R3 R2 R1 R0 Set if the result is $00; cleared otherwise. Rd7 K7 +K7 R7+ R7 Rd7 Set if the absolute value of K is larger than the absolute value of Rd; cleared otherwise.
S: V:
N:
Z:
C:
83
Description:
This instruction performs a compare between two registers Rd and Rr, and skips the next instruction if Rd = Rr.
Operation:
(i)
(i)
CPSE Rd,Rr
0 d 31, 0 r 31
PC PC + 1, Condition false - no skip PC PC + 2, Skip a one word instruction PC PC + 3, Skip a two word instruction
16 bit Opcode:
0001
00rd
dddd
rrrr
T -
H -
S -
V -
N -
Z -
C -
84
AVR Core
AVR Core
DEC - Decrement
Description:
Subtracts one -1- from the contents of register Rd and places the result in the destination register Rd. The C flag in SREG is not affected by the operation, thus allowing the DEC instruction to be used on a loop counter in multiple-precision computations. When operating on unsigned values, only BREQ and BRNE branches can be expected to perform consistently. When operating on twos complement values, all signed branches are available.
Operation:
(i)
Rd Rd - 1
Syntax: Operands: Program Counter:
(i)
DEC Rd
16 bit Opcode:
0 d 31
PC PC + 1
1001
010d
dddd
1010
NV For signed tests. R7 R6 R5 R4 R3 R2 R1 R0 Set if twos complement overflow resulted from the operation; cleared otherwise. Twos complement overflow occurs if and only if Rd was $80 before the operation. R7 Set if MSB of the result is set; cleared otherwise. R7 R6 R5 R4 R3 R2 R1 R0 Set if the result is $00; Cleared otherwise.
V:
N:
Z:
brne loop
85
Loads one byte pointed to by the (RAMPZ, Z) register into register 0 (R0). This instruction features a 100% space effective constant initialization or constant data fetch. The program memory is organized in 16 bits words and the LSB of the (RAMPZ, Z) (17 bits) pointer selects either low byte (0) or high byte (1). This instruction can address 128K bytes (64K words) of program memory.
Operation: Comment:
(i)
R0 (RAMPZ, Z)
Syntax: Operands:
(i)
ELPM
16 bit Opcode:
None
PC PC + 1
1001
0101
1101
1000
T -
H -
S -
V -
N -
Z -
C -
86
AVR Core
AVR Core
EOR - Exclusive OR
Description:
Performs the logical EOR between the contents of register Rd and register Rr and places the result in the destination register Rd.
Operation:
(i)
Rd Rd Rr
Syntax: Operands: Program Counter:
(i)
EOR Rd,Rr
16 bit Opcode:
0 d 31, 0 r 31
PC PC + 1
0010
01rd
dddd
rrrr
N V, For signed tests. 0 Cleared R7 Set if MSB of the result is set; cleared otherwise. R7 R6 R5 R4 R3 R2 R1 R0 Set if the result is $00; cleared otherwise.
N:
Z:
87
Indirect call of a subroutine pointed to by the Z (16 bits) pointer register in the register file. The Z pointer register is 16 bits wide and allows call to a subroutine within the current 64K words (128K bytes) section in the program memory space.
Operation:
(i) (ii)
PC(15-0) Z(15 - 0)Devices with 16 bits PC, 128K bytes program memory maximum. PC(15-0) Z(15 - 0)Devices with 22 bits PC, 8M bytes program memory maximum. PC(21-16) is unchanged
Syntax: Operands: Program Counter: Stack
(i)
ICALL
None
See Operation
STACK PC+1 SP SP-2 (2 bytes, 16 bits) STACK PC+1 SP SP-3 (3 bytes, 22 bits)
(ii)
ICALL
None
See Operation
16 bit Opcode:
1001
0101
XXXX
1001
T -
H -
S -
V -
N -
Z -
C -
88
AVR Core
AVR Core
IJMP - Indirect Jump
Description:
Indirect jump to the address pointed to by the Z (16 bits) pointer register in the register file. The Z pointer register is 16 bits wide and allows jump within the current 64K words (128K bytes) section of program memory.
Operation:
(i) (ii)
PC Z(15 - 0) Devices with 16 bits PC, 128K bytes program memory maximum. PC(15-0) Z(15-0) Devices with 22 bits PC, 8M bytes program memory maximum. PC(21-16) is unchanged
Syntax: Operands: Program Counter: Stack
(ii) (iii)
IJMP IJMP
16 bit Opcode:
None None
1001
0100
XXXX
1001
T -
H -
S -
V -
N -
Z -
C -
89
Loads data from the I/O Space (Ports, Timers, Configuration registers etc.) into register Rd in the register file.
Operation:
(i)
Rd P
Syntax: Operands: Program Counter:
(i)
IN Rd,P
16 bit Opcode:
0 d 31, 0 P 63
PC PC + 1
1011
0PPd
dddd
PPPP
T -
H -
S -
V -
N -
Z -
C -
90
AVR Core
AVR Core
INC - Increment
Description:
Adds one -1- to the contents of register Rd and places the result in the destination register Rd. The C flag in SREG is not affected by the operation, thus allowing the INC instruction to be used on a loop counter in multiple-precision computations. When operating on unsigned numbers, only BREQ and BRNE branches can be expected to perform consistently. When operating on twos complement values, all signed branches are available.
Operation:
(i)
Rd Rd + 1
Syntax: Operands: Program Counter:
(i)
INC Rd
16 bit Opcode:
0 d 31
PC PC + 1
1001
010d
dddd
0011
Status Register and Boolean Formulae: I S: T NV For signed tests. V: R7 R6 R5 R4 R3 R2 R1 R0 Set if twos complement overflow resulted from the operation; cleared otherwise. Twos complement overflow occurs if and only if Rd was $7F before the operation. R7 Set if MSB of the result is set; cleared otherwise. R7 R6 R5 R4R3 R2 R1 R0 Set if the result is $00; Cleared otherwise. H S V N Z C -
N:
Z:
Words: 1 (2 bytes)
Cycles: 1
91
JMP - Jump
Description:
Jump to an address within the entire 4M (words) program memory. See also RJMP.
Operation:
(i)
PC k
Syntax: Operands: Program Counter: Stack
(i)
JMP k
32 bit Opcode:
0 k 4M
PC k
Unchanged
1001 kkkk
010k kkkk
kkkk kkkk
110k kkkk
Example:
mov jmp ... farplc: nop ; Jump destination (do nothing) r1,r0 farplc ; Copy r0 to r1 ; Unconditional jump
92
AVR Core
AVR Core
LD - Load Indirect from SRAM to Register using Index X
Description:
Loads one byte indirect from SRAM, I/O location or register file to register. This memory location is pointed to by the X (16 bits) pointer register in the register file. Memory access is limited to the current SRAM, I/O location or register file page of 64K bytes. The X pointer register can either be left unchanged after the operation, or it can be incremented or decremented. These features are especially suited for accessing arrays, tables, and stack pointer usage of the X pointer register. The results loaded by the following instructions are undefined. ld XL, X+ ld XH, X+ ld XL, -X ld XH, -X
Using the X pointer: Operation:
Comment:
XX+1 Rd (X)
Operands:
0 d 31 0 d 31 0 d 31
PC PC + 1 PC PC + 1 PC PC + 1
16 bit Opcode :
T -
H -
S -
V -
N -
Z -
C -
93
Loads one byte indirect with or without displacement from SRAM, I/O location or register file to register. This memory location is pointed to by the Y (16 bits) pointer register in the register file. Memory access is limited to the current SRAM, I/O location or register file page of 64K bytes. The Y pointer register can either be left unchanged after the operation, or it can be incremented or decremented. These features are especially suited for accessing arrays, tables, and stack pointer usage of the Y pointer register. The results loaded by the following instructions are undefined. ld YL, Y+ ld YH, Y+ ld YL, -Y ld YH, -Y
Using the Y pointer: Operation:
Comment:
YY+1 Rd (Y)
Operands:
0 d 31 0 d 31 0 d 31 0 d 31, 0 q 63
PC PC + 1 PC PC + 1 PC PC + 1 PC PC + 1
T -
H -
S -
V -
N -
Z -
C -
94
AVR Core
AVR Core
LD (LDD) - Load Indirect From SRAM to Register using Index Z
Description:
Loads one byte indirectly with or without displacement from SRAM, I/O location or register file to register. This memory location is pointed to by the Z (16 bits) pointer register in the register file. Memory access is limited to the current SRAM, I/O location or register file page of 64K bytes. The Z pointer register can either be left unchanged after the operation, or it can be incremented or decremented. These features are especially suited for stack pointer usage of the Z pointer register, however because the Z pointer register can be used for indirect subroutine calls, indirect jumps and table lookup, it is often more convenient to use the X or Y pointer as a dedicated stack pointer. For using the Z pointer for table lookup in program memory see the LPM and ELPM instructions. The results loaded by the following instructions are undefined. ld ZL, Z+ ld ZH, Z+ ld ZL, -Z ld ZH, -Z
Using the Z pointer: Operation:
Comment:
ZZ+1 Rd (Z)
Operands:
0 d 31 0 d 31 0 d 31 0 d 31, 0 q 63
PC PC + 1 PC PC + 1 PC PC + 1 PC PC + 1
T -
H -
S -
V -
N -
Z -
C -
95
Description:
(i)
Rd K
Syntax: Operands: Program Counter:
(i)
LDI Rd,K
16 bit Opcode:
16 d 31, 0 K 255
PC PC + 1
1110
KKKK
dddd
KKKK
T -
H -
S -
V -
N -
Z -
C -
96
AVR Core
AVR Core
LDS - Load Direct from SRAM
Description:
Loads one byte from the SRAM to a Register. A 16-bit address must be supplied. Memory access is limited to the current SRAM Page of 64K bytes. The LDS instruction uses the RAMPZ register to access memory above 64K bytes.
Operation:
(i)
Rd (k)
Syntax: Operands: Program Counter:
(i)
LDS Rd,k
32 bit Opcode:
0 d 31, 0 k 65535
PC PC + 2
1001 kkkk
000d kkkk
dddd kkkk
0000 kkkk
T -
H -
S -
V -
N -
Z -
C -
97
Loads one byte pointed to by the Z register into register 0 (R0). This instruction features a 100% space effective constant initialization or constant data fetch. The program memory is organized in 16 bits words and the LSB of the Z (16 bits) pointer selects either low byte (0) or high byte (1). This instruction can address the first 64K bytes (32K words) of program memory.
Operation: Comment:
(i)
R0 (Z)
Syntax: Operands:
(i)
LPM
16 bit Opcode:
None
PC PC + 1
1001
0101
1100
1000
T -
H -
S -
V -
N -
Z -
C -
98
AVR Core
AVR Core
LSL - Logical Shift Left
Description:
Shifts all bits in Rd one place to the left. Bit 0 is cleared. Bit 7 is loaded into the C flag of the SREG. This operation effectively multiplies an unsigned value by two.
Operation:
(i) C b7 - - - - - - - - - - - - - - - - - - b0
Syntax: Operands:
0
Program Counter:
(i)
LSL Rd
0 d 31
PC PC + 1
0000
11dd
dddd
dddd
Status Register (SREG) and Boolean Formulae: I H: S: V: Rd3 N V, For signed tests. N C (For N and C after the shift) Set if (N is set and C is clear) or (N is clear and C is set); Cleared otherwise (for values of N and C after the shift). R7 Set if MSB of the result is set; cleared otherwise. R7 R6 R5 R4 R3 R2 R1 R0 Set if the result is $00; cleared otherwise. Rd7 Set if, before the shift, the MSB of Rd was set; cleared otherwise. T H S V N Z C
N:
Z:
C:
99
Description:
Shifts all bits in Rd one place to the right. Bit 7 is cleared. Bit 0 is loaded into the C flag of the SREG. This operation effectively divides an unsigned value by two. The C flag can be used to round the result.
Operation:
0 b7 - - - - - - - - - - - - - - - - - - b0 C
Syntax:
Operands:
Program Counter:
(i)
LSR Rd
16 bit Opcode:
0 d 31
PC PC + 1
1001
010d
dddd
0110
N 0
N V, For signed tests. N C (For N and C after the shift) Set if (N is set and C is clear) or (N is clear and C is set); Cleared otherwise (for values of N and C after the shift). 0 R7 R6 R5 R4 R3 R2 R1 R0 Set if the result is $00; cleared otherwise. Rd0 Set if, before the shift, the LSB of Rd was set; cleared otherwise.
N: Z:
C:
100
AVR Core
AVR Core
MOV - Copy Register
Description:
This instruction makes a copy of one register into another. The source register Rr is left unchanged, while the destination register Rd is loaded with a copy of Rr.
Operation:
(i)
Rd Rr
Syntax: Operands: Program Counter:
(i)
MOV Rd,Rr
16 bit Opcode:
0 d 31, 0 r 31
PC PC + 1
0010
11rd
dddd
rrrr
T -
H -
S -
V -
N -
Z -
C -
101
MUL - Multiply
Description:
Rr Multiplicand 8
Rd Multiplier 8
R1 Product High 16
R0 Product Low
The multiplicand Rr and the multiplier Rd are two registers. The 16-bit product is placed in R1 (high byte) and R0 (low byte). Note that if the multiplicand and the multiplier is selected from R0 or R1 the result will overwrite those after multiplication.
Operation:
(i)
R1,R0 Rr Rd
Syntax: Operands: Program Counter:
(i)
MUL Rd,Rr
16 bit Opcode:
0 d 31, 0 r 31
PC PC + 1
1001
11rd
dddd
rrrr
102
AVR Core
AVR Core
NEG - Twos Complement
Description:
Replaces the contents of register Rd with its twos complement; the value $80 is left unchanged.
Operation:
(i)
Rd $00 - Rd
Syntax: Operands: Program Counter:
(i)
NEG Rd
16 bit Opcode:
0 d 31
PC PC + 1
1001
010d
dddd
0001
R3 Rd3 Set if there was a borrow from bit 3; cleared otherwise NV For signed tests. R7 R6 R5 R4 R3 R2 R1 R0 Set if there is a twos complement overflow from the implied subtraction from zero; cleared otherwise. A twos complement overflow will occur if and only if the contents of the Register after operation (Result) is $80. R7 Set if MSB of the result is set; cleared otherwise. R7 R6 R5 R4 R3 R2 R1 R0 Set if the result is $00; Cleared otherwise. R7 + R6 + R5 + R4 + R3 + R2 + R1 + R0 Set if there is a borrow in the implied subtraction from zero; cleared otherwise. The C flag will be set in all cases except when the contents of Register after operation is $00.
S:
V:
N:
Z:
C:
103
NOP - No Operation
Description:
(i)
No
Syntax: Operands: Program Counter:
(i)
NOP
16 bit Opcode:
None
PC PC + 1
0000
0000
0000
0000
I Example:
T -
H -
S -
V -
N -
Z -
C -
; Clear r16 ; Set r17 ; Write zeros to Port B ; Wait (do nothing)
$18,r17
104
AVR Core
AVR Core
OR - Logical OR
Description:
Performs the logical OR between the contents of register Rd and register Rr and places the result in the destination register Rd.
Operation:
(i)
Rd Rd v Rr
Syntax: Operands: Program Counter:
(i)
OR Rd,Rr
16 bit Opcode:
0 d 31, 0 r 31
PC PC + 1
0010
10rd
dddd
rrrr
I S: V:
T -
H -
V 0
C -
N V, For signed tests. 0 Cleared R7 Set if MSB of the result is set; cleared otherwise. R7 R6 R5 R4 R3 R2 R1 R0 Set if the result is $00; cleared otherwise.
N:
Z:
105
Performs the logical OR between the contents of register Rd and a constant and places the result in the destination register Rd.
Operation:
(i)
Rd Rd v K
Syntax: Operands: Program Counter:
(i)
ORI Rd,K
16 bit Opcode:
16 d 31, 0 K 255
PC PC + 1
0110
KKKK
dddd
KKKK
I S: V:
T -
H -
V 0
C -
N V, For signed tests. 0 Cleared R7 Set if MSB of the result is set; cleared otherwise. R7 R6 R5 R4 R3 R2 R1 R0 Set if the result is $00; cleared otherwise.
N:
Z:
106
AVR Core
AVR Core
OUT - Store Register to I/O port
Description:
Stores data from register Rr in the register file to I/O space (Ports, Timers, Configuration registers etc.).
Operation:
(i)
P Rr
Syntax: Operands: Program Counter:
(i)
OUT P,Rr
16 bit Opcode:
0 r 31, 0 P 63
PC PC + 1
1011
1PPr
rrrr
PPPP
I Example:
T -
H -
S -
V -
N -
Z -
C -
; Clear r16 ; Set r17 ; Write zeros to Port B ; Wait (do nothing)
$18,r17
107
(i)
Rd STACK
Syntax: Operands: Program Counter:Stack
(i)
POP Rd
0 d 31
PC PC + 1SP SP + 1
16 bit Opcode:
1001
000d
dddd
1111
T -
H -
S -
V -
N -
Z -
C -
108
AVR Core
AVR Core
PUSH - Push Register on Stack
Description:
(i)
STACK Rr
Syntax:
Operands:
Program Counter:Stack:
(i)
PUSH Rr
16 bit Opcode:
0 r 31
PC PC + 1SP SP - 1
1001
001d
dddd
1111
T -
H -
S -
V -
N -
Z -
C -
109
Calls a subroutine within 2K words (4K bytes). The return address (the instruction after the RCALL) is stored onto the stack. (See also CALL).
Operation:
(i) (ii)
PC PC + k + 1 PC PC + k + 1
Syntax:
Devices with 16 bits PC, 128K bytes program memory maximum. Devices with 22 bits PC, 8M bytes program memory maximum.
Operands: Program Counter: Stack
(i)
RCALL k
-2K k 2K -2K k 2K
PC PC + k + 1 PC PC + k + 1
STACK PC+1 SP SP-2 (2 bytes, 16 bits) STACK PC+1 SP SP-3 (3 bytes, 22 bits)
(ii)
RCALL k
16 bit Opcode:
1101
kkkk
kkkk
kkkk
T -
H -
S -
V -
N -
Z -
C -
110
AVR Core
AVR Core
RET - Return from Subroutine
Description:
Returns from subroutine. The return address is loaded from the STACK.
Operation:
(i) (ii)
PC(15-0) STACK Devices with 16 bits PC, 128K bytes program memory maximum. PC(21-0) STACKDevices with 22 bits PC, 8M bytes program memory maximum.
Syntax: Operands: Program Counter: Stack
(i) (ii)
RET RET
16 bit Opcode:
None None
1001
0101
0XX0
1000
T -
H -
S -
V -
N -
Z -
C -
111
Returns from interrupt. The return address is loaded from the STACK and the global interrupt flag is set.
Operation:
(i) (ii)
PC(15-0) STACK Devices with 16 bits PC, 128K bytes program memory maximum. PC(21-0) STACKDevices with 22 bits PC, 8M bytes program memory maximum.
Syntax: Operands: Program Counter: Stack
(i) (ii)
RETI RETI
16 bit Opcode:
None None
1001
0101
0XX1
1000
Example:
... extint: push ... pop reti r0 ; Restore r0 ; Return and enable interrupts r0 ; Save r0 on the stack
112
AVR Core
AVR Core
RJMP - Relative Jump
Description:
Relative jump to an address within PC-2K and PC + 2K (words). In the assembler, labels are used instead of relative operands. For AVR microcontrollers with program memory not exceeding 4K words (8K bytes) this instruction can address the entire memory from every address location.
Operation:
(i)
PC PC + k + 1
Syntax: Operands: Program Counter: Stack
(i)
RJMP k
16 bit Opcode:
-2K k 2K
PC PC + k + 1
Unchanged
1100
kkkk
kkkk
kkkk
T -
H -
S -
V -
N -
Z -
C -
113
Shifts all bits in Rd one place to the left. The C flag is shifted into bit 0 of Rd. Bit 7 is shifted into the C flag.
Operation:
C b7 - - - - - - - - - - - - - - - - - - b0 C
Syntax:
Operands:
Program Counter:
(i)
ROL Rd
0 d 31
PC PC + 1
0001
11dd
dddd
dddd
Status Register (SREG) and Boolean Formulae: I H: S: V: Rd3 N V, For signed tests. N C (For N and C after the shift) Set if (N is set and C is clear) or (N is clear and C is set); Cleared otherwise (for values of N and C after the shift). R7 Set if MSB of the result is set; cleared otherwise. R7 R6 R5 R4 R3 R2 R1 R0 Set if the result is $00; cleared otherwise. Rd7 Set if, before the shift, the MSB of Rd was set; cleared otherwise. T H S V N Z C
N:
Z:
C:
114
AVR Core
AVR Core
ROR - Rotate Right trough Carry
Description:
Shifts all bits in Rd one place to the right. The C flag is shifted into bit 7 of Rd. Bit 0 is shifted into the C flag.
Operation:
C b7 - - - - - - - - - - - - - - - - - - b0 C
Syntax:
Operands:
Program Counter:
(i)
ROR Rd
16 bit Opcode:
0 d 31
PC PC + 1
1001
010d
dddd
0111
I S: V:
T -
H -
N V, For signed tests. N C (For N and C after the shift) Set if (N is set and C is clear) or (N is clear and C is set); Cleared otherwise (for values of N and C after the shift). R7 Set if MSB of the result is set; cleared otherwise. R7 R6 R5 R4 R3 R2 R1 R0 Set if the result is $00; cleared otherwise. Rd0 Set if, before the shift, the LSB of Rd was set; cleared otherwise.
N:
Z:
C:
115
Subtracts two registers and subtracts with the C flag and places the result in the destination register Rd.
Operation:
(i)
Rd Rd - Rr - C
Syntax: Operands: Program Counter:
(i)
SBC Rd,Rr
0 d 31, 0 r 31
PC PC + 1
16 bit Opcode:
0000
10rd
dddd
rrrr
Rd3 Rr3 + Rr3 R3 + R3 Rd3 Set if there was a borrow from bit 3; cleared otherwise N V, For signed tests. Rd7 Rr7 R7 +Rd7 Rr7 R7 Set if twos complement overflow resulted from the operation; cleared otherwise. R7 Set if MSB of the result is set; cleared otherwise. R7 R6 R5 R4 R3 R2 R1 R0 Z Previous value remains unchanged when the result is zero; cleared otherwise. Rd7 Rr7+ Rr7 R7 +R7 Rd7 Set if the absolute value of the contents of Rr plus previous carry is larger than the absolute value of the Rd; cleared otherwise.
S: V:
N:
Z:
C:
116
AVR Core
AVR Core
SBCI - Subtract Immediate with Carry
Description:
Subtracts a constant from a register and subtracts with the C flag and places the result in the destination register Rd.
Operation:
(i)
Rd Rd - K - C
Syntax: Operands: Program Counter:
(i)
SBCI Rd,K
16 d 31, 0 K 255
PC PC + 1
16 bit Opcode:
0100
KKKK
dddd
KKKK
Rd3 K3 + K3 R3 + R3 Rd3 Set if there was a borrow from bit 3; cleared otherwise N V, For signed tests. Rd7 K7 R7 +Rd7 K7 R7 Set if twos complement overflow resulted from the operation; cleared otherwise. R7 Set if MSB of the result is set; cleared otherwise. R7 R6 R5 R4 R3 R2 R1 R0 Z Previous value remains unchanged when the result is zero; cleared otherwise. Rd7 K7+ K7 R7 +R7 Rd7 Set if the absolute value of the constant plus previous carry is larger than the absolute value of Rd; cleared otherwise.
S: V:
N:
Z:
C:
117
Description:
Sets a specified bit in an I/O register. This instruction operates on the lower 32 I/O registers - addresses 0-31.
Operation:
(i)
I/O(P,b) 1
Syntax: Operands: Program Counter:
(i)
SBI P,b
16 bit Opcode:
0 P 31, 0 b 7
PC PC + 1
1001
1010
pppp
pbbb
T -
H -
S -
V -
N -
Z -
C -
118
AVR Core
AVR Core
SBIC - Skip if Bit in I/O Register is Cleared
Description:
This instruction tests a single bit in an I/O register and skips the next instruction if the bit is cleared. This instruction operates on the lower 32 I/O registers - addresses 0-31.
Operation:
(i)
Syntax:
Operands:
Program Counter:
(i)
SBIC P,b
0 P 31, 0 b 7
PC PC + 1, If condition is false, no skip. PC PC + 2, If next instruction is one word. PC PC + 3, If next instruction is JMP or CALL
16 bit Opcode:
1001
1001
pppp
pbbb
T -
H -
S -
V -
N -
Z -
C -
Words: 1 (2 bytes) Cycles: 1 if condition is false (no skip) 2 if condition is true (skip is executed)
119
Description:
This instruction tests a single bit in an I/O register and skips the next instruction if the bit is set. This instruction operates on the lower 32 I/O registers - addresses 0-31.
Operation:
(i)
Syntax:
Operands:
Program Counter:
(i)
SBIS P,b
0 P 31, 0 b 7
PC PC + 1, Condition false - no skip PC PC + 2, Skip a one word instruction PC PC + 3, Skip a JMP or a CALL
16 bit Opcode:
1001
1011
pppp
pbbb
T -
H -
S -
V -
N -
Z -
C -
Words: 1 (2 bytes) Cycles: 1 if condition is false (no skip) 2 if condition is true (skip is executed)
120
AVR Core
AVR Core
SBIW - Subtract Immediate from Word
Description:
Subtracts an immediate value (0-63) from a register pair and places the result in the register pair. This instruction operates on the upper four register pairs, and is well suited for operations on the pointer registers.
Operation:
(i)
Rdh:Rdl Rdh:Rdl - K
Syntax: Operands: Program Counter:
(i)
SBIW Rdl,K
16 bit Opcode:
dl {24,26,28,30}, 0 K 63
PC PC + 1
1001
0111
KKdd
KKKK
N V, For signed tests. Rdh7 R15 Set if twos complement overflow resulted from the operation; cleared otherwise. R15 Set if MSB of the result is set; cleared otherwise. R15 R14 R13 R12 R11 R10 R9 R8 R7 R6 R5 R4 R3 R2 R1 R0 Set if the result is $0000; cleared otherwise. R15 Rdh7 Set if the absolute value of K is larger than the absolute value of Rd; cleared otherwise.
N:
Z:
C:
121
Description:
Sets specified bits in register Rd. Performs the logical ORI between the contents of register Rd and a constant mask K and places the result in the destination register Rd.
Operation:
(i)
Rd Rd v K
Syntax: Operands: Program Counter:
(i)
SBR Rd,K
16 bit Opcode:
16 d 31, 0 K 255
PC PC + 1
0110
KKKK
dddd
KKKK
N V, For signed tests. 0 Cleared R7 Set if MSB of the result is set; cleared otherwise. R7 R6 R5 R4 R3 R2 R1 R0 Set if the result is $00; cleared otherwise.
N:
Z:
122
AVR Core
AVR Core
SBRC - Skip if Bit in Register is Cleared
Description:
This instruction tests a single bit in a register and skips the next instruction if the bit is cleared.
Operation:
(i)
Syntax:
Operands:
Program Counter:
(i)
SBRC Rr,b
0 r 31, 0 b 7
PC PC + 1, If condition is false, no skip. PC PC + 2, If next instruction is one word. PC PC + 3, If next instruction is JMP or CALL
16 bit Opcode:
1111
110r
rrrr
Xbbb
T -
H -
S -
V -
N -
Z -
C -
Words: 1 (2 bytes) Cycles: 1 if condition is false (no skip) 2 if condition is true (skip is executed)
123
Description:
This instruction tests a single bit in a register and skips the next instruction if the bit is set.
Operation:
(i)
Syntax:
Operands:
Program Counter:
(i)
SBRS Rr,b
0 r 31, 0 b 7
PC PC + 1, Condition false - no skip PC PC + 2, Skip a one word instruction PC PC + 3, Skip a JMP or a CALL
16 bit Opcode:
1111
111r
rrrr
Xbbb
T -
H -
S -
V -
N -
Z -
C -
Words: 1 (2 bytes) Cycles: 1 if condition is false (no skip) 2 if condition is true (skip is executed)
124
AVR Core
AVR Core
SEC - Set Carry Flag
Description:
(i)
C1
Syntax: Operands: Program Counter:
(i)
SEC
16 bit Opcode:
None
PC PC + 1
1001
0100
0000
1000
Example:
sec adc r0,r1 ; Set carry flag ; r0=r0+r1+1
125
(i)
H1
Syntax: Operands: Program Counter:
(i)
SEH
16 bit Opcode:
None
PC PC + 1
1001
0100
0101
1000
Example:
seh ; Set Half Carry flag
126
AVR Core
AVR Core
SEI - Set Global Interrupt Flag
Description:
(i)
I1
Syntax: Operands: Program Counter:
(i)
SEI
16 bit Opcode:
None
PC PC + 1
1001
0100
0111
1000
Example:
cli in sei r13,$16 ; Disable interrupts ; Read Port B ; Enable interrupts
127
(i)
N1
Syntax: Operands: Program Counter:
(i)
SEN
16 bit Opcode:
None
PC PC + 1
1001
0100
0010
1000
Example:
add sen r2,r19 ; Add r19 to r2 ; Set negative flag
128
AVR Core
AVR Core
SER - Set all bits in Register
Description:
(i)
Rd $FF
Syntax: Operands: Program Counter:
(i)
SER Rd
16 bit Opcode:
16 d 31
PC PC + 1
1110
1111
dddd
1111
T -
H -
S -
V -
N -
Z -
C -
129
(i)
S1
Syntax: Operands: Program Counter:
(i)
SES
16 bit Opcode:
None
PC PC + 1
1001
0100
0100
1000
I S:
T -
H -
S 1
V -
N -
Z -
C -
Example:
add ses r2,r19 ; Add r19 to r2 ; Set negative flag
130
AVR Core
AVR Core
SET - Set T Flag
Description:
(i)
T1
Syntax: Operands: Program Counter:
(i)
SET
16 bit Opcode:
None
PC PC + 1
1001
0100
0110
1000
Example:
set ; Set T flag
131
(i)
V1
Syntax: Operands: Program Counter:
(i)
SEV
16 bit Opcode:
None
PC PC + 1
1001
0100
0011
1000
Example:
add sev r2,r19 ; Add r19 to r2 ; Set overflow flag
132
AVR Core
AVR Core
SEZ - Set Zero Flag
Description:
(i)
Z1
Syntax: Operands: Program Counter:
(i)
SEZ
16 bit Opcode:
None
PC PC + 1
1001
0100
0001
1000
Example:
add sez r2,r19 ; Add r19 to r2 ; Set zero flag
133
SLEEP
Description:
This instruction sets the circuit in sleep mode defined by the MCU control register. When an interrupt wakes up the MCU from a sleep state, the instruction following the SLEEP instruction will be executed before the interrupt handler is executed.
Operation:
Syntax:
Operands:
Program Counter:
SLEEP
16 bit Opcode:
None
PC PC + 1
1001
0101
100X
1000
T -
H -
S -
V -
N -
Z -
C -
134
AVR Core
AVR Core
ST - Store Indirect From Register to SRAM using Index X
Description:
Stores one byte indirect from Register to SRAM, I/O location or register file. This Memory location is pointed to by the X (16 bits) pointer register in the register file. Memory access is limited to the current SRAM, I/O location or register file Page of 64K bytes. The X pointer register can either be left unchanged after the operation, or it can be incremented or decremented. These features are especially suited for stack pointer usage of the X pointer register. The results stored by the following instructions are undefined. st X+, XL st X+, XH st -X, XL st -X, XH
Using the X pointer: Operation: Comment:
X X+1 (X) Rr
Operands:
ST X, Rr ST X+, Rr ST -X, Rr
16 bit Opcode :
0 r 31 0 r 31 0 r 31
PC PC + 1 PC PC + 1 PC PC + 1
T -
H -
S -
V -
N -
Z -
C -
135
Stores one byte indirect with or without displacement from Register to SRAM. The SRAM location is pointed to by the Y (16 bits) pointer register in the register file. Memory access is limited to the current SRAM Page of 64K bytes. To access another SRAM page the RAMPY register in the I/O area has to be changed. The Y pointer register can either be left unchanged after the operation, or it can be incremented or decremented. These features are especially suited for stack pointer usage of the Y pointer register. The results stored by the following instructions are undefined. st Y+, YL st Y+, YH st -Y, YL st -Y, YH
Using the Y pointer: Operation:
Comment:
Y Y+1 (Y) Rr
Operands:
0 r 31 0 r 31 0 r 31 0 r 31, 0 q 63
PC PC + 1 PC PC + 1 PC PC + 1 PC PC + 1
T -
H -
S -
V -
N -
Z -
C -
136
AVR Core
AVR Core
ST (STD) - Store Indirect From Register to SRAM using Index Z
Description:
Stores one byte indirect with or without displacement from Register to SRAM. The SRAM location is pointed to by the Z (16 bits) pointer register in the register file. Memory access is limited to the current SRAM Page of 64K bytes. To access another SRAM page the RAMPZ register in the I/O area has to be changed. The Z pointer register can either be left unchanged after the operation, or it can be incremented or decremented. These features are very suited for stack pointer usage of the Z pointer register, but because the Z pointer register can be used for indirect subroutine calls, indirect jumps and table lookup it is often more convenient to use the X or Y pointer as a dedicated stack pointer. The results stored by the following instructions are undefined. st Z+, ZL st Z+, ZH st -Z, ZL st -Z, ZH
Using the Z pointer: Operation:
Comment:
Z Z+1 (Z) Rr
Operands:
0 r 31 0 r 31 0 r 31 0 r 31, 0 q 63
PC PC + 1 PC PC + 1 PC PC + 1 PC PC + 1
T -
H -
S -
V -
N -
Z -
C -
137
Stores one byte from a Register to the SRAM. A 16-bit address must be supplied. Memory access is limited to the current SRAM Page of 64K bytes. The SDS instruction uses the RAMPZ register to access memory above 64K bytes.
Operation:
(i)
(k) Rr
Syntax: Operands: Program Counter:
(i)
STS k,Rr
32 bit Opcode:
0 r 31, 0 k 65535
PC PC + 2
1001 kkkk
001d kkkk
dddd kkkk
0000 kkkk
T -
H -
S -
V -
N -
Z -
C -
138
AVR Core
AVR Core
SUB - Subtract without Carry
Description:
Subtracts two registers and places the result in the destination register Rd.
Operation:
(i)
Rd Rd - Rr
Syntax: Operands: Program Counter:
(i)
SUB Rd,Rr
16 bit Opcode:
0 d 31, 0 r 31
PC PC + 1
0001
10rd
dddd
rrrr
Rd3 Rr3 +Rr3 R3 +R3 Rd3 Set if there was a borrow from bit 3; cleared otherwise N V, For signed tests. Rd7 Rr7 R7 +Rd7 Rr7 R7 Set if twos complement overflow resulted from the operation; cleared otherwise. R7 Set if MSB of the result is set; cleared otherwise. R7 R6 R5 R4 R3 R2 R1 R0 Set if the result is $00; cleared otherwise. Rd7 Rr7 +Rr7 R7 +R7 Rd7 Set if the absolute value of the contents of Rr is larger than the absolute value of Rd; cleared otherwise.
S: V:
N:
Z:
C:
139
Subtracts a register and a constant and places the result in the destination register Rd. This instruction is working on Register R16 to R31 and is very well suited for operations on the X, Y and Z pointers.
Operation:
(i)
Rd Rd - K
Syntax: Operands: Program Counter:
(i)
SUBI Rd,K
16 bit Opcode:
16 d 31, 0 K 255
PC PC + 1
0101
KKKK
dddd
KKKK
Rd3 K3+K3 R3 +R3 Rd3 Set if there was a borrow from bit 3; cleared otherwise N V, For signed tests. Rd7 K7 R7 +Rd7 K7 R7 Set if twos complement overflow resulted from the operation; cleared otherwise. R7 Set if MSB of the result is set; cleared otherwise. R7 R6 R5 R4 R3 R2 R1 R0 Set if the result is $00; cleared otherwise. Rd7 K7 +K7 R7 +R7 Rd7 Set if the absolute value of K is larger than the absolute value of Rd; cleared otherwise.
S: V:
N:
Z:
C:
140
AVR Core
AVR Core
SWAP - Swap Nibbles
Description:
(i)
(i)
SWAP Rd
16 bit Opcode:
0 d 31
PC PC + 1
1001
010d
dddd
0010
141
Tests if a register is zero or negative. Performs a logical AND between a register and itself. The register will remain unchanged.
Operation:
(i)
Rd Rd Rd
Syntax: Operands: Program Counter:
(i)
TST Rd
16 bit Opcode:
0 d 31
PC PC + 1
0010
00dd
dddd
dddd
N V, For signed tests. 0 Cleared R7 Set if MSB of the result is set; cleared otherwise. R7 R6 R5 R4 R3 R2 R1 R0 Set if the result is $00; cleared otherwise.
N:
Z:
142
AVR Core
AVR Core
WDR - Watchdog Reset
Description:
This instruction resets the Watchdog Timer. This instruction must be executed within a limited time given by the WD prescaler. See the Watchdog Timer hardware specification.
Operation:
(i)
WD timer restart.
Syntax: Operands: Program Counter:
(i)
WDR
16 bit Opcode:
None
PC PC + 1
1001
0101
101X
1000
T -
H -
S -
V -
N -
Z -
C -
143
144
AVR Core
Atmel Headquarters
Corporate Headquarters
2325 Orchard Parkway San Jose, CA 95131 TEL (408) 441-0311 FAX (408) 487-2600
Atmel Operations
Atmel Colorado Springs
1150 E. Cheyenne Mtn. Blvd. Colorado Springs, CO 80906 TEL (719) 576-3300 FAX (719) 540-1759
Europe
Atmel U.K., Ltd. Coliseum Business Centre Riverside Way Camberley, Surrey GU15 3YL England TEL (44) 1276-686677 FAX (44) 1276-686697
Atmel Rousset
Zone Industrielle 13106 Rousset Cedex, France TEL (33) 4 42 53 60 00 FAX (33) 4 42 53 60 01
Asia
Atmel Asia, Ltd. Room 1219 Chinachem Golden Plaza 77 Mody Road Tsimshatsui East Kowloon, Hong Kong TEL (852) 27219778 FAX (852) 27221369
Japan
Atmel Japan K.K. Tonetsu Shinkawa Bldg., 9F 1-24-8 Shinkawa Chuo-ku, Tokyo 104-0033 Japan TEL (81) 3-3523-3551 FAX (81) 3-3523-7581
Fax-on-Demand
North America: 1-(800) 292-8635 International: 1-(408) 441-0732
e-mail
[email protected]
Web Site
http://www.atmel.com
BBS
1-(408) 436-4309
Atmel Corporation 1999. Atmel Corporation makes no warranty for the use of its products, other than those expressly contained in the Companys standard warranty which is detailed in Atmels Terms and Conditions located on the Companys web site. The Company assumes no responsibility for any errors which may appear in this document, reserves the right to change devices or specifications detailed herein at any time without notice, and does not make any commitment to update the information contained herein. No licenses to patents or other intellectual property of Atmel are granted by the Company in connection with the sale of Atmel products, expressly or by implication. Atmels products are not authorized for use as critical components in life suppor t devices or systems. Marks bearing
and/or
are registered trademarks and trademarks of Atmel Corporation. Printed on recycled paper.
0890A02/99/xM