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 退出中断后总是回到主程序并至少执行一条指令才可以去执行其他被挂起的中断。要注意的是,进入中断服务程序时状态寄存器不会自动保存,中断返回时也不会自动恢复。这些工作必须由用户通过软件来完成。
ATmega48在使用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 个时钟周期。此外还要考虑到不同的休眠模式所需要的启动时间。这个时间不包括在前面提到的时钟周期里。
ATmega48中断返回需要4 个时钟。在此期间PC( 两个字节) 将被弹出栈,堆栈指针加二,状态寄存器SREG 的I 置位。
关键字:ATmega48 复位 中断处理
引用地址:
ATmega48 复位与中断处理
推荐阅读最新更新时间:2024-11-20 00:24
STM32F1/F4复位的实现方式有哪些
共有三种类型的复位,分别为系统复位、电源复位和备份域复位。 系统复位: 除了时钟控制寄存器CSR中的复位标志和备份域中的寄存器外,系统复位会将其他全部寄存器都复位为复位值。 只要发生以下事件之一,就会产生系统复位: 1.NRST引脚低电平(外部复位) 2.窗口看门狗计数结束(WWDG复位) 3.独立看门狗计数结束(IWDG复位) 4.软件复位(SW复位) 5.低功耗管理复位 软件复位: 可通过查看RCC时钟控制和状态寄存器(RCC_CSR)中的复位标志确定。 要对器件进行软件复位,必须将Cortex™-M4F应用中断和复位控制寄存器中的SYSRESETREQ位置1。 低功
[单片机]
基于FPGA的微处理器内核设计与实现
与传统投片实现ASIC相比,FPGA具有实现速度快、风险小、可编程、可随时更改升级等一系列优点,因而得到了越米越广泛的应用。MCS-51应用时间长、范围广,相关的软硬件资源丰富,因而往往在FPGA应用中嵌人MCS-51内核作为微控制器。但是传统MCS-51的指令效率太低,每个机器周期高达12时钟周期,因此必须对内核加以改进,提高指令执行速度和效率,才能更好地满足FPGA的应用。 通过对传统MCS-51单片机指令时序和体系结构的分析,使用VHDL语言采用自顶向下的设计方法重新设计了一个高效的微控制器内核。改进了的体系结构,可以兼容MCS-51所有指令,每个机器周期只需1个时钟周期,同时增加了硬件看门狗和软件复位功能,提高了指令执行
[嵌入式]
Fuzetec Technology的自复位保险丝额定电流达3A
Fuzetec Technology公司推出通用型PPTC自复位保险丝,适用于广泛的电子设备短路保护,包括计算机母板、USB集线器、端口及外设以及IEEE 1394端口。 FSMD系列保险丝引脚尺寸为3216 (1206)、3225 (1210)和4532 (1812),保持电流范围为50mA至3A,工作电压范围在6V至60V(最大值)。该产品符合UL1434要求,提供编带和卷轴包装。
[新品]
基于Atmega48单片机的低功耗系统设计
随着微电子技术和计算机技术的发展,尤其是微机在各个领域的普遍应用,功耗、成本、体积以及可靠性等指标均成为设计者所关注的重要问题。尤其是在由电池供电的设备中,如何降低设备功耗成为设计的首要任务。本文中以ATMEL公司的Atmega48单片机为例,介绍了单片机低功耗设计的一般方法。 Atmega48单片机 低功耗系统设计首要是选择合适的单片机。Atmega48单片机是一款8位微控制器,具有高性能、低功耗的显著特点。由于采用RISC精简指令集结构,其指令集大多为单周期指令,具有高速运行的特点。3V供电时,未使能内部看门狗的情况下,Atmega48的典型掉电电流小于1uA。具体工作电流见图1。而且该单片机在1.8V~5.5V的电压范围内
[单片机]
利用555定时器构成白光LED电压调节器的方法
本文以一个555定时器为主要器件构成电压调节电路(如图所示),用来控制一个或多个白光LED。定时器IC1与R1、R2、C2构成了可复位非稳态多谐振荡器。 首次输入电压V S 后,D1将使存储电容器C1充电直到其电压略低于V S 。最初,晶体管Q2处于截止状态,IC1的复位输入为高电平,输出端(OUTPUT)为高电平,以让电流能经过R1给C2充电。 这段时间内,R4拉动放电端(DISCHARGE)导通晶体管Q1,电感L1中的电流I L 开始斜线增大。由于Q1饱和,因此D3和LED都处于反向偏压状态。 当C2的电压超过IC1中管脚6的极限电压(THRESHOLD)时,输出端(OUTPUT)与放电端(DISCHARGE)都变为低电平
[工业控制]
单片机的两个外围电路:复位电路和时钟电路
一般的单片机都要具备两个外围电路:时钟电路和复位电路 时钟电路 主要由一个晶振和两个电容组成。晶振的大小决定这单片机的时钟信号 (按我的理解就是:单片机编程时,同一个延时函数,晶振决定着它们的延时时间长短) 复位电路 分为上电复位和按键复位 主要由一个电阻、一个电容,如果按键复位的话,就再加个微动开关就成。都是为了把电路初始化到一个确定的状态,一般来说,单片机复位电路作用是把一个例如状态机初始化到空状态,而在单片机内部,复位的时候单片机是把一些寄存器以及存储设备装入厂商预设的一个值。 至于怎么连接,我就直接上图(仿真软件) 连接着单片机的XTAL1和XTAL2的是时钟电路,单片机实物两个引脚是在左侧第18和19两个
[单片机]
中断处理函数的注意事项
中断又叫异步中断,由硬件触发。而异常又称为同步中断,由软件触发。 中断服务 程序 (中断处理函数)是一种处理中断响应的函数,它是一种遵循特定原型声明的C函数,它运行在中断上下文中,也称为原子上下文, 代码 运行在此上下文中是不能被阻塞的。中断服务程序必须运行非常快,它最基本的工作就是告诉硬件已经收到了它发出的中断,但通常还执行大量其他的工作。为此,一般中断服务程序分为两半,一半是中数据恢复处理函数,称为上半部,它只执行那些可以很快执行的代码,如向硬件确认已经收到中断号等,其他的工作要延迟到下半部去执行。 执行在中断上下文中的代码需要注意的一些事项: 中断上下文中的代码不能进入休眠。比如ssleep(), mslee
[单片机]
基于Atmel QTouch的ATmega48感应按键设计
摘要:提出一种基于Atmel公司的QTouch技术和ATmega48单片机的感应按键设计方案。硬件上,根据应用系统的要求,灵活选择需要的单片机I/O口作为感应按键输入口;软件上,根据Atmel公司提供的函数库,将所选的I/O口配置成感应按键输入口,调用QTouch函数库接口对感应按键信号进行采集。实验结果表明,该方案设计简单,应用灵活,且具有较高的可靠性。 关键词:感应按键;ATmega48;QTouch 1 概述 感应按键技术,作为一项新兴的技术,已经广泛用于各种产品。尤其是近两年以来,采用感应按键的家电产品呈爆发式增加。目前,市面上的这类产品主要有智能电冰箱、数字液晶电视、热水器、电热炉等家电产品。采用感应式按键的家电产
[工业控制]