为了尽量提高性能和并行度,AVR使用了哈佛架构——程序和数据具有分离的存储器和总线。程序存储器中的指令是使用单级流水线执行的。
在执行一条指令时,就从程序存储器中预取出下一条指令。这种想法使得每个时钟周期都能够用于指令的执行。该程序存储器是在系统可编程Flash存储器。可快速访问的寄存器堆包含32个8位的带有单时钟周期访问时间的通用工作寄存器。这样就能够实现单周期算术逻辑单元(ALU)操作。在典型的ALU操作中,从寄存器堆取出2个操作数,执行操作,并将结果存回寄存器堆——都在一个时钟周期内完成。
32个寄存器中的6个可以用作3个16位间接寻址寄存器指针,用于数据空间寻址——实现了高效的地址计算。3个地址指针中的1个也可以用作Flash程序存储器中查找表的地址指针。这些附加的功能寄存器是16位X、Y和Z寄存器。
ALU支持寄存器之间或常量和寄存器之间的算术和逻辑运算。单寄存器操作也可以在ALU中执行。完成一次算术操作后,状态寄存器会更新以反映运算结果的相关信息。程序流程由条件和无条件跳转及调用指令来控制,这些指令能够对整个地址空间进行直接寻址。
大多数AVR指令采用单个16位字的格式。每个程序存储器地址都包含一条16或32位指令。在中断和子程序调用时,返回地址程序计数器(PC)存储在堆栈中。这个堆栈实际上分配在通用数据SARM中,因此堆栈大小只受限于SRAM总容量和SRAM的用法。所有用户程序都必须在复位例行程序中初始化SP(在执行子程序或中断之前)。
堆栈指针(SP)可以在I/O空间中进行读/写访问。数据SRAM可以方便地通过AVR架构所支持的5种不同的寻址模式进行访问。AVR架构中的存储器空间都是线性的,并采用常规存储器映射。
一个灵活的中断模块在I/O空间中有自己的控制寄存器,并带有状态寄存器中的1个附加的全局中断使能位。所有中断在中断向量表中有单独的中断向量。这些中断的优先级与它们的中断向量位置一致。中断向量地址越低,优先级越高。
I/O存储器地址包含64个用于CPU外设功能(如控制寄存器,SPI以及其他I/O功能)的地址。I/O存储器可以直接进行访问,也可以作为紧随寄存器堆之后的地址空间位置0x20-0x5F进行访问。 |