1.2 AT mega1 28单片机的结构
ATmega128内核采用了哈佛(Harvard)结构,如图1.2所示。它具有独立的数据和程序总线,程序指令通过流水线运行,在执行一条指令的同时读取下一条指令,这种方式实现了指令的单时钟周期运行。
图1.2 ATmega128单片机内核的结构
ATmega128单片机的程序存储器是可以在线编程的Flash内存,其快速访问寄存器由32个8位通用寄存器组成,访问时间为一个时钟周期。因此,ATmega128单片机可以实现单时钟周期的运算器操作。在典型的运算器操作中,两个分别位于不同通用寄存器中的操作数被同时访问,然后执行运算,结果再被送回到通用寄存器,整个指令执行过程仅需一个时钟周期。
ATmega128单片机的32个通用寄存器里有6个寄存器可以联合起来构成3个16位的X、Y、Z间接寻址寄存器,可以用来寻址数据空间以实现高效的地址运算,其中一个指针还可以作为程序存储器查询表的地址指针。
ATmega128单片机的算术与逻辑运算器(ALU)支持通用寄存器之间及通用寄存器和常数之间的算术与逻辑运算,ALU也可以执行单寄存器操作,当运算完成之后更新相应的状态寄存器的内容,以反映操作结果。ATmega128单片机通过有条件或无条件的跳转指令和调用指令来控制程序的工作流程,从而可以直接寻址整个地址空间。
ATmega128单片机的存储器空间为线性的平面结构,其程序存储器空间分为两个区:引导程序区和应用程序区。其I/O存储器空间中包含64 个可以直接寻址的地址,作为ATmega128单片机外部设备的控制寄存器、SPI和其他I/O功能的控制地址,映射到数据空间,即寄存器文件之后的地址为0x20~0x5F;另外,ATmega128 单片机在SRAM中还有可扩展的I/O空间,对应的地址为0x60~0xFF。
在ATmega128单片机响应中断时间和进入中断服务子程序时,其返回地址的程序计数器(PC)被保存于堆栈之中,堆栈位于通用数据SRAM中,因此其深度受限于SRAM的大小。在复位相关代码中,首先要初始化堆栈指针SP,这个指针位于I/O空间,可以进行读/写访问。ATmega128可以通过5种不同的寻址方式访问数据SRAM。
ATmega128单片机内置一个灵活的中断模块,其控制寄存器位于I/O空间内,并且有一个位于状态寄存器SREG中的全局中断使能位。每个中断在中断向量表里都有独立的中断向量,其优先级与该中断向量在中断向量表的位置有关,中断向量地址越低,其优先级越高。