想总结中断由来已久,但是总感觉一章的东西,太多,无从下手。
前几天看到一句话“能把自己学会的东西说出来,才是真的学会”。今天,就要会一会这中断系统。
图片和文字内容来自:普中科技的ppt,百度文库,《操作系统》,《组成原理》我整理整理。
先不谈中断,先看看cpu可以如何处理输入输出。比如,现在我的键盘在输入,试问cpu如何知道我输入完成,以将输入的内容送入内存进行处理?最简单的是,cpu原地等待,cpu进行不断的查询,查询键盘是否输入完成。但是这样,cpu就不能去做其他事情,严重影响cpu的速度。
此时可以引入中断的方式。cpu工作自己的。键盘输入自己的。当键盘输入完成,发出中断请求。如果cpu决定响应该中断,保存当前工作进度,去提取输入的内容。中断处理结束后,恢复原来工作现场,继续工作。这样cpu的效率就大大提高。
中断的概念:
CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理(中断发生);
CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务);
待CPU将事件B处理完毕后,再回到原来事件A被中断的地方继续处理事件A(中断返回),这一过程称为中断 。
图一
引起CPU中断的根源,称为中断源。中断源向CPU提出的中断请求。CPU暂时中断原来的事务A,转去处理事件B。对事件B处理完毕后,再回到原来被中断的地方(即断点),称为中断返回。实现上述中断功能的部件称为中断系统。
51单片机的中断系统结构
89C51/52的中断系统有5个中断源 ,2个优先级,可实现二级中断嵌套 。
图二
图三
注意:上面都是请求中断,但cpu是否响应中断?这由IE寄存器决定。
只有IE的开关闭合(即cpu允许),当请求中断时,cpu才会响应。
中断请求标志(TCON):
1、TCON的中断标志
图四
(目前来说,只关心背景为深色的位)
IT0(TCON.0),外部中断0触发方式控制位。
当IT0=0时,为电平触发方式。
当IT0=1时,为边沿触发方式(下降沿有效)。
IE0(TCON.1),外部中断0中断请求标志位。
IT1(TCON.2),外部中断1触发方式控制位(类似IT0)。
IE1(TCON.3),外部中断1中断请求标志位。
TF0(TCON.5),定时/计数器T0溢出中断请求标志位。
TF1(TCON.7),定时/计数器T1溢出中断请求标志位。
中断请求标志(SCON):
中断允许控制(IE)
CPU对中断系统所有中断以及某个中断源的开放和屏蔽是由中断允许寄存器IE控制的。
图六
EX0(IE.0),外部中断0允许位;
ET0(IE.1),定时/计数器T0中断允许位;
EX1(IE.2),外部中断0允许位;
ET1(IE.3),定时/计数器T1中断允许位;
ES(IE.4),串行口中断允许位;
EA (IE.7), CPU中断允许(总允许)位。(所以执行中断时,总中断必须打开)
中断优先级(中断优先寄存器--IP):
同一优先级中的中断申请不止一个时,则有中断优先权排队问题。同一优先级的中断优先权排队,由中断系统硬件确定的自然优先级形成,其排列如所示:
图七
这里面稍微提下中断服务程序入口。当执行中断的时候,cpu要转去执行中断程序。但是如何知道程序的入口位置?
可以把中断的程序入口放在0003H的位置,cpu将这里面存储的程序入口放入pc(每次下一步执行的指令)中。(这只是我目前的想法,不知道正确与否)
中断号:
这在后面写程序会用到。
图八
如果是外部中断0的函数,在中断函数的后面加上 interrupt 0(0为外部中断0的中断号)。
中断优先级三条原则:
CPU同时接收到几个中断时,首先响应优先级别最高的中断请求。
正在进行的中断过程不能被新的同级或低优先级的中断请求所中断。
正在进行的低优先级中断服务,能被高优先级中断请求所中断。
为了实验上述判优,有硬件排队器;当然也可以用软件实现判优。
图九:具有屏蔽功能的排队器
上面这些优先级的设定是IP(中断优先寄存器),我没有用过,也不清楚怎么用,这里转载下其他文章关于它的介绍。
来源:http://www.sohu.com/a/191453790_99957951
P在特殊功能寄存器中,字节地址为B8H,位地址(由低位到高位)分别是B8H一BFH,IP用来设定各个中断源属于两级中断中的哪一级,IP的基本格式如下图所示:
图十
×:无效位。
PS:串行I/O中断优先级控制位。PS=1,高优先级;PS=0,低优先级。
PTl:定时器/计数器1中断优先级控制位。PTl=1,高优先级;PTl=0,低优先级。
Pxl:外部中断1中断优先级控制位。Pxl=1,高优先级;PXl=O,低优先级。
PT0:定时器/计数器o中断优先级控制位。PT0=1,高优先级;PTO=0,低优先级。
Px0:外部中断0中断优先级控制位。Px0=1,高优先级;Px0=0,低优先级。
中断的使用:
使用中断,要熟悉中断的结构,要根据要求设置寄存器。
1、首先明确使用哪个中断。
2、接着就要设置TCON(或者SCON),中断请求标志。
3、紧接着是设置IE,中断允许标志。
当上述设置满足时,单片机运行满足条件会触发中断请求,此时中断允许,进入中断,执行中断。
引用文章:
51单片机中断控制
单片机中断系统的控制寄存器IE和IP
51普中单片机的ppt
唐朔飞的《计算机组成原理》
上一篇:单片机的外部中断(二)
下一篇:51单片机的定时中断(三)
推荐阅读
史海拾趣
Einfochips公司一直致力于嵌入式系统的创新与发展。在某一时期,该公司推出了Eragon600,一款基于Qualcomm Snapdragon 600处理器的全新嵌入式开发平台。这一平台的推出,标志着Einfochips在嵌入式系统开发领域取得了重要突破。Eragon600不仅具备强大的处理能力,还适用于多种行业,包括工业、安全与监控、信息、娱乐等。在多个领域的广泛应用,进一步巩固了Einfochips在嵌入式系统开发领域的领先地位。
随着公司实力的不断增强,Clever Little Box开始将目光投向国际市场。公司制定了国际化战略,通过参加国际展览、建立海外销售渠道等方式,积极开拓海外市场。这一战略的实施不仅为公司带来了更广阔的市场空间,还提高了公司的国际竞争力。
需要注意的是,以上故事是基于公开信息和一般企业发展规律进行的概括和推测,并非Clever Little Box公司的真实发展历程。如需了解该公司更准确、具体的发展故事,建议查阅相关资料或访问公司官方网站。
2018年,Hei Inc Optoelectronic Division抓住行业整合的机遇,成功并购了一家在光电子材料领域具有领先地位的企业。这次并购不仅使公司获得了先进的光电子材料生产技术,还极大地丰富了公司的产品线。通过整合双方资源和技术优势,公司在光电子器件的研发和生产上实现了质的飞跃。并购后的Hei Inc Optoelectronic Division不仅在市场上占据了更大的份额,还进一步提升了自身的技术实力和品牌影响力。
近年来,随着全球对环保和可持续发展的重视,Hei Inc Optoelectronic Division积极响应国家号召,将绿色可持续发展理念融入到企业的生产经营中。公司投入巨资研发环保型光电子器件,并不断优化生产工艺流程以降低能耗和排放。同时,公司还积极参与各类环保公益活动,提升公众对绿色光电子技术的认知度。这些举措不仅赢得了社会各界的广泛赞誉,还为公司树立了良好的企业形象和品牌形象。在绿色可持续发展的道路上,Hei Inc Optoelectronic Division正稳步前行,不断开创光电子领域的新篇章。
进入2015年后,随着物联网、5G等新兴技术的兴起,光电子器件的市场需求呈现出爆发式增长。Hei Inc Optoelectronic Division敏锐地捕捉到了这一市场趋势,及时调整产品策略,加大了对低功耗、小型化光电子模块的研发力度。公司推出的新一代光电子模块不仅满足了市场对于高效能、低能耗的需求,还凭借其优异的性价比迅速占领了市场份额。这一举措不仅推动了公司的快速增长,还进一步巩固了其在光电子领域的市场地位。
随着公司的发展,DAVE Embedded Systems不断投入研发力量,致力于技术创新和产品创新。他们基于最新技术(如多核ARM Cortex、PowerPC和X86)设计了一系列高端嵌入式系统模块,这些产品不仅满足了客户对性能的需求,还提供了更好的可靠性和可扩展性。此外,公司还积极开发基于Android和Windows平台的嵌入式系统模块,以满足不同客户的需求。
常用的单总线有2大类: 1-Wire和HDQ16 1-Wire和HDQ16都采用单线数据双向通讯,特别是有些1-Wire系列器件甚至不需电源。 单总线和I2C,SPI相比接线简单,但时序要求很严格,一般采用IO模拟定时器辅助的方法. 做主机其缺点还不太明显,若作为从机设 ...… 查看全部问答∨ |
|
正在调试DM9000的驱动,不过以前没有涉及过wince下的驱动,显得很费力。移植应该是成功了,开机可以加载成功,环路ping,包括ping自己的IP地址和127.0.0.1都是可以的,这说明驱动加载应该没有问题了。但是,我没有办法pin ...… 查看全部问答∨ |
《边干边学-Linux内核指导》这本书上的那个“设计自己的驱动程序”的例子拿来编译不知道为什么错??? 书上说:采用下面的命令对vfifo.c进行编译: #gcc -c vfifo.c -D_KERNEL__ -DMODULE -O2 -g -Wall 如果没有出错的话,将会在本目录下生成一个vfifo.o文件。 可是我在redhat 9上编译出错,错误如下: In file included from /usr/include/linux ...… 查看全部问答∨ |
我写了个极简单的驱动程序,就是在2410上挂了一个ram,然后想对这个ram进行读写操作,现在不知道如何对这个驱动写测试代码 我的驱动代码如下 哪位高手愿意帮我看看阿 # include <windows.h> # include <types.h> # include <pkfunc ...… 查看全部问答∨ |
|
在dos下运行FCARM.EXE,将网页文件编译成c文件出问题了。。 我在dos环境下运行fcarm.exe文件,c:\\keil\\arm\\bin>fcarm.exe index.htm to web.c 那么,我的index.htm网页文件应该放在哪里? 编译之后的web.c 应该放在哪里?… 查看全部问答∨ |
|
随着3G在全球的日渐普及以及4G的上马,智能手机的发展进一步加大了手机芯片的竞争程度。分析机构预计明年3G芯片市场的竞争将会更加激烈。 研究机构WirelessIntelligence指出,由于智能手机及移动宽频需求量大增,全球3G用户数在今年3月中旬已 ...… 查看全部问答∨ |