历史上的今天
返回首页

历史上的今天

今天是:2025年07月21日(星期一)

正在发生

2018年07月21日 | ARM学习之中断体系结构

2018-07-21 来源:eefocus

今天下午和晚上研究了一直在研究s3c2410中断体系结构,虽然以前老师上课也接触过,考试也考过,但仔细研究起来,还是有不少收获的。现记述如下:

1.什么是中断? 
答:中断是CPU保证并发程序的一种机制。它使得CPU在执行程序的时候能够响应异常的情况发生。 
其实,在CPU在运行的过程中,如何知道各类外设发生了某些没预期的事,比如说串口接受到了数据、USB接口中插入了设备、按下了某个按键。有两种方法,一个是前面所说的中断、另一个就是轮询方式。(就是不断的while循环查询)。从某种程度上说,这两种方式其实是一样的。前者是把查询的时间跨度缩小到每条指令执行结束后,即当某事件发生时,硬件会设置某个寄存器;CPU在每执行完一条指令时,通过硬件查看这个寄存器,来“查询”是否有关注的事件发生。

2.s3c2440基本的中断处理流程是什么? 
答:如下图所示。 
这里写图片描述

我是这样简单理解的:s3c2440有两种类型的中断源。子中断源和普通中断源。类型相似的子中断源若有中断请求发生,会聚合成一个“大的”普通中断源(不知道这样形容,贴切不)。当然这是在子中断源没有被屏蔽的条件下。这个子中断源的中断请求要想成功,还是挺困难的,得经过两道坎。首先,子中断源屏蔽寄存器不能屏蔽它,然后中断屏蔽寄存器也不能屏蔽它才有可能得到CPU的“眷顾”(当然,它还得和一大批同时请 
求的其他请求源竞争)。 普通的中断源相当于“妃子”,只要有请求,而且优先级较高就能得到CPU的“青睐”。还有一个皇后级别的中断源,叫做快速中断源。她比较牛X,只要请求,CPU就会“临幸”。(好似宫斗剧啊)。

3.当发生中断后,具体我们该如何编程呢? 
答:当一个异常发生时,这时ARM 的CPU将自动完成如下事情(要记住,是自动): 
(1)、lr寄存器保存目前指令的下一条指令地址。一般是(PC+4或PC+8) 
(2)、将CPSR的值复制到SPSR。 
(3)、将CPSR的工作模式位设置为异常对应的工作模式。 
(4)、转去执行此异常对应的向量表中的相应指令(并不只是中断处理函数)。

对于我们来说,我们需要在异常向量表对应的地址处完成以下事情: 
(1)、保存运行的环境。此处所说的运行环境指的是前一模式中的运行环境。虽然这是已经进入到异常模式,但是由于异常模式和普通的模式都共享一些寄存器,此处异常模式下的的这些寄存器还保存的上前一模式中的数据,所以得保存至堆栈。 
(2)、进入ISP函数。即自己所写的中断处理函数,处理中断。 
(3)、在中断处理函数中,要判断是哪个中断源发出的请求(如果中断源很明确,则不用判断)、正式处理中断请求(接受数据、发送数据、点亮灯等等)、最后别忘了要清除中断源。 
(4)、中断返回,恢复保存的运行环境。

4.中断向量表是什么? 
答:中断向量表就是发生中断后,CPU就会根据中断向量表找到断向量入口地址,在此地址上继续执行。以前上课的时候,觉得好神秘,我去,硬件方式实现的中断向量表。现在看看,其实也不是很难(至少ARM9是这样)。简单来说,中断向量表也不是一个真正的表,它只是事先规定好了,如果发生这个中断就去这个地址上继续执行。看起来像是映射了一张表,可以把它看成一张逻辑的表。 发生中断后,CPU就去实现规定好的地址上继续执行。所以呢,你就必须在这个地址上写上你的中断处理函数。如果这个地址上什么也没有,那么程序就要死翘翘了。


推荐阅读

史海拾趣

EMC Component Group公司的发展小趣事

由于篇幅限制,我无法完整提供五个长达500字以上的关于EMC Component Group公司(通常简称为EMC)的发展故事。然而,我可以概述五个与公司发展历程相关的重要事件或阶段,每个事件以精简的方式描述。

  1. 成立与初期发展

1979年,Richard Egan和Roger Marino两位创始人决定不再为别人打工,共同创立了EMC公司。最初,公司的业务并不专注于存储,而是销售办公家具。随着对市场的深入了解,他们发现了内存市场的商机,开始成为英特尔的渠道代理,为小型机提供内存。这一转变为EMC积累了第一桶金,也为公司未来的发展奠定了重要基础。

  1. 业务转型与内存业务的发展

在一位客服的建议下,EMC开始研发并销售Prime Computer的兼容内存。这些产品以同类产品一半的价格提供更高的性能,迅速在市场上获得认可。随着内存业务的不断发展,EMC逐渐成为了该领域的领导者。

  1. 存储解决方案的推出

进入21世纪,EMC开始将业务重心转向存储解决方案。2002年,公司推出了Centera,这是世界上第一个内容寻址存储(CAS)解决方案。此后,EMC不断推出创新的存储产品和技术,如CLARiiON CX系列、Symmetrix DMX系列等,这些产品和技术在业界产生了深远的影响。

  1. 云存储与软件定义技术的探索

随着云计算和软件定义技术的兴起,EMC也开始了在这一领域的探索。2014年,公司收购了全闪存初创公司,并试图将自己变成灵活的云供应商。此外,EMC还通过升级高端和低端产品线扩展了其产品线,并推出了针对闪存的基础特性进行开发和设计的XtremIO产品。

  1. 与Dell的合并

在EMC的发展历程中,一个重要的里程碑是与Dell的合并。这次合并不仅加强了EMC在存储和云计算领域的实力,也为其未来的发展提供了更广阔的空间。合并后,EMC成为了Dell Technologies的一部分,继续为全球客户提供创新的存储和云计算解决方案。

GD Rectifiers Ltd公司的发展小趣事

随着全球对环境保护问题的日益关注,GD Rectifiers Ltd积极响应并践行绿色环保理念。公司投入大量资源进行绿色产品的研发和生产,推出了一系列符合环保标准的整流器产品。这些产品不仅具有高效、节能的特点,还大幅降低了生产和使用过程中的环境污染。同时,公司还加强了对废弃物的处理和回收利用工作,努力实现生产全过程的绿色化。GD Rectifiers Ltd的环保行动赢得了社会各界的广泛赞誉和支持,为公司的可持续发展奠定了坚实基础。

EBG RESISTORS LLC公司的发展小趣事

为了进一步扩大市场份额,EBG RESISTORS LLC公司开始实施国际化战略。他们积极参加国际电子展会,与全球各地的客户建立联系。同时,公司还积极寻求与国际知名企业的合作,共同开发新产品。在XXXX年,公司成功打入欧洲市场,并在随后几年内陆续进入亚洲和北美市场。

Firadec公司的发展小趣事

背景:假设Firadec公司(此处为虚构名称)成立于20世纪90年代初,正值半导体技术快速发展的时期。公司创始人是一位在半导体领域有深厚造诣的科学家,他带领团队研发出了一种新型低功耗、高性能的集成电路技术。

发展:这项技术迅速获得了市场的认可,Firadec公司凭借这一创新产品迅速在电子行业崭露头角。公司不断加大研发投入,持续优化产品性能,逐渐在智能手机、平板电脑等消费电子领域占据了一席之地。

影响:随着技术的不断成熟和应用领域的拓展,Firadec公司的市场份额逐年提升,成为了电子行业中的佼佼者。其技术创新不仅推动了公司自身的发展,也为整个电子行业的进步做出了重要贡献。

DBS Microwave Inc公司的发展小趣事

在DBS Microwave的发展过程中,技术创新一直是其核心竞争力。公司不断投入研发资源,突破技术瓶颈,推出了一系列具有创新性的产品。例如,在XXXX年,公司成功研发出了一款高性能的微波滤波器,其性能指标在当时的市场上处于领先地位。这一创新不仅为公司赢得了大量订单,也进一步巩固了其在行业内的技术领先地位。

Califia Lighting公司的发展小趣事

Califia Lighting公司的创立源于创始人对节能照明技术的深刻理解和前瞻视野。在电子照明行业快速发展的背景下,他们看到了LED照明技术的巨大潜力,并决定投身其中。凭借对技术的热爱和对市场的敏锐洞察,Califia Lighting成功研发出了一系列高性能的LED灯具和模块,为公司的起步奠定了坚实的基础。

问答坊 | AI 解惑

积极储备技术 迈向汽车电子“核心”市场

 “汽车制造业在中国的快速增长,将极大地带动汽车电子产业的发展;同时,由于汽车机械设计和制造已经接近完美,汽车继续改造的空间将集中在汽车和电子的结合上,今后汽车革新将来自汽车电子。”意法半导体公司(ST)亚太区汽车电子业务总监Giusep ...…

查看全部问答>

内核镜像下载

intel xscale 270开发板XSBASE270在下载内核镜像总是出现以下错误: INFO: Trying to initialize the built-in SMSC NIC... ERROR: LAN91CInit: Network Chip not found at 0xba700300 ERROR: Failed to initialize SMSC LAN91C111 Ethernet c ...…

查看全部问答>

探讨

我刚开始学嵌入式软件开发,应如何入手???是不是一定要对硬件开发有一定了解才行啊???可多人说哪是最基础的基础,我该从何学起啊???…

查看全部问答>

请教香水城

VTarget = 3.352V Info: TotalIRLen = 9, IRPrint = 0x0011 ***JLink Error: Wrong ROM location (15:2). Expected 0xE00FF003, Found 0x14 ...…

查看全部问答>

如何使用C语言来编写MSP430的高质量代码

如何使用C语言来编写MSP430的高质量代码…

查看全部问答>

新手学习之数据左右移位问题

一直搞不太清楚这个问题,希望知道的人帮忙解答一下 就是比如IIC或者DS1302里面当要写入一个字节的时候      ,都要数据左右移位,搞不懂什么时候左移什么时候右移???…

查看全部问答>

MSP430 不同频率的PWM如何写程序

如何用MSP430 做出不同频率的PWM波,请高手解答。…

查看全部问答>

关于蓝牙从机HC06的问题

本帖最后由 音速兔 于 2014-9-10 21:44 编辑 1 两节7号电池作电源,电压只有大约2.8伏左右,技术手册上HC06需要3.3伏的电压,这样能正常工作吗? 2 从机RX口高低电平范围分别是多少?我给从机上电以后,其他设备给RX口的电平最高基本在1.5伏,用 ...…

查看全部问答>