历史上的今天
返回首页

历史上的今天

今天是:2024年11月02日(星期六)

2021年11月02日 | ATmega128 复位与中断处理

2021-11-02 来源:eefocus

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


程序存储器空间的最低地址缺省定义为复位和中断向量。完全的向量列表请参见 P 55“ 中 断” 。列表也决定了不同中断的优先级。向量所在的地址越低,优先级越高。RESET 具 有最高的优先级,下一个则为INT0 – 外部中断请求0。通过置位MCU 控制寄存器 (MCUCR)的IVSEL,中断向量可以移至引导Flash的起始处P 55“中断” 一节有详细说明。 编程熔丝位BOOTRST 可以将复位向量也移至引导Flash 的起始处。具体可参见 P 255“ 支持引导装入程序 – 在写的同时可以读(RWW, Read-While-Write) 的自我编程能力” 。


当中断发生时全局中断使能位I 被清零,所有的中断都被禁止。用户软件可以通过置位位 I 来使能中断嵌套。此时所有的中断都可以中断当前中断。执行RETI 指令后I 自动置位。


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


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


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


进入中断例程时状态寄存器不会自动保存;中断返回时也不会自动恢复。这些工作必须 由软件来完成。


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


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

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

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

中断响应时间

AVR 中断响应时间最少为4 个时钟周期。4 个时钟周期后,程序跳转到实际的中断处理例程。在这4 个时钟期间, PC 自动入栈。在通常情况下,中断向量为一个跳转指令,此跳转要花3 个时钟周期。如果中断在一个多周期指令执行期间发生,则在此多周期指令执行完后MCU 才会执行中断程序。若中断发生时MCU 处于睡眠模式,中断响应时间增加到8 个时钟周期。增加的时钟周期是由于唤醒启动时间引入的。


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


推荐阅读

史海拾趣

Anixter Inc公司的发展小趣事

Anixter Inc 是一家全球性的供应链解决方案提供商,以下是该公司发展的相关故事:

  1. 公司成立与初期发展:Anixter Inc 成立于 1957 年,总部位于美国伊利诺伊州格伦维尔回。最初,公司主要从事电线电缆的销售和分销。随着时间的推移,Anixter 不断扩大业务范围,逐步涉足网络设备、安全解决方案、电子元器件等领域。

  2. 业务拓展与国际化:随着市场需求的变化和全球化的趋势,Anixter 不断拓展业务,并加速国际化进程。公司在全球范围内建立了广泛的分销网络和供应链体系,在北美、欧洲、亚洲和拉丁美洲等地区设立了办事处、仓库和物流中心,以更好地满足客户的需求。

  3. 技术创新与解决方案提供:Anixter 不断注重技术创新和解决方案提供,与各种供应商合作,推出了多种先进的产品和服务。公司致力于为客户提供全方位的供应链解决方案,包括设计、采购、仓储、配送和技术支持等,帮助客户提高效率、降低成本并增强竞争力。

  4. 收购与合并:为了加速业务发展和扩大市场份额,Anixter 进行了一系列收购和合并活动。通过收购具有特定技术或地区优势的公司,Anixter 不仅增强了自身的竞争实力,还拓展了业务领域和市场覆盖范围。

  5. 可持续发展与未来展望:Anixter 积极响应可持续发展的呼声,致力于推动环保和社会责任的实践。公司在供应链管理、能源管理和环境保护等方面持续改进,致力于减少碳排放、资源浪费和环境污染。未来,Anixter 将继续秉承技术创新和客户导向的理念,不断适应市场变化和挑战,保持行业领先地位,并为客户和股东创造持续增长的价值。

Bomar Interconnect公司的发展小趣事

在电子行业的激烈竞争中,Bomar Interconnect公司凭借持续的技术创新,逐渐崭露头角。公司研发团队不断深入研究新型连接技术,成功推出了一系列高性能、高可靠性的连接器产品。这些产品在市场上获得了广泛认可,为公司带来了稳定的收入来源。同时,公司还积极投入资源,加强与其他企业的技术合作,不断拓宽产品应用领域,进一步提升了公司的市场竞争力。

Dalian Dlicap Corporation公司的发展小趣事

2023年12月29日,大连达利凯普科技股份公司在深圳证券交易所创业板正式挂牌上市,股票代码为301566。这一里程碑式的事件标志着公司进入了一个新的发展阶段。上市融资将为达利凯普提供更多的资金支持和发展机遇,公司将继续加大研发投入和市场拓展力度,不断推动技术创新和产业升级。同时,达利凯普也将积极履行社会责任和义务,为电子行业的发展做出更大的贡献。

请注意,这些故事概要基于现有信息整理而成,具体细节可能因时间、环境等因素而有所不同。

