虽然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位的指令。(www.xing528.com)
单片机的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单片机有很大的帮助。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。