ATmega4888168cn中文手册
ATmega48/88/168
综述
ATmega48/88/168是基于AVR增强型RSC结构的低功耗8位CMOS微控制器。由于其先
进的指合集以及单时钟周期指合执行时间,ATmega48/88/168的数据吞吐率高达
M|PS/MHZ,从而可以缓减系统在功耗和处理速度之间的矛盾。
方框图
Figure2.结构框图
Watchdog
Power
Timer
debugWIRE
Supervision
Watchdog
POR/BOd&
PROGRAM
osci‖lat
RESET
LOGIC
Circuits
Flash
SRAM
Clock
Generation
AVRCPU
EEPROM
AVcC
GND
8bitT/c
16bitT/C1
A/DConv
Analog
Internal
8bitT/C2
Cor
USARTO
TWI
PORTD(8)
PORTB(8)
PORTC(7)
RESET
XTAL[1.2
PD0.7]
PB[0.7]
PC[0.6ADC[6.71
个m
2545D-AVR-07/04
m
AVR内核具有丰富的指合集和32个通用工作寄存器。所有的寄存器都直接与算术逻辑单
元(AL∪)相连接,使得一条指合可以在一个时钟周期内同时访问两个独立的寄存器。这种
结构大大提高了代码效率,并且具有比普通的cSC微控制器最高至0倍的数据吞吐率。
ATmega48/88/168有如下特点:4K/8K/16K字节的系统内可编程Flash(具有在编程过程中
还可以读的能力,即RWW),256/512/512字节EEPROM,512/1K1K字节SRAM
23个通用O口线,32个通用工作寄存器,三个具有比较模式的灵活的定时器/计数器
(T/C,片内/外中断,可编程串行USART,面向字节的两线串行接囗,一个SP串行端口,
个6路10位ADC(TQFP与MLF封装的器件具有8路10位ADC),具有片内振荡器
的
可编程看门狗定时器,以及五种可以通过软件选择的省电模式。空闲模式时CPU停止
工作,而SRAM、TC、USART、两线串行接口、SP端口以及中断系统继续工作;掉
电模式时晶体振荡器停止振荡,所有功能除了中断和硬件复位之外都停止工作,寄存器的
内容则一直保持;省电模式时异步定时器继续运行,以允许用户维持时间基准,器件的其
他部分则处于睡眠状态;ADC噪声抑制模式时cPU和所有的MO模块停止运行,而异步
定时器和ADC继续工作,以减少ADC转换时的开关噪声;Standby模式时振荡器工作
而其他部分睡眠,使得器件只消耗极少的电流,同时具有快速启动能力。
ATmega48/88/168是以Atme的高密度非易失性内存技术生产的。片内SPFlash可以通
过SPI接口、通用编程器,或引导程序进行多次编程。引导程序可以使用任意接口烀应用
程序来下载到应用Flash存储区。在更新应用Fash存储区时引导程序区的代码继续运
行,从而实现了FLASH的RWW操作。通过烀8位RISCCPU与系统内可编程的Fash
集成在一个芯片内,ATmega48/88/168为许多顿入式控制应用提供了灵活而低成本的方
案
ATmega48/88/168AVR有整套的开发工具,包括C编译器,宏汇编,程序调试器/仿真器
和评估板。
长度上存在差别。Tabe1给出了三种器件在存储器与中断向量长度方面的差刷等向量
ATmega48,ATmega88,与ATmega48、ATmega88与ATmega168只是在存储器大小、bootloader支持及中
ATmega168的兼容性
Tabe1.存储器大小简述
器件
Flash
EEPROM
RAM
中断向量长度
ATmega48
4K字节
256字节
512字节
个指合字(16位)
ATmega88
8K字节
512字节
1K字节
个指合字(16位)
ATm1816K字节512字节1K字节两个指命字(82位)
ATmega88与ATmega168支持真正的同时读写自编程操作。芯片具有独立的Boot
Loader区,SPM指爷只能在这个FLASH区里得到执行。而ATmega48不支持同时读写操
作,它没有独立的Bootloader区,SPM指合可以访问整个Fash区。
引脚说明
数字电路的电源。
GND
地
端口
端口B为8位双向/O口,并具有可编程的内部上拉电阻。其输出缓冲器具有对称的驱动
B(PB7.0)XTAL1ⅨXTAL2Tosc1特性,可以输出和吸收大电流。作为输人使用时,若内部上拉电阻使能,端口被外部电路
斤osc2
拉低时将输出电流。在复位过程中,即使系统时钟还未起振,端口B保持为高阻态。
通过对系统时钟选择位的设定,PB6可作为反向振荡放大器与内部时钟操作电路的输人
通过对系统时钟选择位的设定,PB7可作为反向振荡放大器的输出。
ATmega48/88/168
2545D-AVR-07104
ATmega48/88/168
系统使用内部RC振荡器时,通过设置ASSR寄存器的AS2位,可以捋PB7.6作为异步
定时器/计数器2的输入口TOsC2.1使用。
端口B也可以用做其他不同的特殊功能,请参见P66“端口B的第二功能”与P22“系
统时钟及其选项”。
端日cPc5,0)
端口C为7位双向MO口,并具有可编程的内部上拉电阻。其输出缓冲器具有对称的驱动
特性,可以输岀和吸收大电流。作为输入使用时,若内部上拉电阻使能,端口被外部电路
拉低时捋输岀电流。在复位过程中,即使系统时钟还未起振,端口C保持为高阻态。
PC6/RESET
RSTDISBL位被编程时,可捋PC6作为一个O口使用。因此,PC6引脚与端口C其他引脚
的电特性是有区别的。
RSTDISBL位未编程时,PC6将作为复位输入引脚Reset。此时,即使系统时钟没有运行,
该引脚上出现的持续时间超过最小脉冲宽度的低电平将产生复位信号。最小脉冲宽度在P
38Tabe20中给出。持续时间不到最小脉冲宽度的低电平不会产生复位信号。
端口C也可以用做其他不同的特殊功能,请参见P69“端口C的第二功能”。
端口D(PD7.0
端口D为8位双向MO口,并具有可编程的内部上拉电阻。其输出缓冲器具有对称的驱动
特性,可以输出和吸收大电流。作为输入使用时,若内部上拉电阻使能,端口被外部电路
拉低时烀输出电流。在复位过程中,即使系统时钟还未起振,端口D呈现为三态。
端口D也可以用做其他不同的特殊功能,请参见P72“端口D的第二功能”。
AVcc为AD转换器的电源。当引脚PC3.0与PC7.6用于ADC时,AVCC应通过一个低通
滤波器与Vc连接。不使用ADC时该引脚应直接与Vcc连接。PC6.4的电源则是由Vc
提供的。
AREF
AREF为ADC的模拟基准输入引脚。
ADc767TQFP与MLF封装)TQFP与MLF封装芯片的ADC76引脚为两个10位AD转换器的输入口,它们的电压由
AVcC提供。
代码例子
本手册包含了一些简单的代码例子以说明如何使用芯片各个不同的功能。这些例子都假
定在编译之前已经包含了正确的头文件。有些C编译器在头文件里并没有包含位定义和
中断,而且各个C编译器对中断处理有自己不同的处理方式。请注意查阅其文档以获取
具体的信息。
个m
5
2545D-AVR-07/04
m
AVRCPU内核
介绍
本节从总体上讨论AVR内核的结构。CPU的主要任务是保证程序的正确执行。因此它必
须能够访问存储器,执行运算,控制外设以及处理中断。
结构综述
Figure3.AVR结构的方框图
为了得到最大程度的性能以及并行性,AVR采用了Harvard结构,具有独立的数据和程
序总线。程序存储器的指合通过一级流水线运行。CPU在执行一条指合的同时读取下
条指合(在本文称为预取)。这个概念实现了指合的单时钟周期运行。程序存储器为可以
在线编程的FLASH。
快速访问寄存器文件包括32个8位通用工作寄存器,访问时间为一个时钟周期。从而可
以实现单时钟周期的ALU操作。在典型的AL操作过程中,两个位于寄存器文件的操作
数同时被访问,然后执行相应的运算,结果再送回寄存器文件。整个过程仅需要一个时钟
周期。
寄存器文件里有6个寄存器可以用作3个16位的间接寻址寄存器指针以寻址数据空间
实现高效的地址运算。其中一个指针还可以作为程序存储器查询表的地址指针。这些附加
的功能寄存器即为16位的Ⅹ、Y、Z寄存器。
ATmega48/88/168
2545D-AVR-07104
ATmega48/88/168
ALU支持寄存器之间以及寄存器和常数之间的算术和逻辑运算。ALU也可以执行单寄存器
操作。运算完成之后状态寄存器的内容捋更新以反映操作结果。
程序流程通过有/无条件的跳转指合和调用指合来控制,从而疸接寻址整个地址空间。大
多数指合长度为16位,亦即每个程序存储器地址都包含一条16位或32位的指合。
程序存储器空间分为两个区:引导程序区和应用程序区。这两个区都有专门的锁定位以实
现读和读/写保护。写应用程序区的SPM指合必须位于引导程序区。
在中断和调用子程序时返回地址的程序计数器(PC)保存于堆栈之中。堆栈位于通用数据
SRAM,故此嵌套深度仅受限于SRAM的大小。在复位例程里用户首先要初始化堆栈指针
SP。这个指针位于ⅣO空间,可以进行读写访问。数据SRAM可以通过5种不同的寻址模
式进行访问。
AVR存储器为线性的平面结构。
AVR具有一个灵活的中断模块。控制寄存器位于WO空间。状态寄存器里有全局中断使能
位。每个中断在中断向量表里都有独立的中断向量。各个中断的优先级与其在中断向量表
的位置有关,中断向量地址越低,优先级越高。
O存储器空间包含64个可以直接寻址的地址,作为CPU外设的控制寄存器、SP|,以及
其他Ⅳ/O功能。映射到数据空间即为寄存器文件之后的地址0x20-0×5F。此外
ATmega48/88/168还有位于SRAM地址0x60-0xFF的扩展VO空间,这些地址只能使用
sT/STS/STD和LD/LDS/LDD指合来访问。
ALU-算术逻辑单元
AVRALU与32个通用工作寄存器直接相连。寄存器与寄存器之间、寄存器与立即数之间
的ALU运算只需要一个时钟周期。ALU操作分为3类:算术、逻辑和位操作。此外还提
供了支持无/有符号数和分数乘法的乘法器。具体请参见“指爷集
个m
2545D-AVR-07/04
AmeL
状态寄存器
状态寄存器包含了最近执行的算术指爷的结果信息。这些信息可以用来改变程序流程以
实现条件操作。如指合集所述,所有ALU运算都将影响状态寄存器的内容。这样,在许
多情况下就不需要专门的比较指合了,从而使系统运行更快速,代码效率更高。
在进入中断服务程序时状态寄存器不会自动保存;中断返回时也不会自动恢复。这些工
作需要软件来处理。
AVR中断寄存器SREG定义如下
5
2
SREG
读/写
R/W
初始值
·Bit7-:全局中断使能
置位时使能全局中断。单独的中断使能由其他独立的控制寄存器控制。如果清霁,则不
论单独中断标志置位与否,都不会产生中断。任意一个中断发生后清,而执行RET
指合后置位以使能中断。|也可以通过SE|和CL|指合来置位和清霁。
·Bit6-T:位拷贝存储
位拷贝指爷BLD和BST利用T作为目的或源地址。BST把寄存器的某一位拷贝到T,而
BLD把T拷贝到寄存器的某一位。
·Bit5-H:半进位标志
半进位标志H表示算术操作发生了半进位。此标志对于BCD运算非常有用。详见“指合
集”的说明。
·Bit4-S:符号位,S=NV
S为负数标志N与2的补码湓出标志V的异或。详见“指合集”的说明。
·Bit3-V2的补码湓出标志
支持2的补码运算。详见“指合集”的说明。
Bit2-N:负数标志
表明算术或逻辑操作结果为负。详见“指合集”的说明。
·Bit1-Z:零标志
表明算术或逻辑操作结果为霁。详见“指合集”的说明。
·Bit0-c:进位标志
表明算术或逻辑操作发生了进位。详见“指合集”的说明。
通用寄存器文件
寄存器文件针对AVR增强型R|SC指合集做了优化。为了获得需要的性能和灵活性,寄
存器文件支持以下的输入/输出方案
输出一个8位操作数,输入一个8位结果
输出两个8位位操作数,输入一个8位结果
输出两个8位位操作数,输入一个16位结果
输出一个16位位操作数,输入一个16位结果
Figure4为cP∪32个通用工作寄存器的结构。
Figure4.AVRCPU通用工作寄存器
0x01
ATmega48/88/168
2545D-AVR-07104
ATmega48/88/168
R2
R13
通用
R14
工作
R15
寄存器
R16
R17
C11
R26
Ox1A
X寄存器,低字节
R27
Ox1B
Ⅹ寄存器,高字节
R28
Y寄存器,低字节
XID
Y寄存器,高字节
R30
OXIE
Z寄存器,低字节
R3′
0×1F
Z寄存器,高字节
大多数操作寄存器文件的指爷都可以值接访问所有的寄存器,而且多数这样的指合的执
行时间为单时钟周期
如Figure4所示,每个寄存器都有一个数据内存地址将他们值接映射到用户数据空间的头
32个地址。虽然寄存器文件的物理实现不是SRAM,这种内存组织方式在访问寄存器方面
具有极大的灵活性,因为X、Y、Z寄存器可以设置为指向任意寄存器的指针。
个m
2545D-AVR-07/04
X、Y、z寄存器
寄存器R26R31除了用作通用寄存器外,还可以作为数据间接寻址用的地址指针。这三
个间接寻址寄存器示于Figure5。
Figure5.Ⅹ、Y、z寄存器
15
X寄存器
R27(0x1B)
R26(0×1A)
15
丫寄存器
R29(0X1D)
R28(0×1C)
15
z寄存器
0
R31(x1F)
R300x1E)
在不同的寻址模式中,这些地址寄存器可以实现固定偏移量,自动加一和自动减一操作。
具体细节请参见指合集。
堆栈指针
堆栈指针主要用来保存临时数据、局部变量和中断/子程序的返回地址。堆栈指针总是指
向堆栈的顶部。要注意AVR的堆栈是向下生长的,即新数据推入堆栈时,堆栈指针的数
值烀减小。
堆栈指针指向数据SRAM堆栈区。在此聚集了子程序和中断堆栈。调用子程序和使能中
断之前首先要定义堆栈空间,而且堆栈指针必须指向高于0x0100的地址空间,最好为
RAMEND。使用PUSH指合将数据推入堆栈时指针减一;而子程序或中断返回地址推入
堆栈时指针捋减二。使用P○P指合捋数据弹出堆栈时,堆栈指针加一;而用RET或RET
指合从子程序或中断返回时堆栈指针加二。
AVR的堆栈指针由MO空间中的两个8位寄存器实现。实际使用的位数与具体器件有关。注
意到某些AVR器件的数据区太小,用SPL就足够了。此时将不给出SPH寄存器。
14
13
12
11
8
SP15
SP14
SP13
SP12
SP11
SP10
SP9
SP8
SPH
SPT
SP6
SP5
SP4
SP3
SP2
SP1
SPO
SPL
读/写
R/W
R/W
R/W
RW
R/W
RW
R/W
R/W
R/
初始值
RAMENDRAMENDRAMENDRAMENDRAMENDRAMENDRAMENDRAMEND
RAMENDRAMENDRAMENDRAMENDRAMENDRAMENDRAMENDRAMEND
10ATmega48/88/168
2545D-AVR-07104
下载地址
用户评论