历史上的今天
返回首页

历史上的今天

今天是:2024年11月08日(星期五)

正在发生

2021年11月08日 | ATmega128 中断向量

2021-11-08 来源:eefocus

本节说明ATmega128 的中断处理。更一般的AVR 中断处理请参见 P 12“ 复位和中断处理” 。

ATmega128 复位和中断向量
Notes: 
1. 当熔丝位BOOTRST被编程时,复位后程序跳转到Boot Loader。请参见 P 255“ 支持引导装入程序 – 在写的同时可以读(RWW, Read-While-Write) 的自我编程能力” 。
2. 当寄存器MCUCR的IVSEL置位时,中断向量转移到Boot区的起始地址。此时各个中断向量的实际地址为表中地址与Boot 区起始地址之和。
3. 地址为$0030 - $0044 的中断在ATmega103 兼容模式中不存在。


Table 24给出了不同的BOOTRST/IVSEL设置下的复位和中断向量的位置。如果程序永远不使能中断,中断向量就没有意义。用户可以在此直接写程序。同样,如果复位向量位于应用区,而其他中断向量位于Boot 区,则复位向量之后可以直接写程序。反过来亦是如此。

ATmega128 复位和中断向量位置的确定
Note: Boot 区复位地址列P 266Table 112 。对于熔丝位BOOTRST,“1” 表示未编程, “0” 表示已编程。

ATmega128 典型的复位和中断设置如下:

ATmega128 典型的复位和中断设置

当熔丝位BOOTRST 未编程, Boot 区为8K 字节,且中断使能之前寄存器MCUCR 的 IVSEL 置位时,典型的复位和中断设置如下:

ATmega128 典型的复位和中断设置

当熔丝位BOOTRST 已编程,且Boot 区为8K 字节时,典型的复位和中断设置如下:

ATmega128 典型的复位和中断设置

当熔丝位BOOTRST 已编程, Boot 区为8K 字节时,且中断使能之前寄存器MCUCR 的 IVSEL 置位时,典型的复位和中断设置如下:

ATmega128 典型的复位和中断设置

在应用区和Boot 区之间移动中断

通用中断控制寄存器决定中断向量表的放置地址。

MCU 控制寄存器- MCUCR

ATmega128 MCU 控制寄存器- MCUCR

• Bit 1 – IVSEL: 中断向量选择
当IVSEL 为"0“ 时,中断向量位于Flash 存储器的起始地址;当IVSEL 为"1“ 时,中断向量转移到Boot 区的起始地址。实际的Boot 区起始地址由熔丝位BOOTSZ 确定。具体请参考P 255“ 支持引导装入程序 – 在写的同时可以读(RWW, Read-While-Write) 的自我编程能力” 。为了防止无意之间改变中断向量表,修改IVSEL 时需要遵照如下过程:


1. 置位中断向量修改使能位IVCE。


在紧接的4 个时钟周期里将需要的数据写入IVSEL,同时对IVCE 写”0”。
执行上述序列时中断自动被禁止。其实,在置位IVCE 时中断就被禁止了,并一直保持到写IVSEL 操作之后的下一条语句。如果没有IVSEL 写操作,则中断在置位IVCE 之后的4 个时钟周期保持禁止。状态寄存器的位I 不受此序列的影响。


Note: 
若中断向量位于Boot区,且Boot锁定位BLB02被编程,则执行应用区的程序时中断被禁止;若中断向量位于应用区,且Boot 锁定位BLB12 被编程, 则执行Boot 区的程序时中断被禁止。有关Boot 锁定位的细节请参见 P 255“ 支持引导装入程序 – 在写的同时可以读(RWW, Read-While-Write) 的自我编程能力” 。


• Bit 0 – IVCE: 中断向量修改使能
改变IVSEL 时IVCE 必须置位。在IVCE 或IVSEL 写操作之后4 个时钟周期, IVCE 被硬件清零。如前面所述,置位IVCE 将禁止中断。代码如下:

