AVR 嵌入式单片机芯片的中断系统介绍
body, table{font-family: 微软雅黑; font-size: 13.5pt}
table{border-collapse: collapse; border: solid gray; border-width: 2px 0 2px 0;}
th{border: 1px solid gray; padding: 4px; background-color: #DDD;}
td{border: 1px solid gray; padding: 4px;}
tr:nth-child(2n){background-color: #f8f8f8;}
| RESET $000 | INT0 $002 | INT1 $004 | INT2 $024 |
ATmega16的中断控制:
| ▋AVR响应一个可屏蔽中断源(假定为A中断)的中断的条件是: 响应A中断 = 全局中断允许标志 AND 中断A允许标志位 AND 中断A标志 当某个中断条件成立后,硬件会自动将该中断的标志位置"1",表示中断产生,同时也作为申请中断服务的请求信号。如果该中断的允许位为"1",同时AVR的全局中断允许位 I 也是"1"时,那么MCU在执行完当前一条指令之后就会响应该中断。 ▋AVR复位后,各个中断允许位以及全局中断允许位均被清零,这保证了程序在开始执行时(一般程序开头是对芯片内部以及外围系统的初始化设置)不会受到中断的干扰。 ▋AVR复位后的用户初始化程序中,需要先对需要使用的中断源进行必要的配置,待系统初始化过程结束后在置位 I ,使系统进入正常的工作状态,开始响应中断请求。 |
AVR的中断响应过程:
| 为了提高中断响应的实时性,AVR在中断响应和返回过程中,硬件上的处理仅仅保护和恢复了中断的断点(PC值)。而对中断现场没有采取任何处理。 因此,中断现场的保护工作需要用户在自己编写的中断服务程序中通过软件完成,以保证主程序在被打断时所使用的标志位和临时寄存器等不会被中断服务程序改变,例如,对状态寄存器SREG的保护等! |
中断服务程序编写:(三个框架)中断向量区部分、主程序部分和中断服务程序部分。
| 开放中断源本身的中断允许位之前,最好先使用指令将该中断的中断标志位清除,然后马上将中断允许位置“1”。 在开放中断前清楚可能存在的中断标志,保证了中断开放后不会形成一次“多余”的中断,这个“多余”的中断有时会造成致命的错误。因为在对中断源进行设置过程中,或中断源对应的硬件模块在工作中都有可能改变中断标志位。 |
| 中断服务程序中要考虑被中断现场的保护和恢复问题。中断的产生和响应是随机的,而且在中断服务程序中经常要使用一些寄存器,或对RAM中的变量进行操作,也会有判断和跳转的操作,这些指令可能会改变SREG中的标志位,所以必须确保当从中断服务程序返回时,被中断服务程序改变的现场全部正确的恢复,这样当中断返回后,主程序才能正确继续运行下去。 |
| 有很多情况下,中断仅仅表示外围设备或内部功能部件的工作过程已经达到某种状态,但不需要马上去处理,或者允许在一个比较充裕的限定时间内处理,这就可以将它们的处理工作放到主程序中完成。在这种情况下,最好的方式就是定义和使用信号量或标志变量,在中断服务程序中只是简单的对这些信号量或标志量进行必要的设置,不做其他处理就马上返回主程序,由主程序中根据这些信号量或表质量的值进行和完成处理工作。 这样做的另一个好处是,可以大大减少中断服务程序中的对中断现场保护和恢复的工作,从而又减少了中断程序的执行时间,同时也节省了堆栈空间和FLASH空间(代码少了)。 |
AVR 嵌入式单片机芯片的中断系统介绍的更多相关文章
- linux下avr单片机开发:中断服务程序
不管是什么单片机程序,中断总是非常重要的一部分 ,linux 下的avr开发,主要是依靠avr-gcc,以及avr-libc,它们对中断程序的格式要求,与window下的icc-avr以及win-av ...
- AVR单片机教程——定时器中断
本文隶属于AVR单片机教程系列. 中断,是单片机的精华. 中断基础 当一个事件发生时,CPU会停止当前执行的代码,转而处理这个事件,这就是一个中断.触发中断的事件成为中断源,处理事件的函数称为中断 ...
- 嵌入式单片机,ATmega328P,外部中断INT0,INT1,INT2,中断标志位介绍
body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...
- 嵌入式单片机STM32应用技术(课本)
目录SAIU R20 1 6 第1页第1 章. 初识STM32..................................................................... ...
- 使用Superprg 下载 AVR/51单片机固件 【worldsing笔记】
progisp 2.0 可以下载avr.51等单片机,单击下载 Superprg 单击下载 Superprg软件志峰公司出的专用软件,配合ZF_209使用, ...
- 2-关于单片机通信数据传输(中断接收,大小端,IEEE754浮点型格式,共用体,空闲中断,环形队列)
上一篇链接 http://www.cnblogs.com/yangfengwu/p/8628219.html 先说明一点这种方式,不光对于单片机类的,,对于上位机接收数据同样适用----不骗人的,自己 ...
- 如何快速上手一款新的嵌入式CPU芯片(记录CC2540开发经历)
新换了工作,需要熟悉新公司的产品开发项目,更新博客就懈怠了,不过环境的不同,也让我对嵌入式开发有了更深刻的理解.在原公司我主要负责在STM32F207芯片平台上, 利用UCOS+LWIP进行嵌入式服务 ...
- 嵌入式单片机之stm32串口你懂了多少!!
stm32作为现在嵌入式物联网单片机行业中经常要用多的技术,相信大家都有所接触,今天这篇就给大家详细的分析下有关于stm32的出口,还不是很清楚的朋友要注意看看了哦,在最后还会为大家分享有些关于stm ...
- AVR/Arduino定时/计数器、中断入门
在Arduino中,可以使用AnalogWrite来使用硬件产生490Hz/980Hz的pwm波,并可根据参数来设定占空比.不了解这个的同学可以去AnalogWrite学习下,SecretsOfArd ...
随机推荐
- 含服务端,客户端,数据库的注册/登录/聊天/在线/离线查看的聊天demo
用websocket,mysql,node的写了一个简单聊天的demo 实现了: 注册,登陆功能: 聊天信息广播: 在线/离线状态的查看: 服务端: 主要引用http,fs,mysql,socket. ...
- docker入门实例
Docker 是什么? 我们在理解 Docker 之前,首先得先区分清楚两个概念,容器和虚拟机. 每台虚拟机都需要有自己的操作系统,虚拟机一旦被开启,预分配给它的资源将全部被占用. 每一台虚拟机包括应 ...
- Linux下“/”和“~”的区别
在linux中,”/“代表根目录,”~“是代表目录.Linux存储是以挂载的方式,相当于是树状的,源头就是”/“,也就是根目录. 而每个用户都有”家“目录,也就是用户的个人目录,比如root用户的”家 ...
- 【VS工具】vs2017中的一些小功能
一.json转为类 1.打开一个json文件,复制 2.打开一个.cs文件,将json粘贴为类 3.got it 二.C#交互窗口 1.视图->其他窗口->C#交互窗口 2.打开了一个窗 ...
- MVC基本登陆与验证码功能实现
一.基本登陆实现与验证码功能实现,该功能是和spring.net功能集合使用的,因为后面要用到验证是否处于登陆状态 1. 先构建一个登陆页面 @{ Layout = null; } <!DOCT ...
- java异常处理try catch finally
1 异常 1.1 异常处理的作用 在编程时,如果出现文件打开失败,读写文件就会异常退出.如果出现内存溢出错误,程序也会异常退出.如果不能对这些异常进行处理.程序则无法正常运行.所 ...
- vue中使用动画vue-particles
1.下载依赖 npm install vue-particles --save-dev 2.main.js引入 import Vue from 'vue' import VueParticles fr ...
- hive参数配置详细
hive.exec.mode.local.auto 决定 Hive 是否应该自动地根据输入文件大小,在本地运行(在GateWay运行) true hive.exec.mode.local.auto.i ...
- CSS清除浮动的一种简便的方法
在使用的浮动的元素的父元素添加该CSS样式 .clear{ overflow: auto; }
- 在vue中使用watch监听对象或数组
最近发现在vue中使用watch监听对象或者数组时,当数组或者对象只是单一的值改变时,并不会出发watch中的事件. 在找问题过程中,发现当数组使用push一类的方法时,会触发watch,如果只是单一 ...