通用中断控制寄存器决定中断向量表的放置地址。
>MCU控制寄存器…MCUCR
·Bit l——lVSEL:中断向量选择
当IVSEL为“0”时,中断向量位于Flash存储器的起始地址;当IVSEL为“l”时,中断向量转移到Boot区的起始地址。实际的Boot区起始地址由熔丝位BOOTSZ确定。为了防止无意间改变中断向量表,修改IVSEL时需要遵照如下过程:
①置位中断向量修改使能位IVCE。
②在紧接的4个时钟周期里将需要的数据写入IVSEL,同时对IVCE写“0"。执行上述序列时中断自动禁止。其实,在置位IVCE时中断就被禁止了,并一直保持到写IVSEL操作之后的下一条语句。如果没有IVSEL写操作,则中断在置位IVCE之后的4个时钟周期保持禁止。状态寄存器的位1不受此序列的影响。需要注意的是:若中断向量位于Boot区,且Boot锁定位BLB02被编程,则执行应用区的程序时中断被禁止;若中断向量位于应用区,且Boot锁定位BLBl2被编程,则执行Boot区的程序时中断被禁I卜.
·Bit 0——IVCE:中断向量修改使能
改变IVSEL时IVCE必须置位。在IVCE或IVSEL写操作之后4个时钟周期,IVCE被硬件清零。如前面所述,置位IVCE将禁止中断。汇编代码如下:
Move_interrupts:
;使能中断向量的修改
idi rl6,(1<
out MCUCR,rl6
;将中断向量转移到boot区
idi rl6,(i<
out MCUCR.rl6
ret
C代码例程:
void Move.—interrupts(void)
/*使能中断向量的修改*/
MCUCR=(1<
/*将中断向量转移到boot区*/
MCUCR=(i<
更多资讯请关注