历史上的今天
返回首页

历史上的今天

今天是:2024年10月26日(星期六)

2021年10月26日 | ATmega8 复位与中断处理

2021-10-26 来源:eefocus

AVR有不同的中断源。每个中断和复位在程序空间都有独立的中断向量。所有的中断事件 都有自己的使能位。当使能位置位,且状态寄存器的全局中断使能位I 也置位时,中断可 以发生。根据程序计数器PC 的不同,在引导锁定位BLB02 或BLB12 被编程的情况下, 中断可能被自动禁止。这个特性提高了软件的安全性。详见 P 209“ 存储器编程” 的描述。

程序存储区的最低地址缺省为复位向量和中断向量。完整的向量列表请参见P 43“ 中断” 列表也决定了不同中断的优先级。向量所在的地址越低,优先级越高。RESET 具有最高 的优先级,第二个为INT0 – 外部中断请求0。通过置位通用中断控制寄存器 (GICR) 的 IVSEL,中断向量可以移至引导Flash的起始处,参见P 43“中断” 。编程熔丝位BOOTRST 也可以将复位向量移至引导Flash 的起始处。具体参见P 196“ 支持引导装入程序 -在写 的同时可以读(RWW, Read-While-Write) 的自我编程能力” 。


任一中断发生时全局中断使能位I 被清零,从而禁止了所有其他的中断。用户软件可以在 中断程序里置位I 来实现中断嵌套。此时所有的中断都可以中断当前的中断服务程序。执 行RETI 指令后I 自动置位。


从根本上说有两种类型的中断。第一种由事件触发并置位中断标志。对于这些中断,程序 计数器跳转到实际的中断向量以执行中断处理程序,同时硬件将清除相应的中断标志。中 断标志也可以通过对其写”1” 的方式来清除。当中断发生后,如果相应的中断使能位为 "0",则中断标志位置位,并一直保持到中断执行,或者被软件清除。类似的,如果全局 中断标志被清零,则所有已发生的中断都不会被执行,直到I 置位。然后挂起的各个中断 按中断优先级依次执行。


第二种类型的中断则是只要中断条件满足,就会一直触发。这些中断不需要中断标志。若 中断条件在中断使能之前就消失了,中断不会被触发。


AVR 退出中断后总是回到主程序并至少执行一条指令才可以去执行其他被挂起的中断。


要注意的是,进入中断服务程序时状态寄存器不会自动保存,中断返回时也不会自动恢 复。这些工作必须由用户通过软件来完成。


使用CLI 指令来禁止中断时,中断禁止立即生效。没有中断可以在执行CLI 指令后发生, 即使它是在执行CLI 指令的同时发生的。下面的例子说明了如何在写EEPROM 时使用这 个指令来防止中断发生以避免对EEPROM 内容的破坏。