安谱隆(Ampleon)公司的发展小趣事

在安谱隆的发展历程中,资本市场对其一直保持着高度的关注。然而,其“安家”之路却并不平坦。2017年,奥瑞德曾有意收购安谱隆,但由于资金问题,这桩收购最终未能成行。2018年,旋极信息也计划收购安谱隆,但同样未能成功。这些波折反映了资本市场对安谱隆价值的认可,但也暴露出安谱隆在寻找合适买家方面所面临的挑战。

Fairchild (ON Semiconductor)公司的发展小趣事

Fairchild Semiconductor在创立之初就致力于半导体技术的研发与创新。公司推出了多种具有革命性意义的半导体产品,如逻辑门、功率MOSFET、模拟集成电路等,这些产品不仅在当时市场上取得了巨大的成功,更为Fairchild在半导体行业中确立了领导地位。

Arduino公司的发展小趣事

随着物联网和智能设备的兴起,Arduino平台在智能家居、智能农业、机器人等领域的应用越来越广泛。开发者们可以利用Arduino平台来设计和开发各种智能设备和应用,实现设备的互联互通和智能化控制。这些应用不仅提高了人们的生活质量,也推动了电子行业的进步和发展。

这五个故事展示了Arduino公司在电子行业中的发展历程和取得的成就。从最初的廉价微控制器解决方案,到如今的多样化主板和广泛应用,Arduino始终秉持着创新、开放和合作的精神,为电子行业的发展做出了重要贡献。

问答坊 | AI 解惑

LC46芯片用何种设备能够读写

我是一只菜鸟。遇到一个问题,烦请大侠帮忙解决。有一个喷墨墨盒,上有一芯片,记录打印次数,如果超过限制,就不让使用,想解开此芯片,把新墨盒的数据写到老墨盒上,在灌上代用墨汁,就不用买原装的了。本菜鸟在很偏僻的树林(沈阳)没有找到办法 ...…

查看全部问答>

PCB设计的可测试性概念

产品设计的可测试性(De sign For Testability. OFT) 也是产品可制造性的主要内容从生产角度考虑也是设计的工艺性之一.它是指在设计时考虑产品性能能够检测的难易程度,也就是说设计产品时应考虑如何以最简单的方法对产品的性能和加工质量进行检测, ...…

查看全部问答>

DEBUGMSG(ZONE_TRACE, (TEXT("XXXX\r\n")));这样的语句在驱动里面怎么打印到调试串口?

DEBUGMSG(ZONE_TRACE, (TEXT(\"XXXX\\r\\n\")));这样的语句在驱动里面怎么打印到调试串口? …

查看全部问答>

想找个师父!指导下我嵌入式系统开发!

近期对嵌入式系统开发很有兴趣,像微软的WM,谷歌的android,苹果的iphone OS 本身我学习计算机语言就是想涉足计算机系统开发,但是开始学了C#,被微软的VS小黑盒子式编程给洗脑了...感觉编程好像比画图还简单!好想学了C#跟没学似地, 所以现在觉 ...…

查看全部问答>

请教2407与2812区别

请教一下TMS320LF2407A与TMS320F2812功能上与硬件上区别 才开始学习  很多不懂  请各位多多帮忙  谢谢了!!!…

查看全部问答>

MSP430与SHT温湿度传感器程序报错

程序的目的是把采集的温度通过串口显示,现在做的程度是我把硬件连接好后,用MSP430仿真器查看温湿度的数值不正确,比如humi_val.i用quick  watch查看value为62850这样的数据,单片机的txd用示波器观察没有波形,可能程序存在很大问题,现在比 ...…

查看全部问答>

赛灵思FPGA培训资料汇总,免费提供,欢迎索要

我这里有从各个研讨会搜集来的赛灵思大量FPGA的培训资料,如有需要请将您的邮箱发到:779861433,我会发到您的邮箱,谢谢!…

查看全部问答>

MSP430F477的SD16_A中断打开后单片机复位。

我把所有的程序都只注释掉了,只留IO初始化,SD16_A初始化,和一些延时子程序。 一运行到SD16_A初始化完成 中断允许后 单片机就复位了。这是什么情况 坐等高人解惑~~~~…

查看全部问答>

BB Black 入门基础之Eclipse C++ 控制LED灯(中)

本帖最后由 lonerzf 于 2014-1-13 10:57 编辑 接着上一篇。之前的地方设置是有问题的,先不讲可能是哪,大家帮忙给查个错呗。谢谢啦{:soso_e100:} 补充下,如果用 SSH Only方式进行远程部署,则在某些情况下方便得多。 还是在编译好之后选择绿 ...…

查看全部问答>