大多数操作寄存器文件的指令都可以直接访问所有的寄存器,而且多数这样的指令的执行时间为单时钟周期。
如Figure 4-2 所示,每个寄存器都有一个数据内存地址将他们直接映射到用户数据空间的头32个地址。虽然寄存器文件的物理实现不是SRAM,这种内存组织方式在访问寄存器方面具有极大的灵活性,因为X、Y、Z 寄存器可以设置为指向任意寄存器的指针。
寄存器R26..R31 除了用作通用寄存器外,还可以作为数据间接寻址用的地址指针。这三个间接寻址寄存器示于Figure 4-3。
Figure 4-3. X、Y、Z 寄存器
在不同的寻址模式中,这些地址寄存器可以实现固定偏移量,自动加一和自动减一操作。具体细节请参见指令集。
4.5 堆栈指针
堆栈指针主要用来保存临时数据、局部变量和中断/ 子程序的返回地址。堆栈指针总是指向堆栈的顶部。要注意AVR 的堆栈是向下生长的,即新数据推入堆栈时,堆栈指针的数值将减小。
堆栈指针指向数据SRAM 堆栈区。在此聚集了子程序和中断堆栈。调用子程序和使能中断之前首先要定义堆栈空间,而且堆栈指针必须指向高于0x0100 的地址空间,最好为RAMEND。使用PUSH 指令将数据推入堆栈时指针减一;而子程序或中断返回地址推入堆栈时指针将减二。使用POP指令将数据弹出堆栈时,堆栈指针加一;而用RET或RETI指令从子程序或中断返回时堆栈指针加二。AVR的堆栈指针由I/O空间中的两个8位寄存器实现。实际使用的位数与具体器件有关。注意到某些AVR 器件的数据区太小,用SPL 就足够了。此时将不给出SPH 寄存器。
4.7 指令执行时序
这一节介绍指令执行过程中的访问时序。AVR CPU 由系统时钟clkCPU 驱动。此时钟直接来自选定的时钟源。芯片内部不对此时钟进行分频。
Figure 6 说明了由Harvard 结构决定的并行取指和指令执行,以及可以进行快速访问的寄存器文件的概念。这是一个性能高达1 MIPS/MHz,具有优良的性价比、功能/ 时钟比、功能/ 功耗比的基本的流水线概念。
Figure 4-4 并行取指和指令执行
Figure 4-5 演示的是寄存器文件内部访问时序。在一个时钟周期里,ALU 可以同时对两个寄存器操作数进行操作,同时将结果存回到目的寄存器中去。
Figure 4-6 单时钟周期ALU 操作
4.8 复位与中断处理
AVR有不同的中断源。每个中断和复位在程序空间都有自己独立的中断向量。所有中断事件都有自己的使能位。在使能位置位,且状态寄存器的全局中断使能位I也置位的情况下,中断可以发生。根据不同的程序计数器PC 数值,在引导(Boot) 锁定位BLB02 或BLB12被编程的情况下,中断可能自动禁止。这个特性提高了软件的安全性。详见 “ 存储器编程” 部分。
程序存储区的最低地址缺省为复位向量和中断向量。完全的向量列表请参见“ 中断” 。列表也决定了不同中断的优先级。向量所在的地址越低,优先级越高。RESET 具有最高的优先级,下一个则为INT0 – 外部中断请求0。通过置位MCU 控制寄存器 MCUCR的IVSEL (具体参见“ 中断” ), 中断向量可以移至引导Flash 的起始处。编程熔丝位BOOTRST 可以将复位向量也移至引Flash 的起始处。具体参见“Boot Loader支持RWW 自编程, ATmega88 与ATmega
从根本上说有两种类型的中断。第一种由事件触发并置位中断标志。对于这些中断,程序计数器跳转到实际的中断向量以执行中断处理例程,同时硬件将清除相应的中断标志。中断标志也可以通过对其写”
中断条件在中断使能之前就消失了,中断不会被触发。AVR 退出中断后总是回到主程序并至少执行一条指令才可以去执行其他被挂起的中断。
要注意的是,进入中断服务程序时状态寄存器不会自动保存;中断返回时也不会自动恢复。这些工作必须由用户通过软件来完成。使用CLI 指令来禁止中断时,中断禁止立即生效。没有中断可以在执行CLI 指令后发生,即使它是在执行CLI 指令的同时发生的。下面的例子说明了如何在写EEPROM 时使用这个指令来防止中断发生以避免对EEPROM 内容的可能破坏。中断响应时间AVR 中断响应时间最少为4 个时钟周期。4 个时钟周期后,程序跳转到实际的中断处理例
程。在这4 个时钟期间, PC 自动入栈。在通常情况下,中断向量为一个跳转指令,此跳转要花3 个时钟周期。如果中断在一个多时钟周期指令执行期间发生,则在此多周期指令执行完毕后MCU 才会执行中断程序。若中断发生时MCU 处于休眠模式,中断响应时间还需增加4 个时钟周期。此外还要考虑到不同的休眠模式所需要的启动时间。这个时间不包括在前面提到的时钟周期里。中断返回需要4 个时钟。在此期间PC( 两个字节) 将被弹出栈,堆栈指针加二,状态寄存器SREG 的I 置位。
<< 上一页 [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] ... 下一页 >>