ATmega88 复位与中断处理

发布者:创新火花最新更新时间:2022-02-19 来源: eefocus关键字:ATmega88  复位  中断处理 手机看文章 扫描二维码
随时随地手机看文章

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

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

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

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

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

AVR 退出中断后总是回到主程序并至少执行一条指令才可以去执行其他被挂起的中断。要注意的是,进入中断服务程序时状态寄存器不会自动保存,中断返回时也不会自动恢复。这些工作必须由用户通过软件来完成。

ATmega88在使用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 个时钟周期。此外还要考虑到不同的休眠模式所需要的启动时间。这个时间不包括在前面提到的时钟周期里。

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


关键字:ATmega88  复位  中断处理 引用地址:ATmega88 复位与中断处理

上一篇:ATmega88 Flash程序存储器
下一篇:ATmega88 指令执行时序

推荐阅读最新更新时间:2024-11-10 11:20

STM32复位源判断
在项目中有时候会遇到单片机莫名奇妙复位的情况,为了判断是那种原因引起复位,就需要对单片机的复位源进行判断。现用STM32F103C8T6单片机进行测试。 先看看单片机复位源都有哪些? 在STM32中文参考手册中可以看到,复位源可以通过状态寄存器来读出。 于是写一段程序来读取复位状态寄存器: void Check_Rst(void) { printf( CSR = %xrn , RCC- CSR); if(RCC_GetFlagStatus(RCC_FLAG_PINRST) != RESET ) // NRST 引脚复位 { printf( PIN reset rn ); } if(RCC_
[单片机]
STM32<font color='red'>复位</font>源判断
上电复位与相关监控功能
   上电复位 ( POR )的任务之一是确保电源刚被打开时,处理器从一个已知的地址开始运行。为此,POR逻辑输出在处理器电源刚被打开时将处理器锁定在复位态。POR的第二个任务是,在以下三件事情完成以前,阻止处理器从已知地址开始运行:系统电源已稳定在适当的水平;处理器的时钟已经建立;以及内部寄存器已经正确装载。POR完成这第二个任务的手段是片上定时器,它继续在一个预定的时间间隔内保持处理器处于复位态。这个定时器在处理器电源到达规定的电压门限后触发,设定时间走完后,定时器终止,并促使POR输出变为无效,处理器脱离复位态并开始运行(图1)。处理器的数据手册会给出所需要的定时器延迟间隔。顺便提一下,这个定时器正是POR和一般电压监测器的
[单片机]
上电<font color='red'>复位</font>与相关监控功能
中断处理学习笔记
中断处理 如果想使用中断: 1 初始化 A设置源头 查看原理图 XEINT0/kpROW0/GPN0 查看芯片手册 使能 B 设置中断控制器 This chapter describes the functions and usage ofVectored Interrupt Controller in S3C6410X RISC microprocessor. 12.1 OVERVIEW The interrupt controller in the S3C6410X is composed of2 VIC’s (Vectored Interrupt Controller, ARM Pr
[单片机]
<font color='red'>中断处理</font>学习笔记
深度讨论32复位及SystemInit函数在程序中的作用
在32应用中,我们复位一般有两种方式: 1.按复位按键复位程序 2.拔动单片机上的跳冒完成32的 以上两种复位方式中,对芯片而言,其实都是引脚接收到一个跳变延信号后触发的程序而已。在keil自带的固件库中,我们可以看到一下程序: 这里是从库中截出的复位程序代码段。EXPORT定义了一个全局变量 Reset_Handler 。IMPORT表示引用了一个函数,这里引进的_main函数的作用是把我们平时写的主函数中的main函数起作用,将C程序与底层汇编程序连接起来,使程序发挥作用。而我们在刚开始学习的时候,经常会发现别人写的环境中,总有一个函数不知道什么意思:SystemInit()。我们看会图片中150行中引入
[单片机]
深度讨论32<font color='red'>复位</font>及SystemInit函数在程序中的作用
keil51的中断处理过程
中断函数注意如下: (1)中断函数不能进行参数传递,如果中断函数中包含任何参数声明都将导致编译出错。 (2)中断函数没有返回值,如果企图定义一个返回值将得不到正确的结果,建议在定义中断函数时将其定义为void类型,以明确说明没有返回值。 (3)在任何情况下都不能直接调用中断函数,否则会产生编译错误。因为中断函数的返回是由8051单片机的RETI指令完成的,RETI指令影响8051单片机的硬件中断系统。如果在没有实际中断情况下直接调用中断函数,RETI指令的操作结果会产生一个致命的错误。 (4)如果在中断函数中调用了其它函数,则被调用函数所使用的寄存器必须与中断函数相同。否则会产生不正确的结果。 (5)C51编译器对中断函数编译时会
[单片机]
ATmega64 复位中断处理
AVR有不同的中断源。每个中断和复位在程序空间都有独立的中断向量。所有的中断事件 都有自己的使能位。当使能位置位,且状态寄存器的全局中断使能位I 也置位时,中断可 以发生。根据程序计数器PC 的不同,在引导锁定位BLB02 或BLB12 被编程的情况下, 中断可能被自动禁止。这个特性提高了软件的安全性。详见 P281“ 存储器编程” 的描述。 程序存储区的最低地址缺省为复位向量和中断向量。完整的向量列表请参见 P57“中断” 。 列表也决定了不同中断的优先级。向量所在的地址越低,优先级越高。RESET 具有最高 的优先级,第二个为INT0 – 外部中断请求0。通过置位MCU 控制寄存器 (MCUCR) 的 IVSEL,中断向量
[单片机]
stm32中中断源名和中断处理函数名所在位置
两个文件分别在stm32f4xx.h(中断名) CORE—startup_stm32f40_41xxx.s(中断函数名) #if defined (STM32F40_41xxx) CAN1_TX_IRQn = 19, /*! CAN1 TX Interrupt */ CAN1_RX0_IRQn = 20, /*! CAN1 RX0 Interrupt */ CAN1_RX1_IRQn = 21, /*! CAN1 RX1 Interrupt
[单片机]
外部中断处理和内部中断处理的差异性
在现今SOC设计中,当周边装置(Peripheral IP)想要和中央处理器(CPU)沟通时,最常使用的机制是透过中断(Interrupt)。周边装置可触发中断给中央处理器,当中央处理器接收到中断后,则可判断是由那个周边装置触发些中断,接着处理相对应的中断处理程序(ISR,Interrupt Service Routine),藉此达到彼此沟通的目的。 而AndesCore™在中断处理方面,共支持两种模式:内部中断处理器(IVIC Mode,Internal Vector Interrupt Controller)和外部中断处理器(EVIC Mode,External Vector Interrupt Controller)。其中
[单片机]
外部<font color='red'>中断处理</font>和内部<font color='red'>中断处理</font>的差异性

推荐帖子

瑞萨杯--2011全国大学生电子设计竞赛新闻发布会
昨天下午(6月7日)“瑞萨杯2011全国大学生电子设计竞赛”新闻发布会在竞赛秘书处单位北京理工大学举行,从而拉开了本届大赛的序幕。教育部高等教育司、工业和信息化部电子信息司相关领导,全国大学生电子设计竞赛组委会主任、两院院士、北京理工大学名誉校长王越,协办单位瑞萨电子(中国)有限公司大中国区总经理兼CEO郑力先生等出席了此次新闻发布会。自2009年起,将由NEC电子在中国的子公司NEC电子(中国)有限公司独家赞助、由中国教育部高等教育司及工业和信息化部人教司主办的全国大学生电
maylove 电子竞赛
【实时时钟RTC】MSP430系统实时时钟RTC学习日志(完善中)
读取实时时钟:1、RTCRDY为0时,不能取读取实时时钟RT0PS源于ACLK,为了实时时钟日历的正确的运行,ACLK必须是32768Hz。(易出错)定时:一、每小时闹一次:每一小时的15分钟闹一次:1、将RTCAMIN设置成15;2、设置RTCAMIN的AE位和清除闹钟寄存器的其它所有AE位3、AF会在:00:14:59到00:15:00、01:14:59到01:15:00、02:14:59到02:15:00等等时刻被置位。二、在每天04:00:00时刻闹:1、RTC
qinkaiabc 微控制器 MCU
实现100台手机组成的蓝牙散射网的问题
  在大概十到二十平方米的空间里,要把100台左右的蓝牙手机用散射网组成一个局域网,在技术可行性上不知道能否行得通?希望各位大侠帮帮忙给点意见。  以前有看过一个老外写的Bluechat的手机程序,他也实现了蓝牙的无限连接,但不知道他使用了什么的办法。  想利用BTTREE来进行构造这个网络。这么多的设备不知道会不会在搜索、连接以及通信的时候出现冲突?还有设备的移出也是件很头痛的事。  这是小弟的毕业设计,没什么能做的,只能用些许分数来赠送大家了,希望大家能帮帮忙。 实现100台
tsytkh 嵌入式系统
多款TI Launch板免费测评试用,赶紧来看看吧!
LAUNCHXL-F28379D,LAUNCHXL-280049C,MSP430F5529LaunchPad,三款好板任你选,赶紧来申请吧!测评时间安排:申请时间:2020年9月17日-10月8日入选名单:10月9日-10月15日测评时间:10月16日-11月30日颁奖时间:12月1日-12月7日如何免费申请:进入对应板子的活动页面,点击我要参与,填写测评申请表进行申请点此申请LAUNCHXL-F28379D
okhxyyo 微控制器 MCU
关于用超级终端AT命令读取诺基亚手机短信的问题
请问诺基亚5200通过蓝牙驱动IVTBlueSoleil与电脑连接,并打开蓝牙串行端口服务。然后在PC机上的超级终端里面连接到此手机蓝牙串口,并可以发送AT命令,但是奇怪的是,发AT可以返回OK,也可以发一些查询型号的AT命令,都有返回。但是发送AT+CMGR=1命令就返回ERROR,还有关于短信读取的AT命令都是返回ERROR,请问是不是诺基亚手机把这部分的AT命令给屏蔽了呢?还是说串口那里设置不正确?关于用超级终端AT命令读取诺基亚手机短信的问题是否因为短信存储区内没有短信.短信
lilizhen329 嵌入式系统
i/o接口问题
I/O接口与I/O控制器的区别?通常说的串口编程,与串口设备的驱动有什么不同。为什么通常都说对串口编程,而不是对具体的串口设备编程?(因为串口通用的原因吗?)i/o接口问题在PC上,串口的设备驱动更底层,串口编程一般指编写应用程序。upupup串口驱动是你能够使用串口open,read,write的基础,是内核态的驱动模块。串口编程是在串口驱动的基础上,使用串口驱动定义了的open,read,write打开串口,对串口实现读写。而具体的串口设备通常不需要特别编程,只需要通
scorpio 嵌入式系统
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved