立即注册 找回密码

微雪课堂

搜索
微雪课堂 AVR AVR单片机内核剖析 Atmega16 查看内容

ATmega16 通用中断控制寄存器GICR

2015-5-27 00:19| 发布者: waveshare-admin| 查看: 3261| 评论: 0

摘要: ATmega16 通用中断控制寄存器GICR

· Bit 1 – IVSEL: 中断向量选择
当IVSEL 为"0“ 时,中断向量位于Flash 存储器的起始地址;当IVSEL 为"1“ 时,中断向量转移到Boot 区的起始地址。实际的Boot 区起始地址由熔丝位BOOTSZ 确定。具体请参考P234“ 支持引导装入程序 – 在写的同时可以读(RWW, Read-While-Write) 的自我编程能力” 。 为了防止无意识地改变中断向量表,修改IVSEL 时需要遵照如下过程:
1. 置位中断向量修改使能位IVCE
2. 在紧接的4 个时钟周期里将需要的数据写入IVSEL,同时对IVCE 写”0”
执行上述序列时中断自动被禁止。其实,在置位IVCE 时中断就被禁止了,并一直保持到写IVSEL 操作之后的下一条语句。如果没有IVSEL 写操作,则中断在置位IVCE 之后的4 个时钟周期保持禁止。需要注意的是,虽然中断被自动禁止,但状态寄存器的位I 的值并不受此操作的影响。
Note: 若中断向量位于Boot区,且Boot锁定位BLB02被编程,则执行应用区的程序时中断被禁止;若中断向量位于应用区,且Boot 锁定位BLB12 被编程, 则执行Boot 区的程序时中断被禁止。有关Boot 锁定位的细节请参见P234“ 支持引导装入程序 – 在写的同时可以读
(RWW, Read-While-Write) 的自我编程能力” 。
· Bit 0 – IVCE: 中断向量修改使能
改变IVSEL 时IVCE 必须置位。在IVCE 或IVSEL 写操作之后4 个时钟周期, IVCE 被硬件清零。如前面所述,置位IVCE 将禁止中断。代码如下:
汇编代码例程:
Move_interrupts:
; 使能中断向量的修改
ldi r16, (1<<IVCE)
out GICR, r16
; 将中断向量转移到boot 区
ldi r16, (1<<IVSEL)
out GICR, r16
ret
C 代码例程
void Move_interrupts(void)
{
/* 使能中断向量的修改*/
GICR = (1<<IVCE);
/* 将中断向量转移到boot 区 */
GICR = (1<<IVSEL);
}


以上资料参考马潮老师的中文手册,由微雪电子整理并发布,转载请注明出处:www.waveshare.net,否则追究相应责任!


298

顶一下

刚表态过的朋友 (298 人)

最新评论

所有教程
内核剖析
    01Atmega16
    深入剖析Atmega16芯片内核
    02Atmega48
    深入剖析Atmega48芯片内核
    03ATmega8
    深入剖析ATmega8芯片内核
    04ATmega128
    深入剖析ATmega128芯片内核
    05ATmega64
    深入剖析ATmega64芯片内核
    06ATmega32
    深入剖析ATmega32芯片内核
    07ATmega168
    深入剖析ATmega168芯片内核
    08ATtiny13
    深入剖析ATtiny13芯片内核
    09ATmega88
    深入剖析ATmega88芯片内核
    010ATtiny2313
    深入剖析ATtiny2313芯片内核
AVR

微雪官网|产品资料|手机版|小黑屋|微雪课堂. ( 粤ICP备05067009号 )

GMT+8, 2024-3-29 17:58 , Processed in 0.028426 second(s), 20 queries .

返回顶部