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 ...
随机推荐
- tomcat启动项目时一直在跑,项目没起来
1. 在整合maven项目时我遇到一个问题,tomcat启动项目总是报超时,后来我把timeout调到180秒,还是启动超时.看了不是timeout时间短的问题. 2.弄了一天也没解决,后来请大神给看 ...
- FJNU Fang G and his Friends(状压DP)题解
Description 众所周知,fang G 有很多小伙伴,有一天,Fang G 打算带他们去玩有趣的游戏OOXX,这个游戏需要分成两组,有趣的是,每个人互相之间都有一个满意度,大家都想和自 ...
- SAP FI中配置“特别总帐标志” SGL
SAP FI中配置“特别总帐标志” SGL 创建时间:2018年10月6日(星期六) 下午3:42 | 分类:未分类 | 字数:396 | SAP FI中配置“特别总帐标志” SGL 2013年 ...
- python中模块的__all__详细使用
python模块中的__all__,用于模块导入时限制,如:from module import * 此时被导入模块若定义了__all__属性,则只有__all__内指定的属性.方法.类可被导入:若没 ...
- H5外包团队 H5开发微信APP的优势有哪些
H5外包团队 H5开发微信APP的优势有哪些
- kafka 创建消费者报错 consumer zookeeper is not a recognized option
在做kafka测试的时候,使用命令bin/kafka-console-consumer.sh --zookeeper 192.168.0.140:2181,192.168.0.141:2181 --t ...
- jenkins构建成功,但war包没有发布到tomcat下
如题,jenkins构建成功,在jenkins的workspace中有生成的war包,但没有发布到tomcat的webapps目录. 构建日志 找了很多原因发现应该还是项目相对路径不对导致的,我的wa ...
- [冷知识] 连字符-减号-横杠的区别 difference between hyphen-minus-dash
因为早期打印机等宽的原因, 连字符和减号都是 -, 叫做hyphen-minus ,对应Unicode: U+002D(ASCII也是). 现在减号可以是:U+2212, 但编程语言中还是习惯使用U+ ...
- 【转载】Linux常用命令
Linux常用命令大全(非常全!!!) 转载出处:https://www.cnblogs.com/yjd_hycf_space/p/7730690.html 系统信息 arch 显示机器的处理器架构( ...
- 使用Dockerfile定制ubuntu+nginx镜像
实验目的:书写Dockerfile,定制ubuntu 14.04 + nginx 1.14.0的镜像. 实验过程: 1. 下载nginx-1.14.0 http://nginx.org/downlo ...