汇编代码例程
in r16, SREG ; 保存SREG
cli ; 禁止中断
sbi EECR, EEMWE ; 启动 EEPROM 写操作
sbi EECR, EEWE
out SREG, r16 ; 恢复SREG (I 位)
C 代码例程
char cSREG;
cSREG = SREG; /* 保存SREG */
/* 禁止中断*/
_CLI();
EECR |= (1<EECR |= (1<SREG = cSREG; /* 恢复SREG (I 位) */

使用SEI 指令使能中断时,紧跟其后的第一条指令在执行任何中断之前一定会首先得到执行。


汇编代码例程
sei ; 置位全局中断使能标志 
sleep ; 进入休眠模式,等待中断发生
; 注意: 在执行任何被挂起的中断之前MCU 将首先进入休眠模式
C 代码例程
_SEI(); /* 置位全局中断使能标志*/
_SLEEP(); /* 进入休眠模式,等待中断发生*/
/* 注意: 在执行任何被挂起的中断之前MCU 将首先进入休眠模式*/

中断响应时间

AVR 中断响应时间最少为4 个时钟周期。4 个时钟周期后,程序跳转到实际的中断处理例程。在这4 个时钟期期间PC 自动入栈。在通常情况下,中断向量为一个跳转指令,此跳转需要3 个时钟周期。如果中断在一个多时钟周期指令执行期间发生,则在此多周期指令执行完毕后MCU 才会执行中断程序。若中断发生时MCU 处于休眠模式,中断响应时间还需增加4 个时钟周期。此外还要考虑到不同的休眠模式所需要的启动时间。


中断返回需要4 个时钟。在此期间PC( 两个字节) 将被弹出栈,堆栈指针加二,状态寄存器SREG 的I 置位。

推荐阅读

史海拾趣

Cosel公司的发展小趣事

在市场竞争日益激烈的情况下,品牌形象的塑造对于企业的发展至关重要。1992年,公司名称变更为COSEL株式会社,这一变革不仅提升了公司的品牌形象,也展示了公司向更高目标迈进的决心。同时,公司还导入了V.I(视觉整合),通过统一的视觉形象传达公司的品牌理念和价值观。这些举措使得Cosel公司在客户心中留下了深刻的印象。

ADL [ADL Embedded Solutions Inc]公司的发展小趣事

在市场竞争日益激烈的情况下,品牌形象的塑造对于企业的发展至关重要。1992年,公司名称变更为COSEL株式会社,这一变革不仅提升了公司的品牌形象,也展示了公司向更高目标迈进的决心。同时,公司还导入了V.I(视觉整合),通过统一的视觉形象传达公司的品牌理念和价值观。这些举措使得Cosel公司在客户心中留下了深刻的印象。

屹晶微(EG)公司的发展小趣事

随着业务的不断拓展和市场的不断扩大,屹晶微逐渐意识到与合作伙伴建立长期战略合作关系的重要性。于是,在2023年,他们与电子产业一站式服务平台华秋电子达成了授权代理合作。这一合作不仅为屹晶微提供了更广阔的市场渠道和客户资源,也为其未来的发展奠定了坚实的基础。

在合作过程中,华秋电子为屹晶微提供了全方位的支持和服务。他们共同推广屹晶微的芯片产品,为客户提供更优质的解决方案和服务。同时,华秋电子还利用自身的技术优势和渠道优势,帮助屹晶微拓展海外市场,提升品牌知名度和影响力。

以上两个故事只是屹晶微在电子行业中发展起来的一部分。他们的发展历程充满了挑战和机遇,但黄米龙和他的团队始终保持着坚定的信念和不懈的努力,为中国的芯片产业做出了积极的贡献。

成都振芯/国腾(CORPRO)公司的发展小趣事

在北斗卫星导航系统的发展过程中,CORPRO始终扮演着重要角色。作为北斗终端的最大供应商之一,CORPRO通过不懈的技术研发和产品迭代,成功实现了北斗设备零部件的国产化。同时,公司还构建了“元器件-终端-系统及运营”的完整产业链,在高性能集成电路板块取得了显著成就。此外,CORPRO还是首批承担“核高基”核心电子器件项目企业中唯一的一家民营企业,体现了其在电子行业的领先地位和创新能力。

芯朋微电子(chipown)公司的发展小趣事

芯朋微电子成立于2005年,初期由一群来自中国华晶电子集团的专家组成。公司创立之初,就专注于电源管理芯片的研发。经过数年的技术积累,2008年,芯朋微电子成功研发出“700V单片MOS集成AC-DC电源芯片”系列,这一突破打破了进口芯片的垄断,赢得了国内家电品牌厂商的认可,为公司在家电领域的快速发展奠定了基础。

远阳(FLYOUNG)公司的发展小趣事

福建国光新业科技股份有限公司,作为全球领先的聚合物片式叠层铝电解电容器(MLPC)制造商,自成立之初便致力于国产高端被动元器件的技术开发与产品创新。面对高端电容器被国外厂商长期垄断的局面,国光新业经过长期技术积累与研发,成功打破了国际垄断,实现了MLPC电容器的国产替代。这一成就不仅填补了国内空白,还使公司在细分领域发明专利授权数量上跃居全球第一,荣获多项国家级荣誉称号。

问答坊 | AI 解惑

温度测量

#include \"reg51.h\" #include \"intrins.h\" sbit p24=P2^4;//数码管位控制口 sbit p25=P2^5; sbit p26=P2^6; sbit p27=P2^7; sbit jdq=P2^0;//控制继电器 sbit p10=P1^0;//键控制按键抠 sbit p11=P1^1; sbit p12=P1^2; sbit p13=P1^3; ...…

查看全部问答>

1个定时器多处复用的问题

在程序中,有多处要利用到定时功能,而且定时时间并不统一,程序的多个部分需要用此定时器,请问大家说说有什么方案比较好呢?…

查看全部问答>

ARM9+linux入门

06年毕业 三年arm7+ucos 刚刚换公司,现在公司需要ARM9+linux 请问各位大虾知道一下: 1 一般来说windows下开发都有集成开发环境,二linux 下开发软件好像没有,需要自己搞定,思想上有点难以转变。linux 采用命令方式有点不习惯,但公司现在项 ...…

查看全部问答>

关于伟创力北京研发中心

有没有兄弟姐妹在这个研发中心的医疗产品设计中心,待遇如何,发展前景如何? 希望不胜赐教,先谢啦!…

查看全部问答>

wince下的hello world都运行不了

1、eeworld有无专门wince开发的栏目,在那 2、做了个wince 5的应用程序,最简单的hello world,通过ActiveSync同步到wince 5设备,运行test.exe,出现“忙”的光标闪一下子就消失了,界面也没出来,是什么问题。…

查看全部问答>

请问能稳定运行Wince4.2的板子能否升级为5.0?钱不多了谢谢您!!

大家好! 朋友送了我一块4.2的板子 X86,PC104架构的,外设什么的都挺全。 我非常喜欢Wince,所以想基于这块板子搞点设计。 这块板子已经移植好4.2 了,但是我听说4.2已经被淘汰, 都用5.0和6.0了,所以想请问,一般这种板子能否设计成5.0的? ...…

查看全部问答>

请教没有INF,如何安装驱动程序?

通过编译,已经得到了sys文件,是不是说明我的驱动程序已经编译成功了? 我想把这个程序先在我的网卡上运行一下,能否不用INF文件,直接安装? 在网上搜到好像可以通过注册表里面键值的修改来安装sys文件,我写的是PCI的网卡驱动,请问用这种方法 ...…

查看全部问答>

请教如何判断烧进AVR芯片里的程序有多大?

请教如何判断烧进AVR芯片里的程序有多大?谢谢~~! …

查看全部问答>

Tms320vc5402硬件上如何连接到异步SRam?

Tms320vc5402硬件上如何连接到异步SRam?address与data对应的dsp和ram端直接连接就行了,但是其他的ram  pin该如何连接?…

查看全部问答>

刚发现STM32的TIM/PWM模块功能实在太弱了!

STM32做三相电机控制、变频器设计,TIM/PWM模块功能实在太弱了!OC1,OC1N.......OC3,OC3NTIM1_CH1 ..... TIM1_CH3N,TIME_CH3;下面是dsPIC30F2010 介绍PWM 模块具有以下特性:• 6个具备3 占空比发生器的PW ...…

查看全部问答>