AVR复位和中断处理
发表:2023-08-29 12:06:19 阅读:30

AVR有不同的中断源。每个中断和复位在程序空间都有一个独立的中断向量。所有的中断事件都有自己的使能位。当使能位置位且状态寄存器的全局中断使能位1也置位时,中断可以发生。根据不同的程序计数器PC数值,在引导锁定位BLB02或BLBl2被编程的情况下,中断可能自动禁止,这个特性提高了软件的安全性。

程序存储器空间的最低地址默认定义为复位和中断向量。向量所在的地址越低,优先级越高。RESET具有最高的优先级,下一个则为INT0(外部中断请求0)。通过置位MCU控制寄存器(MCUCR)的IVSEL,中断向量可以移至引导Flash的起始处。编程熔丝位BOOTRST可以将复位向量也移至引导Flash的起始处。

当中断发生时,全局中断使能位1被清零,所有的中断都被禁止。用户软件可以通过置位I来使能中断嵌套。此时所有的中断都可以中断当前中断。执行RETl指令后I自动置位。从根本上说有两种类型的中断。第一种是由事件触发并置位的中断标志。对于这些中断,程序计数器跳转到实际的中断向量以执行中断处理例程,同时硬件将清除相应的中断标志。中断标志也可以通过对其写“1’’来清除。当中断发生后,如果相应的中断使能位为“0",则中断标志位置位,并一直保持到中断执行或者被软件清除。类似的,如果全局中断标志被清零,则所有已发生的中断都不会被执行,直到l置位。然后被挂起的各个中断按中断优先级依次执行。第二种类型的中断则是只要满足中断条件,就会一直触发。这些中断不需要中断标志。若中断条件在中断使能之前就消失了,则中断不会触发。

AVR退出中断后总是回到主程序并执行一条指令才可以去执行其他被挂起的中断。进入中断例程时,状态寄存器不会自动保存;中断返回时也不会自动恢复。这些工作必须由软件来完成。

AVR中断响应时间最少为4个时钟周期。4个时钟周期后,程序跳转到实际的中断处理例程。在这4个时钟期间,PC自动入栈。在通常情况下,中断向量为一个跳转指令.此跳转要花3个时钟周期。如果中断在一个多周期指令执行期间发生,则在此多周期指令执行完后MCU才会执行中断程序。若中断发生时MCU处于睡眠模式.则中断响应时间增加到8个时钟周期。增加的时钟周期是由于唤醒启动时间引入的。

中断返回亦需4个时钟。在此期间PC(两个字节)将被弹出栈.堆栈指针加2.状态寄存器SREG的I置位。

 

电子街推荐阅读:

ATmega128硬件结构和主要特点 

ATmega128单片机的主要性能 

ATmega128单片机封装和引脚 

ATmega128单片机的指令系统 

AVR内核的结构 

微控制器MCU

指令执行时序

 

 

 

 

推荐品牌: