CPU的主要任务是保证程序的正确执行.因此它必须能够访问存储器、执行运算、控制外设以及处理中断。图2—3为AVR结构框图。
为了得到最大程度的性能以及并行性.AVR采用Harvard结构,具有独立的数据和程序总线 。程序存储器的指令通过一级流水线运行。CPU在执行一条指令的同时读取下一条指令(在本书称为预取)。这个概念实现了指令的单时钟周期运行。程序存储器为可以在线编程的Flash。
快速访问寄存器文件包括32个8位通用工作寄存器,而且都可以在一个时钟周期内访问,从而实现单时钟周期的ALU操作。在典型的ALU操作过程中,两个位于寄存器文件中的操作数同时被访问,然后执行相应的运算,结果再被送回寄存器文件。整个过程仅需要一个时钟周期。
寄存器文件里有6个寄存器可以用作3个16位的间接地址寄存器指针,以寻址数据空间,实现高效的地址运算。其中一个指针还可以作为程序存储器查询表的地址指针。这些附加的功能寄存器即为l6位的X、Y、Z寄存器。
ALU支持寄存器之间以及寄存器和常数之间的算术和逻辑运算。ALU也可以执行单寄存器操作。运算完成之后状态寄存器的内容将更新以反映操作结果。程序流程通过有/无条件的跳转指令和调用指令来控制,从而直接寻址整个地址空间。大多数指令长度为l6位,亦即每个程序存储器地址都包含一条l6位或32位的指令。
程序存储器空间分为两个区:引导程序区和应用程序区。这两个区都有专门的锁定位以实现读和读/写保护。用于写应用程序区的SPM指令必须位于引导程序区。
在中断和调用子程序时,返回地址程序计数器(PC)保存于堆栈之中。堆栈位于通用数据SRAM,故其深度仅受限于SRAM的大小。在复位例程里,用户首先要初始化堆栈指针SP。这个指针位于I/O空间,可以进行读/写访问。数据SRAM可以通过5种不同的寻址模式进行访问。AVR存储器空间为线性的平面结构。
AVR具有一个灵活的中断模块。控制寄存器位于I/O空间。状态寄存器里有全局中断使能位。在程序存储器起始处有一个中断向量表,每一个中断在此都有独立的中断向量。各个中断的优先级与其在中断向量表的位置有关,中断向量地址越低,优先级越高。
I/O存储器空间包含64个可以直接寻址的地址。映射到数据空间即为寄存器文件之后的地址$20~$5F。此外,ATmegal28在SRAM里还有扩展的I/O空间,位于地址$60~$FF。但是只能使用ST/STS/STD和LD/LDS/LDD指令。
电子街推荐阅读: