
当熔丝位BOOTRST被编程, Boot区大小设置为2K字节,
在GICR注册IVSEL置位时所有中断使能之前,最典型的
和一般的程序设置的复位和中断向量地址是:
地址
标签
CODE
JMP
JMP
JMP
....
..
JMP
RESET :
LDI
OUT
LDI
OUT
SEI
<instr>
xxx
SPM_RDY
RESET
EXT_INT0
EXT_INT1
评论
;复位处理程序
; IRQ0处理程序
; IRQ1处理程序
;
;存储程序存储器就绪处理程序
.ORG 0x1C00
0x1C00
0x1C02
0x1C04
...
0x1C36
;
0x1C38
0x1C39
0x1C3A
0x1C3B
0x1C3C
0x1C3D
R16 ,高( RAMEND ) ;主程序启动
SPH,r16
r16,low(RAMEND)
SPL,r16
;允许中断
;设置堆栈指针为RAM的顶部
移动之间中断
应用程序和Boot空间
通用中断控制
注册会员 - GICR
通用中断控制寄存器控制放置中断向量
表。
位
7
INT1
6
INT0
读/写
0
5
INT2
读/写
0
4
PCIE1
读/写
0
3
PCIE0
读/写
0
2
–
R
0
1
IVSEL
读/写
0
0
IVCE
读/写
0
GICR
读/写
初始值
读/写
0
位1 - IVSEL :中断向量选择
当IVSEL为(零) ,中断向量位于的开始
闪存。当该位被置位( 1 ) ,中断向量转移到begin-
宁Flash的Boot Loader区的。引导的起始的实际地址
闪光部分是由熔丝位BOOTSZ确定。请参见“引导加载程序
支持 - 同时读 - 写自编程的详细信息, 216页“ 。为了避免可卸载
中断向量表之间改变,一个特殊的写操作必须按照如下步骤
改变IVSEL位:
1.写中断向量修改使( IVCE )位为1 。
2.在四个周期,写入所需的值,同时将零写入到IVCE IVSEL 。
而执行上述序列时中断自动被禁止。中断
在循环IVCE禁用设置,他们仍然被禁止,直到指令之后跟着
哞哞叫的写入IVSEL 。如果IVSEL不写,中断仍然是四名伤残
周期。在状态寄存器的位I不受自动禁用。
注意:
若中断向量位于Boot Loader区,且Boot锁定位BLB02是亲
编程,中断被禁止,而从应用区执行。如果
中断向量位于应用区,且Boot锁定位BLB12是亲
gramed ,中断被禁止,而从Boot Loader区执行。请参阅
一节“Boot Loader支持 - 同时读 - 写自编程”第216页上
有关Boot锁定位的细节。
位0 - IVCE :中断向量修改使
该位IVCE必须写1来启用IVSEL位的变化。是IVCE
由硬件清零写入四个周期后或当IVSEL写。设置
60
ATmega162/V
2513F–AVR–12/03