
- •Features
- •Pin Configuration
- •Description
- •Block Diagram
- •Pin Descriptions
- •Port A (PA7..PA0)
- •Port B (PB7..PB0)
- •Port C (PC7..PC0)
- •Port D (PD7..PD0)
- •Port E (PE2..PE0)
- •RESET
- •XTAL1
- •XTAL2
- •Crystal Oscillator
- •EEPROM Data Memory
- •SRAM Data Memory
- •I/O Direct
- •Data Direct
- •Data Indirect with Displacement
- •Data Indirect
- •l/O Memory
- •Status Register – SREG
- •Stack Pointer – SP
- •Reset Sources
- •Power-on Reset
- •External Reset
- •Brown-out Detection
- •Watchdog Reset
- •Interrupt Handling
- •Interrupt Response Time
- •External Interrupts
- •Sleep Modes
- •Idle Mode
- •Power-down Mode
- •Power-save Mode
- •Timer/Counters
- •Timer Counter0 – TCNT0
- •Timer/Counter2 – TCNT2
- •Timer/Counter1
- •Timer/Counter1 in PWM Mode
- •Watchdog Timer
- •SS Pin Functionality
- •Data Modes
- •SPI Control Register – SPCR
- •SPI Status Register – SPSR
- •SPI Data Register – SPDR
- •UARTs
- •Data Transmission
- •Data Reception
- •UART Control
- •Baud Rate Generator
- •Analog Comparator
- •Interface to External Memory
- •I/O Ports
- •Port A
- •Port A Data Register – PORTA
- •Port A as General Digital I/O
- •Port A Schematics
- •Port B
- •Port B Data Register – PORTB
- •Port B as General Digital I/O
- •Port B Schematics
- •Port C
- •Port C Data Register – PORTC
- •Port C as General Digital I/O
- •Port C Schematics
- •Port D
- •Port D Data Register – PORTD
- •Port D as General Digital I/O
- •Alternate Functions of Port D
- •Port D Schematics
- •Port E
- •Port E Data Register – PORTE
- •Port E as General Digital I/O
- •Alternate Functions of Port E
- •Port E Schematics
- •Boot Loader Support
- •Setting the Boot Loader Lock Bits by SPM
- •Performing Page Erase by SPM
- •Fill the Temporary Buffer
- •Perform a Page Write
- •Reading the Fuse and Lock Bits from Software
- •Fuse Bits
- •Signature Bytes
- •Parallel Programming
- •Signal Names
- •Enter Programming Mode
- •Chip Erase
- •Programming the Flash
- •Programming the EEPROM
- •Reading the Flash
- •Reading the EEPROM
- •Programming the Fuse Bits
- •Programming the Lock Bits
- •Reading the Signature Bytes
- •Serial Downloading
- •Data Polling Flash
- •Data Polling EEPROM
- •Electrical Characteristics
- •Absolute Maximum Ratings*
- •External Data Memory Timing
- •Ordering Information
- •Packaging Information

Crystal Oscillator
XTAL1 and XTAL2 are input and output, respectively, of an inverting amplifier that can be configured for use as an on-chip oscillator, as shown in Figure 2. Either a quartz crystal or a ceramic resonator may be used. To drive the device from an external clock source, XTAL2 should be left unconnected while XTAL1 is driven as shown in Figure 3.
Figure 2. Oscillator Connections
C2
XTAL2
C1
XTAL1
GND
Figure 3. External Clock Drive Configuration
NC |
|
XTAL2 |
|
EXTERNAL
OSCILLATOR XTAL1
SIGNAL
GND
6 ATmega161(L)
1228B–09/01

ATmega161(L)
Architectural
Overview
The fast-access register file concept contains 32 x 8-bit general purpose working registers with a single clock cycle access time. This means that during one single clock cycle, one Arithmetic Logic Unit (ALU) operation is executed. Two operands are output from the register file, the operation is executed and the result is stored back in the register file
– in one clock cycle.
Six of the 32 registers can be used as three 16-bit indirect address register pointers for Data Space addressing – enabling efficient address calculations. One of the three address pointers is also used as the address pointer for the constant table look-up function. These added function registers are the 16-bit X-register, Y-register and Z-register.
The ALU supports arithmetic and logic functions between registers or between a constant and a register. Single register operations are also executed in the ALU. Figure 4 shows the ATmega161 AVR RISC microcontroller architecture.
Figure 4. The ATmega161 AVR RISC Architecture |
|
|||
|
|
|
Data Bus 8-bit |
|
8K x 16 |
Program |
|
Status |
Interrupt |
Counter |
|
and Control |
Unit |
|
Program |
|
|||
|
|
|
|
|
Memory |
|
|
|
|
|
|
|
|
SPI |
|
|
|
32 x 8 |
Unit |
Instruction |
|
|
General |
|
Register |
|
|
Purpose |
|
|
|
|
Registers |
Serial |
|
|
|
|
UART0 |
Instruction |
|
|
|
|
Decoder |
|
AddressingIndirect |
|
Serial |
|
AddressingDirect |
|
||
|
|
and RTC |
||
|
|
|
ALU |
UART1 |
Control Lines |
|
|
|
8-bit |
|
|
|
|
Timer/Counter |
|
|
|
|
with PWM |
|
|
|
|
16-bit |
|
|
|
1024 x 8 |
Timer/Counter |
|
|
|
Data |
with PWM |
|
|
|
SRAM |
8-bit |
|
|
|
|
Timer/Counter |
|
|
|
|
with PWM |
|
|
|
512 x 8 |
Watchdog |
|
|
|
EEPROM |
|
|
|
|
Timer |
|
|
|
|
|
|
|
|
|
32 |
Analog |
|
|
|
I/O Lines |
Comparator |
7
1228B–09/01

