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