历史上的今天
返回首页

历史上的今天

今天是:2024年10月18日(星期五)

正在发生

2021年10月18日 | ATmega16 中断向量

2021-10-18 来源:eefocus

本节描述ATmega16的中断处理。更一般的AVR中断处理请参见P11“复位与中断处理” 。


(点击图片放大)

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

ATmega16 典型的复位和中断设置如下:
地址 符号代码说明
$000 jmp RESET ; 复位中断向量
$002 jmp EXT_INT0 ; IRQ0 中断向量
$004 jmp EXT_INT1 ; IRQ1 中断向量
$006 jmp TIM2_COMP ; Timer2 比较中断向量
$008 jmp TIM2_OVF ; Timer2 溢出中断向量
$00A jmp TIM1_CAPT ; Timer1 捕捉中断向量
$00C jmp TIM1_COMPA ; Timer1 比较A 中断向量
$00E jmp TIM1_COMPB ; Timer1 比较B 中断向量
$010 jmp TIM1_OVF ; Timer1 溢出中断向量
$012 jmp TIM0_OVF ; Timer0 溢出中断向量
$014 jmp SPI_STC ; SPI 传输结束中断向量
$016 jmp USART_RXC ; USART RX 结束中断向量
$018 jmp USART_UDRE ; UDR 空中断向量
$01A jmp USART_TXC ; USART TX 结束中断向量
$01C jmp ADC ; ADC 转换结束中断向量
$01E jmp EE_RDY ; EEPROM 就绪中断向量
$020 jmp ANA_COMP ; 模拟比较器中断向量
$022 jmp TWSI ; 两线串行接口中断向量
$024 jmp EXT_INT2 ; IRQ2 中断向量
$026 jmp TIM0_COMP ; 定时器0 比较中断向量
$028 jmp SPM_RDY ; SPM 就绪中断向量
;
$02A RESET: ldi r16,high(RAMEND) ; 主程序
$02B out SPH,r16 ; 设置堆栈指针为RAM 的顶部
$02C ldi r16,low(RAMEND)
$02D out SPL,r16
$02E sei ; 使能中断
$02F xxx
... ... ...

当熔丝位BOOTRST 未编程,Boot 区为 2K 字节,且寄存器GICR 的IVSEL 置位时,典
型的复位和中断设置如下:
地址符号代码说明
$000 RESET: ldi r16,high(RAMEND) ; 主程序
$001 out SPH,r16 ; 设置堆栈指针为RAM 的顶部
$002 ldi r16,low(RAMEND)
$003 out SPL,r16
$004 sei ; 使能中断
$005 xxx
;
.org $1C02
$1C02 jmp EXT_INT0 ; IRQ0 中断向量
$1C04 jmp EXT_INT1 ; IRQ1 中断向量
... .... .. ;
$1C28 jmp SPM_RDY ; SPM 就绪中断向量
当熔丝位BOOTRST 已编程,且Boot 区为 2K 字节时,典型的复位和中断设置如下:
地址符号代码说明
.org $002
$002 jmp EXT_INT0 ; IRQ0 中断向量
$004 jmp EXT_INT1 ; IRQ1 中断向量
... .... .. ;
$028 jmp SPM_RDY ; SPM 就绪中断向量
;
.org $1C00
$1C00 RESET: ldi r16,high(RAMEND) ; 主程序
$1C01 out SPH,r16 ; 设置堆栈指针为RAM 的顶部
$1C02 ldi r16,low(RAMEND)
$1C03 out SPL,r16
$1C04 sei ; 使能中断
$1C05 xxx

当熔丝位BOOTRST 已编程,Boot 区为2K 字节,且寄存器GICR 的IVSEL 置位时,典
型的复位和中断设置如下:
地址符号代码说明
.org $1C00
$1C00 jmp RESET ; Reset 中断向量
$1C02 jmp EXT_INT0 ; IRQ0 中断向量
$1C04 jmp EXT_INT1 ; IRQ1 中断向量
... .... .. ;
$1C28 jmp SPM_RDY ; SPM 就绪中断向量
;
$1C2A RESET: ldi r16,high(RAMEND) ; 主程序
$1C2B out SPH,r16 ; 设置堆栈指针为RAM 的顶部
$1C2C ldi r16,low(RAMEND)
$1C2D out SPL,r16
$1C2E sei ; 使能中断
$1C2F xxx

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

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

