2.2 ATmega16单片机的组成
ATMEL公司的AVR单片机是一种基于增强RISC结构的、低功耗、CMOS技术、8位微控制器(Enhanced RISC Microcontroller),目前有Tiny、Mega两个系列50多种型号。虽然功能和外部的引脚各有不同,但它们内核的基本结构是一样的,指令系统相容。本书将会以性能适中的ATmega16单片机作为主要对象,介绍AVR单片机的原理与应用。在实际工程中读者可以根据实际功能要求选择其他型号单片机作为控制核心。
2.2.1 AVR单片机的内核结构
虽然AVR单片机系列有几十种型号,但是它们有着相同的内核结构,指令兼容。图2-2所示为典型的AVR单片机的内核结构图。
为了提高MCU并行处理的运行效率,AVR单片机采用了哈佛结构,具有独立的数据和程序总线。程序存储器里的指令通过一级流水线运行。CPU在执行一条指令的同时读取下一条指令(在本文称为预取)。这个概念实现了指令的单时钟周期运行。
在AVR单片机的内核中,由32个访问操作只需要一个时钟周期的8位通用工作寄存器组成了“快速访问寄存器组”。快速访问寄存器访问时间为一个时钟周期,从而实现了单时钟周期的ALU(Arithmetic Logic Unit,算术逻辑单元)操作。在典型的ALU操作中,两个位于寄存器文件中的操作数同时被访问,然后执行运算,结果再被送回到寄存器文件,整个过程仅需一个时钟周期。寄存器文件里有6个寄存器可以用作3个16位的间接寻址寄存器指针以寻址数据空间,实现高效的地址运算。这3个16位的间接寻址寄存器称为X寄存器、Y寄存器和Z寄存器。其中Z寄存器还能作为间接寻址程序存储器空间的地址寄存器,用于在Flash程序存储器空间进行查表等操作。
图2-2 AVR单片机的内核结构示意图
ALU支持寄存器之间以及寄存器和常数之间的算术和逻辑运算。ALU也可以执行单寄存器操作。运算完成之后状态寄存器的内容得到更新以反映操作结果。程序流程通过有/无条件的跳转指令和调用指令来控制,从而直接寻址整个地址空间。大多数指令长度为16位,亦即每个程序存储器地址都包含一条16位或32位的指令。
单片机的Flash程序存储器空间可以分成两段:引导程序段(Boot Program Section)和应用程序段(Application Program Section)。两个段的读写保护可以分别通过设置对应的锁定位(Lock Bits)来实现。在引导程序段内驻留的引导程序中,可以使用SPM(Scratch Pad Memory,便笺式存储器)指令,实现对应用程序段的写操作(实现在应用编程(IAP)功能,使系统能够自己更新系统程序)。在AVR单片机中,所有的存储器空间都是线性的。数据存储器(SRAM)可以通过5种不同的寻址方式进行访问。
AVR单片机有一个灵活的中断模块。在响应中断服务和子程序调用过程时,程序计数器(PC)中的返回地址将被存储于堆栈之中。堆栈空间将占用数据存储器(SRAM)中一段连续的地址。因此,堆栈空间的大小仅受到系统总的数据存储器(SRAM)的大小以及系统程序对SRAM的使用量的限制。用户程序应在系统上电复位后,对一个16位的堆栈指针寄存器(SP)进行初始化设置(或在子程序和中断程序被执行之前)。
AVR单片机的中断控制由I/O寄存器空间的中断控制寄存器和状态寄存器中的全局中断允许位组成。每个中断都分别对应一个中断向量(中断入口地址)。所有的中断向量构成了中断向量表,该中断向量表位于Flash程序存储器空间的最前面。中断的中断向量地址越小,其中断的优先级越高。
I/O空间为连续的64个I/O寄存器空间,它们分别对应MCU各个外围功能的控制和数据寄存器地址,如控制寄存器、定时器/计数器、A/D转换器及其他的I/O功能等。I/O寄存器空间可使用I/O寄存器访问指令直接访问,也可将其映射为通用工作寄存器组后的数据存储器空间,使用数据存储器访问指令进行操作。I/O寄存器空间在数据存储器空间的映射地址为$020~$05F。
因为AVR单片机的性能非常强大,所以它的内部结构相对MCS-51结构的单片机要复杂。对于没有学过MCS-51单片机的读者来说可能会感觉很难理解,但通过后面章节的介绍及应用实例,会对学习AVR单片机有很大的帮助。
2.2.2 ATmega16的特点
AVR系列单片机中比较典型的芯片是ATmega16。这款芯片具备了AVR系列单片机的主要的特点和功能,不仅适合应用于产品设计,同时也方便初学者入门。其主要特点有:
(1)采用先进RISC结构的AVR内核
131条机器指令,且大多数指令的执行时间为单个系统时钟周期;32个8位通用工作寄存器;工作在16MHz时具有16MIPS的性能;只需要配备2个时钟周期的硬件乘法器。
(2)片内含有较大容量的非易失性的程序和数据存储器
16KB在线可编程(ISP)Flash程序存储器(擦除次数大于1万次),采用Boot Load技术支持IAP功能;1KB的片内SRAM数据存储器,可实现3级锁定的程序加密;512B片内在线可编程EEPROM数据存储器(寿命大于10万次)。
(3)片内含JTAG接口
支持符合JTAG(Joint Test Action Group,联合测试行为组织)标准的边界扫描功能用于芯片检测;支持扩展的片内在线调试功能;可通过JTAG接口对片内的Flash、EEPROM、配置熔丝位和锁定加密位实施下载编程。
(4)外围接口
2个分别带有独立、可设置预分频器的8位定时器/计数器;1个带有可设置预分频器、具有比较、捕捉功能的16位定时器/计数器;片内含独立振荡器的实时时钟芯片(RTC);4路PWM通道;8路10位A/D转换器;面向字节的两线通信接口(Two-wire Serial Interface,TWI)(兼容I2C硬件接口);1个可编程的增强型全双工、支持同步/异步通信的串行接口USART;1个可工作于主机/从机模式的SPI串行接口(支持ISP程序下载);片内模拟比较器;内含可编程的、具有独立片内振荡器的看门狗定时器(WDT)。
(5)其他特点
片内含上电复位电路以及可编程的掉电检测复位电路(BOD);片内含有1MHz/2MHz/4MHz/8MHz、经过标定的、可校正的RC振荡器,可作为系统时钟使用;多达21个各种类型的内外部中断源;有6种休眠模式支持省电方式工作。
(6)宽电压、高速度、低功耗
工作电压范围宽:ATmega16L 2.7~5.5V,ATmega164.5~5.5V;
运行速度:ATmega16L 0~8MHz,ATmega160~16MHz;低功耗:ATmega16L工作在1MHz、3V、25℃时的典型功耗:正常工作模式1.1mA,空闲工作模式0.35mA,掉电工作模式<1μA。
(7)芯片引脚和封装形式
ATmega16共有32个可编程的I/O口(脚),芯片封装形式有40引脚的PDIP、44引脚的TQFP和44引脚的MLF封装。
2.2.3 ATmega16的外部引脚与封装
ATmega16单片机有3种形式的封装:40脚双列直插PDIP、44脚方形的TQFP和MLF形式(贴片形式)。其外部引脚封装如图2-3所示。
图2-3 ATmega16外部引脚与封装示意图
其中,各个引脚的功能如下:
(1)电源、系统晶振、芯片复位引脚
VCC:芯片供电(片内数字电路电源)输入引脚,使用时连接到电源正极。
AVCC:为端口A和片内A/D转换器模拟电路电源输入引脚。不使用A/D转换器时,直接连接到电源正极;使用A/D转换器时,应通过一个低通电源滤波器与VCC连接。
AREF:使用A/D转换器时,可作为外部A/D转换器参考源的输入引脚。
GND:芯片接地引脚,使用时接地。
XTAL2:片内反相振荡放大器的输出端。
XTAL1:片内反相振荡放大器和内部时钟操作电路的输入端。
RESET:芯片复位输入引脚。在该引脚上施加(拉低)一个最小脉冲宽度为1.5μs的低电平,将引起芯片的硬件复位(外部复位)。
(2)32根I/O引脚,分成PA、PB、PC和PD 4个8位端口,它们全部是可编程控制的双(多)功能复用的I/O引脚(口)
4个端口的第一功能是通用的双向数字输入/输出(I/O)口,其中每一位都可以由指令设置为独立的输入口或输出口。当I/O设置为输入时,引脚内部还配置有上拉电阻,这个内部的上拉电阻可通过编程设置为上拉有效或上拉无效。
如果AVR单片机的I/O口设置为输出方式工作,当其输出高电平时,能够输出20mA的电流,而当其输出低电平时,可以吸收40mA的电流。因此,AVR单片机的I/O口驱动能力非常强,能够直接驱动发光二极管(LED)、数码管等。而早期单片机I/O口的驱动能力只有5mA,驱动LED时,还需要增加外部的驱动电路和器件。
芯片复位后,所有I/O口的默认状态为输入方式,上拉电阻无效,即I/O为输入高阻的三态状态。
以上可知,一片小小的Mega16芯片却有非常强大的功能。下面就从Mega16的内部结构出发,逐步地介绍它的工作原理和使用方法。