微控制器MCU
发表:2023-08-29 12:06:22 阅读:91

1.ALU(算述逻辑单元)

AVR ALU与32个通用工作寄存器直接相连。寄存器与寄存器之间、寄存器与立即数之间的ALU运算只需要一个时钟周期。ALU操作分为3类:算术、逻辑和位操作。此外,还提供了支持无/有符号数和分数乘法的乘法器。

2.状态寄存器

状态寄存器包含了最近执行的算术指令的结果信息。这些信息可以用来改变程序流程以实现条件操作。状态寄存器的内容只有在ALU运算结束后才会更新。这样在多数情况下就不需要专门的比较指令了,从而使系统运行更快速,代码效率更高。

在进入中断例程时状态寄存器不会自动保存,中断返回时也不会自动恢复。这些工作需要软件来处理。

AVR中断寄存器SREG的定义如下:

>Bit 7——l:全局中断使能

置位时使能全局中断。单独的中断使能由其他独立的控制寄存器控制。如果I清零,则不论单独中断标志置位与否,都不会产生中断。任意一个中断发生后I清零,而执行RETl指令后1置位以使能中断。l也可以通过SEl和CLl指令来置位和清零。

>Bit 6——T:位复制存储

位复制指令BLD和BST利用T作为目的或源地址。BST把寄存器的某一位复制到T,而BLD把T复制到寄存器的某一位。

>Bit 5——H:半进位标志

半进位标志H表示算术操作发生了半进位。此标志对于BCD运算非常有用。

>Bit 4——S:符号位,S—N①V

S为负数标志N与2的补码溢出标志V的“异或"。

>Bit 3——V:2的补码溢出标志

支持2的补码运算。

4 >Bit 2——N:负数标志

表明算术或逻辑操作结果为负。

>Bit l——2:零标志

表明算术或逻辑操作结果为零。

>Bit 0——C:进位标志

表明算术或逻辑操作发生了进位。

3.通用工作寄存器组

寄存器文件针对AVR增强型RISC指令集做了优化。为了获得需要的性能和灵活性,寄存器文件支持以下的输入/输出方案:

一个8位输出操作数和一个8位结果输人;

两个8位位输出操作数和一个8位结果输入;

两个8位位输出操作数和一个l 6位结果输入;

一个l6位位输出操作数和一个l6位结果输入。

大多数操作寄存器文件的指令都可以直接访问所有的寄存器,而且多数的执行时间为单时钟周期。

图2—4为CPU的32个通用工作寄存器的结构。其中,每个寄存器都有一个数据内存地址,将它们直接映射到用户数据空间的头32个地址。虽然寄存器文件的物理实现不是SRAM.这种内存组织方式在访问寄存器方面具有极大的灵活性,因为X、Y、Z寄存器可以设置为指向任意寄存器的指针。

4.X、Y和Z地址指针寄存器

寄存器R26----R3 1除了用作通用寄存器外,还可以作为用于数据间接寻址的地址指针。这3个间接寻址寄存器如图2—5所示。

在不同的寻址模式中,这些地址寄存器可以实现固定偏移量,自动加l和自动减l功能。

5.堆栈指针寄存器SP

堆栈指针主要用来保存临时数据、局部变量和中断/自程序的返回地址。堆栈指针总是指向堆栈的顶部。要注意AVR的堆栈是向下生长的,即新数据推人堆栈时堆栈指针的数值将减小。

堆栈指针指向位于SRAM的函数及中断堆栈。堆栈空间必须在调用函数或中断使能之前定义。指针必须指向高于$60的地址。用PUSH指令推数据入栈时,堆栈指针将减1;而当调用函数或中断时,指针将减2。使用POP指令时,堆栈指针将加l;而用RET或RETl返回时.指针将加2。

AVR堆栈指针占用了I/O空间两个8位寄存器,使用的位数由实际情况决定。注意,在AVR结构中某些操作使用的数据空间很小,只要SPL即可,此时不会给出SPH寄存器。

6.RAM页面的Z选择寄存器RAMPZ

>Bits 7~2——Res:保留

保留位,读操作时返回值为零;在写数据时要写入0,以保证与未来产品的兼容。

>Bit l——RAMPZ0:扩展RAM页面2指针

RAMPZ寄存器用于选择Z指针访问的是哪一个64 KB RAM。由于ATmegal28不支持超过64 KB的存储器,因此RAMPZ只用来协助ELPM/SPM指令决定访问哪一个程序存储器页。不同的RAMPZ0的作用如下:

RAMPZ0—0 ELPM/SPM可以访问程序存储器地址$0000~$7FFF(低64 KB)

RAMPZ0—1 ELPM/SPM可以访问程序存储器地址$8000~$FFFF(高64 KB)

注意:LPM不受RAMPZ设置的影响。

 

电子街推荐阅读:

ATmega128硬件结构和主要特点 

ATmega128单片机的主要性能

ATmega128单片机封装和引脚

ATmega128单片机的指令系统

AVR内核的结构