通用中断控制寄存器- 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<out GICR, r16
; 将中断向量转移到boot 区
ldi r16, (1<out GICR, r16
ret
C 代码例程
void Move_interrupts(void)
{
/* 使能中断向量的修改*/
GICR = (1</* 将中断向量转移到boot 区 */
GICR = (1<}


推荐阅读

史海拾趣

Global Specialties公司的发展小趣事

Global Specialties的创立源于对高质量测试与测量产品的追求。在公司成立初期,创始人便明确了公司的核心定位:为工程师、学生和业余爱好者提供可靠的测试与测量工具。他们首先推出了一系列电源、十进位箱和电子培训仪,这些产品迅速在行业内获得认可。凭借对产品质量的不懈追求,Global Specialties逐渐在竞争激烈的市场中站稳了脚跟。

广州盛炬(GZSJ)公司的发展小趣事

近年来,创客文化在全球范围内兴起,Global Specialties迅速抓住了这一趋势。公司推出了一系列创客/DIY产品,包括各种模块化的电子元件和工具,旨在帮助创客们实现他们的创意和想法。通过举办线上线下的创客活动,Global Specialties不仅促进了创客之间的交流与合作,还进一步扩大了自己的品牌影响力。

DAYA公司的发展小趣事

大雅智能,一家以智能厨电产品为主的电子科技公司,自创立之初就致力于技术研发和创新。在电子行业竞争激烈的今天,大雅智能凭借其独特的智能控制技术,成功打造了一系列具有市场竞争力的产品。从最初的智能电饭煲到如今的智能厨房生态系统,大雅智能通过技术创新,不断满足消费者对智能生活的追求,逐渐在电子行业中崭露头角。

爱普特微(aptchip)公司的发展小趣事

爱普特微电子(APTCHIP)的创立,可追溯到XXXX年。由一群半导体行业集成电路设计领域的资深人士联合发起,他们看到了中国微处理器市场的巨大潜力和发展空间。这些专家怀揣着技术创新和自主可控的梦想,在深圳这片创新热土上,共同创立了爱普特微电子。从创立之初,公司就明确了自己的目标——成为中国最好的MCU(微控制器)公司。

振宝佳(DMBJ)公司的发展小趣事

作为一家具有国际视野的企业,振宝佳公司始终坚持以质量为核心的发展理念。为了满足出口欧盟的质量要求,公司不断提升产品的品质和性能,加强质量控制和检验。经过多年的努力,公司终于成功获得了出口欧盟的资格认证。这一成就的取得不仅证明了公司的实力和能力,也为其在国际市场上赢得了更多的机会和声誉。

以上五个故事框架均基于振宝佳(DMBJ)公司在电子行业发展的实际情况进行编写,旨在展示公司在技术、市场、生产、质量等方面的努力和成就。请注意,这些故事仅为概述,具体细节和数据可能需要根据实际情况进行补充和完善。

Babcock Inc公司的发展小趣事

为了进一步提升公司的竞争力和市场份额,Babcock积极寻求与国际知名企业的合作。通过与这些企业的技术交流和项目合作,Babcock不仅引进了先进的技术和管理经验,还成功打开了国际市场的大门。随着业务的不断拓展,公司的规模和影响力也逐渐扩大。

问答坊 | AI 解惑

关于PC电源——写在最后

补充一些内容 (仅针对工包,行货不管这些)一:输出滤波元件   (看不懂的可以不管这一部分)功率稍微大点(250W)的电源,输出的滤波线圈就是2个.再大点(400W以上)的一般都是3个.输出滤波电感通常位于电源的那一大堆出线附近. ...…

查看全部问答>

硬件工程师在硬件开发中要注意的事项

硬件工程师在硬件开发中要注意的事项 [ 2010-7-5 2:47:00 | By: szdiscuz ]   1 启动一个硬件开发项目       原始的推动力会来自于很多方面,比如市场的需要,基于整个系统架构的 ...…

查看全部问答>

WINCE下怎么诊断一个驱动有没存在资源锁死的问题?就是多个线程对同一个资源的访问同步互斥没做好。

WINCE下怎么诊断一个驱动有没存在资源锁死的问题?就是多个线程对同一个资源的访问同步互斥没做好。…

查看全部问答>

======WINCE6.0下这些异常怎么定位解决---Exception 'Undefined Instruction'++++Exception 'Pref

======WINCE6.0下这些异常怎么定位解决---Exception \'Undefined Instruction\'++++Exception \'Prefetch Abort\' ======…

查看全部问答>

Xilinx Spartan-6 FPGA SP605 Embedded Development Kit 试用报告 v1.0

Spartan-6 FPGA 嵌入式套件已试用完成,现已传递给下一位使用者,现在上报告!O(∩_∩)O~Xilinx Spartan-6 FPGA SP605 Embedded Development Kit试用报告 v1.0,目录如下: 报告前三节已基本完成,后三节将在v1.1中更新,谢谢!下载报告,请右击 ...…

查看全部问答>

LED照明与功率因数之间的关系

交流电流过负载时,加在该负载上的交流电压与通过该负载的交流电流产生相位差,人们便从中引出功率因数这一概念。人们生产、生活用电来自电网,电网提供频率为50Hz或60Hz的交流电。作为交流电的负载有电阻、电感、电容三种类型: 1、当交流电通过 ...…

查看全部问答>

引脚速度有何作用

                                 一直搞不明白,引脚速度有何作用呀,我想绝大部分作用有2M就足够了,还是有其它的意义,…

查看全部问答>

关于430F5438和电脑进行网口通信的若干问题

请问各位,怎么实现5438和电脑进行网口通信?我用的开发板是BW-DK5438的,上边的网口芯片是ENC28J60,怎么进行连接呢?用网络调试助手还是其他手段呢?在连接的时候,430的端口号和IP地址如何设定呢?谢谢了…

查看全部问答>

求助嵌入式系统题目

一.  填空题 1. 串行通信方式包括:                     和           & ...…

查看全部问答>