In addition to the register operation, the conventional memory addressing modes can be used on the register file. This is enabled by the fact that the register file is assigned the 32 lowermost Data Space addresses ($00 - $1F), allowing them to be accessed as though they were ordinary memory locations.
The I/O memory space contains 64 addresses for CPU peripheral functions such as Control Registers, Timer/Counters, and other I/O functions. The I/O memory can be accessed directly or as the Data Space locations following those of the register file, $20 - $5F.
The AVR uses a Harvard architecture concept – with separate memories and buses for program and data. The program memory is executed with a two-stage pipeline. While one instruction is being executed, the next instruction is pre-fetched from the program memory. This concept enables instructions to be executed in every clock cycle. The program memory is Self-programmable Flash memory.
With the jump and call instructions, the whole 8K word address space is directly accessed. Most AVR instructions have a single 16-bit word format. Every program memory address contains a 16or 32-bit instruction.
During interrupts and subroutine calls, the return address program counter (PC) is stored on the stack. The stack is effectively allocated in the general data SRAM and, consequently, the stack size is only limited by the total SRAM size and the usage of the SRAM. All user programs must initialize the SP (stack pointer) in the reset routine (before subroutines or interrupts are executed). The 16-bit stack pointer is read/write accessible in the I/O space.
The 1K byte data SRAM can be easily accessed through the five different addressing modes supported in the AVR architecture.
The memory spaces in the AVR architecture are all linear and regular memory maps.
8 ATmega161(L)
1228B–09/01

ATmega161(L)
Figure 5. Memory Maps |
|
Program Memory |
Data Memory |
$000 |
|
32 Gen. Purpose |
|
|
Working Registers |
|
|
Program Flash |
64 I/O Registers |
|
|
(8K x 16) |
|
Internal SRAM
(1024 x 8)
External SRAM
(0 - 63K x 8)
$1FFF
$0000
$001F $0020
$005F $0060
$045F $0460
$FFFF
A flexible interrupt module has its control registers in the I/O space with an additional global interrupt enable bit in the status register. All the different interrupts have a separate interrupt vector in the interrupt vector table at the beginning of the program memory. The different interrupts have priority in accordance with their interrupt vector position. The lower the interrupt vector address, the higher the priority.
9
1228B–09/01

The General Purpose
Register File
Figure 6 shows the structure of the 32 general purpose working registers in the CPU.
Figure 6. AVR CPU General Purpose Working Registers
7 |
0 |
Addr. |
|
|
|
|
R0 |
$00 |
|
|
|
|
|
|
|
|
R1 |
$01 |
|
|
|
|
|
|
|
|
R2 |
$02 |
|
|
|
|
|
|
|
|
… |
|
|
|
|
|
|
|
|
|
R13 |
$0D |
|
|
|
|
|
|
General |
|
R14 |
$0E |
|
|
|
|
|
|
Purpose |
|
R15 |
$0F |
|
|
|
|
|
|
Working |
|
R16 |
$10 |
|
|
|
|
|
|
Registers |
|
R17 |
$11 |
|
|
|
|
|
|
|
|
… |
|
|
|
|
|
|
|
|
|
R26 |
$1A |
X-register low byte |
|
|
|
|
|
|
|
R27 |
$1B |
X-register high byte |
|
|
|
|
|
|
|
R28 |
$1C |
Y-register low byte |
|
|
|
|
|
|
|
R29 |
$1D |
Y-register high byte |
|
|
|
|
|
|
|
R30 |
$1E |
Z-register low byte |
|
|
|
|
|
|
|
R31 |
$1F |
Z-register high byte |
|
|
|
|
|
All the register operating instructions in the instruction set have direct and single cycle access to all registers. The only exceptions are 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..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 6, 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 The registers R26..R31 have some added functions to their general purpose usage. Z-register 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 7. |
X-, Y-, and Z-registers |
|
|
|
|
|
15 |
|
0 |
|
|
|
|
|
|
|
|
X-register |
|
7 |
0 |
7 |
0 |
|
|
|
|
|
|
|
|
R27 ($1B) |
|
R26 ($1A) |
|
|
15 |
|
0 |
|
|
|
|
|
|
|
|
Y-register |
|
7 |
0 |
7 |
0 |
|
|
|
|
|
|
|
|
R29 ($1D) |
|
R28 ($1C) |
|
|
15 |
|
0 |
|
|
|
|
|
|
|
|
Z-register |
|
7 |
0 |
7 |
0 |
|
|
|
|
|
|
|
|
R31 ($1F) |
|
R30 ($1E) |
|
10 ATmega161(L)
1228B–09/01