中断源和中断向量:
缺省情况下,AVR的程序存储区的最低端,即从Flash地址的0x0000开始用于放置中断向量,称做中断向量区。中断向量区大小 = 中断源个数 * 每个中断向量占据字数。对于Flash比较小的AVR处理器,每个中断向量占据一个字的空间,用于放置一条相对转移指令 rjmp(跳转范围-2K~+2K),而Flash较大的AVR,每个中断向量占据两个字空间,用于放置一条绝对转移指令 jmp,用于跳转到相应中断的中断服务程序的起始地址。


在这21个中断中,包含1个非屏蔽中断(RESET)3个外部中断(INT0、INT1、INT2)和17个内部中断。
RESET $000 | INT0 $002 | INT1 $004 | INT2 $024 |
INT0、INT1和INT2是3个外部中断源,它们是分别由芯片外部引脚PD2、PD3、PB2上的电平变化或状态触发的。通过对控制寄存器MCUCR和控制与状态寄存器MCUCSR的配置,外部中断可以定义为由PD2、PD3、PB2引脚上的电平的下降沿、上升沿、逻辑电平变化,或者低电平触发(INT2仅支持电平变化的边沿触发),这为外部硬件电路和设备向AVR申请中断服务提供了很大的方便。
**关于计数器的中断寄存器:TIMER2 COMP、TIMER2 OVF、TIMER1 CAPT、TIMER1 COMPA、TIMER1 COMPB、TIMER1 OVF、TIMER0 OVF、TIMER0 COMP这8个中断是来自于ATmega16内部的3个定时计数器触发的内部中断。定时器处在不同的工作模式下时,这些中断的发生条件和具体意义是不同的。