汇编代码例程
Move_interrupts:
; 使能中断向量的修改
ldi r16, (1<out MCUCR, r16
; 将中断向量转移到boot 区
ldi r16, (1<out MCUCR, r16
ret
C 代码例程
void Move_interrupts(void)
{
/* 使能中断向量的修改 */
MCUCR = (1</* 将中断向量转移到boot 区 */
MCUCR = (1<}


推荐阅读

史海拾趣

FDI [Future Designs , Inc.]公司的发展小趣事

在电子行业的早期,FDI(Future Designs, Inc.)还只是一家名不见经传的小公司。创始人李明,凭借其对电子技术的热爱和敏锐的商业洞察力,带领团队研发出了一款具有革命性的电子芯片。这款芯片不仅性能卓越,而且成本较低,迅速在市场上获得了认可。正是这款产品,为FDI公司赢得了第一桶金,也为公司后续的发展奠定了坚实的基础。

富满电子(FM)公司的发展小趣事

为了进一步扩大市场份额,FDI公司开始实施全球化战略。公司先后在欧美、亚洲等地设立了分支机构,并与当地企业建立了紧密的合作关系。同时,FDI还积极参与国际电子展会和论坛,与全球各地的行业精英交流学习。这些举措不仅提升了FDI的品牌影响力,也为其带来了更多的商业机会。

南京绿芯(Grenergy)公司的发展小趣事

为了进一步扩大市场份额,FDI公司开始实施全球化战略。公司先后在欧美、亚洲等地设立了分支机构,并与当地企业建立了紧密的合作关系。同时,FDI还积极参与国际电子展会和论坛,与全球各地的行业精英交流学习。这些举措不仅提升了FDI的品牌影响力,也为其带来了更多的商业机会。

Astron Wireless Technologies Inc公司的发展小趣事

Astron Wireless Technologies Inc公司在成立初期,面临着激烈的市场竞争和技术瓶颈。然而,公司的研发团队通过不懈努力,成功开发出一款具有创新性的无线通信协议,大大提高了数据传输的效率和稳定性。这一技术突破迅速赢得了市场的认可,公司开始获得大量的订单,实现了初步的市场突破。

Diamond SA公司的发展小趣事

随着技术的不断成熟,Diamond SA公司开始积极拓展市场。他们与全球知名的电子产品制造商建立了合作关系,将自己的芯片技术应用于各种电子设备中。同时,公司还加大了品牌推广力度,通过一系列营销活动提升了品牌知名度和美誉度。随着市场份额的逐步扩大,Diamond SA公司成为了电子行业中的领军企业。

台湾三礼(3L)公司的发展小趣事

1991年,三礼公司正式成立了美国分公司(3LU),此举标志着公司开始进军北美市场,将其作为货物管理中心,并与G-TEP合作组建了3L Global Co.(3LG),共同开拓和发展所有北美业务。这一战略决策为三礼公司打开了新的增长通道,使得公司能够更好地服务全球客户,提升品牌影响力。

问答坊 | AI 解惑

PIC 8位单片机的分类和特点

PIC 8位单片机的分类和特点 …

查看全部问答>

大赛用芯片资料

本帖最后由 paulhyde 于 2014-9-15 09:02 编辑 芯片资料  …

查看全部问答>

2010年的汽车电子趋势预测

中国的汽车产业在今年很有可能触及或跨越年产销一千万辆这个门槛,事实上在实现这个目标以前,中国就已经成为仅次于美国的全球第二大汽车市场。在当前的汽车中,汽车电子系统所占的比重越来越大,很多特色化的功能都是依赖汽车电子技术来实现的,如 ...…

查看全部问答>

淘宝上的linux开发板能买不??

我是新手,以前都是跟着导师做单片机的。感觉单片机有点“不过瘾”的感觉,想往高深的学。想学linux下嵌入式编程,但是身边又没有的这方面的资源。于是想买一块开发板子。请问:淘宝上的那种便宜的开发板比如像2410、2440板子能买不?? 问题1:开 ...…

查看全部问答>

请问一般公司会招聘底层开发(驱动开发)的应届生吗

本人在校学生,最近做的项目都用到了一些驱动的开发,感觉底层这方面的编程比普通的软件开发难度大一点。如果是软件公司招聘的话,他们会招聘新手吗?个人感觉做这方面的真正开发,都是有多年经验的老手。…

查看全部问答>

ce下怎么获取ESN码还有怎么获取是手机的型号啊。。

ce下怎么获取ESN码还有怎么获取是手机的型号啊。。 …

查看全部问答>

伺服系统小结(连续上篇)

三、伺服系统调试   接通伺服驱动器的电源, 先进入测试调整模式,测试调整模式可以执行伺服驱动器的测试操作,报警复位和参数编辑等等.其数字操作器的按键说明如表1: 键 出现的情况 MOD 在不同模式 ...…

查看全部问答>

2812调试时关于看门狗的一些问题

2812调试时关于看门狗的一些问题 大家好, 我目前正在调试一块自己做的2812的板子,遇到关于看门狗的一些问题: 一点连续运行按钮程序就跳到3FFC00处(此处应该是复位向量),而点单步运行的时候程序可以走的.点连续运行的时候用示波器观察reset引脚,发 ...…

查看全部问答>

机械电能表到电子式电能表讲义

机械电能表到电子式电能表讲义,从事电能表行业可以看看哦! [ 本帖最后由 aishuang 于 2011-7-16 12:22 编辑 ]…

查看全部问答>

请大家看看我这个串口的程序哪里不对??很多乱码

单片机的接收端是连接的GPS信号, 发送端连接的是GPRS的接收。 单片机就是把收到的经纬度找出来传给GPRS,用UDP发送。 只要不连GPS, 发送的数据就完全正确。 连了GPS之后,数据就乱了,GPS是一直在发送,速度很快 #include #include #incl ...…

查看全部问答>