1.1 AVR系列单片机
所谓单片机,就是在一个芯片上集成了构成一个计算机系统最基本的单元,如CPU、程序存储器、数据存储器、各种类型的功能模块和输入/输出接口等,使其具有一台计算机的基本属性。由于单片机主要用于逻辑运算和系统控制,因此也称其为微型控制单元,即MCU(Micro Control Unit)。
1.1.1 系出名门的AVR
美国ATMEL(爱特梅尔)公司是全球领先的半导体产品设计、制造和行销企业,其产品线涵盖工业、消费、安全、通信、计算和汽车等多个应用领域。在微处理器产品中,ATMEL公司有基于8051内核、AVR内核和ARM内核的三大系列多款单片机产品。
ATMEL公司把8051内核与其擅长的Flash存储器技术相结合,最早推出了片内集成可重复擦写1000次以上Flash程序存储器、采用低功耗CMOS工艺的8051兼容单片机。例如,家喻户晓的AT89C51、AT89C52、AT89C2051都是ATMEL公司基于8051内核的典型产品。在此基础上,ATMEL公司又推出了基于ISP在线编程技术的AT89SXX系列产品和低功耗、单周期的AT89LPXX系列产品。ATMEL基于8051内核的系列产品,对我国的单片机市场影响巨大,并且在市场上占有相当的份额。
由于8051内核结构的单片机采用的是复杂指令系统CISC(Complex Instruction Set Computer)体系,基于CISC结构的单片机存在着指令系统不等长、指令数多、CPU工作效率低、代码执行速度慢等诸多缺点,随着时代的发展,它已经不能满足高档消费类电子产品和嵌入式系统的应用需求。为此,ATMEL公司又创新地推出了全新配置的采用精简指令集RISC(Reduced Instruction Set CPU)结构的单片机,简称AVR系列单片机。
AVR系列单片机对C语言和汇编语言代码进行了优化,大大提高了代码的执行效率,使其在执行指令和数据吞吐能力方面比传统CISC结构的单片机要快很多倍。此外,AVR系列单片机还具有丰富的片内模拟和数字外设,具备系统内可编程的E2PROM和FLASH存储器,从而大大提高了其灵活性和适用性。
1.1.2 AVR系列产品家族
AVR系列的8位单片机产品结构如图1-1所示。
图1-1 AVR系列单片机产品结构
从图中我们不难看出AVR单片机可以分为三个系列:
1)tinyAVR系列。此系列单片机产品定位于小型化低成本应用,芯片内部资源配置相对少一些,引脚数目也较少,适用于小型家用电器、简单的逻辑控制等低成本方面的应用。
2)megaAVR系列。megaAVR系列是目前ATMEL公司8位机的主打产品,也是备受市场青睐的一类单片机。该系列单片机产品线丰富,用户可根据实际需要在存储器、管脚数和外设方面选择不同型号的产品。megaAVR系列不仅具有强大的运算和处理能力,而且片上配置了如闪存、E2PROM、SPI、TWI、USART、USB、CAN、看门狗定时器以及片内振荡器等诸多资源。所有的megaAVR系列产品都具有自我编程能力,可以实现快速、安全的在线升级功能。使用megaAVR系列单片机开发产品,既可以简化设计,又可有效地降低成本,是性价比很高的一类产品。
3)XMEGA系列。XMEGA系列单片机是ATMEL近年来发布的又一种新型单片机,其特点是高实时性、高集成度和超低功耗。它采用了ATMEL的第二代picoPower技术,使其真正可以在1.6V的低电压下运行。XMEGA系列具有快速12位A/D和D/A转换器、DMA控制器、创新的事件系统以及加密引擎,而且所有XMEGA单片机均兼容16位架构,是ATMEL公司8位单片机产品的领先之作,使用XMEGA系列开发产品能够大幅降低功耗并提高系统性能,是高端应用的首选。
以上介绍的tinyAVR系列、megaAVR系列和XMEGA系列单片机,除了外设功能和资源配置不同外,所有三个系列的单片机产品都具有相同的CPU内核,这可以最大限度地方便用户重复使用现有的开发工具和软硬件设计,以节省成本并缩短开发周期。
1.1.3 AVR的特色功能
在使用单片机开发产品时,为了使产品更有竞争力,必须在单片机的性能和价格上做出平衡的考虑。使用AVR系列的单片机就是一个好的选择,它不仅自身成本低,而且开发工具更是“随手可得”。如果你不考虑芯片的仿真,那么一个成本不足10元的ISP下载器即可完成megaAVR系列单片机的烧写任务,可以说AVR开发的硬件门槛很低。
低成本不代表低性能。AVR系列单片机是8位单片机中第一个真正的RISC结构单片机,它采用了大型快速存取寄存器组、快速的单周期指令系统以及单级流水线等诸多先进技术,使得AVR单片机具备了高达1MIPS/MHz的运行处理能力,在市场上同类单片机产品中具有很强的竞争力。归纳起来,AVR系列单片机具有以下八大特点:
1.RISC精简指令集
精简指令集RISC结构是为了提高软件性能而推出的新型处理器结构,可以大幅提高CPU的运行效率。众所周知,51系列单片机采用的是复杂指令集CISC结构,CISC的每一条指令不仅冗长,而且不等长,需要指令译码器对每条指令的起止位置进行判断,然后才能执行。这个过程不仅使处理效率大大降低,而且会使功耗相应提高。而RISC结构的特点则是指令简短而且等长,其优点是无需对指令的起止位置进行判断,提高了代码的执行效率。
2.Harvard体系结构
51系列单片机是基于“冯·诺依曼”(Von-Neumann)结构设计的,这种内核结构的单片机典型特点是程序存储器和数据存储器都挂接在同一条8位的数据总线上,CPU也通过该总线对程序和数据存储器进行访问,在同一时间内,CPU要么从程序存储器中存取指令,要么从数据存储器中存取数据,这样就难免出现总线竞争的情况,从而影响单片机的工作效率。基于“冯·诺依曼”结构的单片机内部结构如图1-2所示。
AVR系列单片机采用的是“哈佛”(Harvard)结构。这种结构的特点是采用分开的指令和数据总线,CPU对数据存储器的访问是通过8位的数据总线来完成的,而对程序存储器的访问则是通过独立的16位指令总线来完成的。“哈佛”结构的优点是指令和数据空间完全分开,可以实现对程序和数据的同时访问,提高了CPU的执行速度和数据的吞吐率。采用“哈佛”结构的单片机内部结构如图1-3所示。
图1-2 “冯·诺依曼”结构的单片机内部结构
图1-3 “哈佛”结构的单片机内部结构
3.指令流水线
指令的执行需要两个步骤,即取指和执行。AVR单片机采用了指令流水线操作,在前一条指令执行时,就对下一条指令进行预读,这种方式的好处在于一条指令的执行可以在一个时钟周期内完成。AVR系列单片机指令的读取和执行方式如图1-4所示。
图1-4 指令流水线
早期单片机由于制造工艺等原因,为确保系统的稳定,采用较高的分频系数对时钟分频。外部振荡器的时钟经分频后成为内部指令执行周期,8051单片机的分频比甚至高达1∶12。AVR系列单片机CPU的工作是由系统时钟直接驱动的,在片内不再进行分频,所以其时钟周期相当于指令周期。由于其采用了指令流水线操作,使一条指令在一个时钟周期内即可执行完毕,从而获得了高达1MIPS/MHz的执行速度。当芯片使用16M晶体时,单周期指令执行时间仅为62.5ns,其速度之快可见一斑。
4.通用寄存器组
AVR系列单片机使用32个通用工作寄存器代替传统意义上的累加器,这相当于有32条立交桥,可以使数据快速通行,从而避免了单一累加器和存储器之间数据传输的瓶颈现象,提高了指令的运行效率和速度。
5.固定中断向量入口
AVR系列单片机具有多个固定的中断向量入口地址,不同的中断对应不同的地址,这使得中断的响应时间变短而且可以预期,在一些对时间敏感的应用中,可以通过软件方法对时间值进行修正。
6.真正的I/O口
AVR系列单片机的I/O口是真正意义上的I/O口,能正确反映输入、输出的状态。I/O口在作为输出时其驱动负载的能力是8051系列所不能比拟的,单个I/O口输入/输出电流均可达到40mA,这样大的驱动能力完全可以直接点亮发光二极管、触发可控硅甚至是驱动微型继电器等外部器件。当I/O口作为输入使用时,可以设置成三态高阻抗输入或带上拉电阻的输入状态。
7.边界扫描
AVR系列单片机设有JTAG接口,支持符合JTAG标准的边界扫描功能,用于芯片检测和在线调试,也可以对片内FLASH、E2PROM、熔丝位和锁定位进行编程。AVR单片机支持多种方式的程序写入,如并行、串行SPI及JTAG等方式,而且芯片具备在线下载(ISP)和在应用下载(IAP)的功能。
8.位加密锁
AVR单片机采用位加密锁(Lock Bit)技术,保密位单元深藏于芯片的内部,无法用电子显微镜看到,从而大大提升了单片机的破解难度。
1.1.4 AVR的产品型号
随着AVR系列单片机产品线的日趋丰富,产品的命名也越来越复杂。在此仅以ATmega32单片机的产品命名为例,说明一下AVR系列产品的命名方法。本书使用的单片机是AVR系列中较有代表性的一款,其完整型号为:“ATMEGA32A–16PU”,以下我们对产品型号进行说明。
1)开头字母“AT”代表ATMEL公司产品,之后的“MEGA”表示该产品是megaAVR系列。
2)“MEGA”后面的数字“32”是产品代号,AVR单片机的产品代号大多与片内的FLASH存储器容量有关,此处的“32”表示片内FLASH存储器的容量是32KB。
3)型号面的字母表示的是工作电压范围。字母“L”表示的是低电压版本,工作电压为2.7~5.5V,但芯片的最高时钟频率会减半。没有字母的表示工作电压为4.5~5.5V,字母“A”则表示该芯片是改进工艺的新产品,工作电压与“L”版相同,均为2.7~5.5V,但最高时钟频率没有限制。
例如:ATmega32最高时钟频率为16MHz,电源电压为4.5~5.5V,而ATmega32L可以低电压运行,电源电压为2.7~5.5V,但最高时钟频率仅为8MHz。ATmega32A就没有时钟频率限制,在2.7~5.5V电压下时钟频率可以运行在16MHz。
4)“-”以后的部分是后缀。其中数字表示该芯片支持的最高系统时钟频率。“16”表示可支持最高为16MHz的系统时钟。
5)后缀第一个字母表示封装。“P”表示芯片为DIP封装,“A”表示芯片为TQFP封装,“M”表示芯片为MLF封装。
6)后缀第二个字母,表示芯片的应用级别。“C”表示芯片为商业级,“I”表示芯片为工业级(有铅)、“U”表示芯片为工业级(无铅)。