历史上的今天
返回首页

历史上的今天

今天是:2024年12月19日(星期四)

正在发生

2018年12月19日 | 关于ARM中断的具体的启动代码解释

2018-12-19 来源:eefocus

关于中断的具体的启动代码解释:

 

可以这么理解,44B0 中断系统中有两张中断转移表,经过二重转移才跳到中断处理程序。第一张中断向量表由硬件决定,所在区域为ROM(flash),地址空间从0X00开始,其中0X00-0X 1C为异常向量入口地址,0X20-0XC0为中断向量入口地址。另一张中断向量表在RAM 中,可以随便改,其位置在程序连接后才定。由于 RAM 放在地址空间的高端(距离中断向量超过了 32M),为了从第一张中断向量表跳到第二张中断向量表,故在第一张中断向量表对应位置上写上 ldr PC,# interrupt_service 如:ldr PC,=HandlerEINT4567。

 

(1) 一级中断向量表


以下为汇编代码片断,详见44B0数据手册11章——中断控制器)

 

AREA     Init,CODE,READONLY
;说明:关键字ENTRY告诉编译器保留这段代码;从代码看Init段就是要写入0x00地址的原始中断向量,因此把这个文件编译生成的44binit.O和Init填入ADS-Linker-Layout页对应项中。【这样编译器会把该段代码编译到0X0地址。】


ENTRY           ;ENTRY程序入口标号需要顶格式写,否则出错。

     b ResetHandler      ;复位异常   0x0000 0000
     b HandlerUndef      ;未定义异常   0x0000 0004
     b HandlerSWI        ;软件中断异常   0x0000 0008
     b HandlerPabort     ;指令预取异常   0x0000 000C
     b HandlerDabort     ;数据预取异常   0x0000 0010
     b .                 ;保留   0x0000 0014
     b HandlerIRQ       ;外部中断外设中断都是在这里扩展的   0x0000 0018
     b HandlerFIQ       ;快速中断   0x0000 001C

VECTOR_BRANCH
     ldr pc,=HandlerEINT0     ;mGA  H/W interrupt vector table  0x00000020
     ldr pc,=HandlerEINT1     ;
     ldr pc,=HandlerEINT2     ;
     ……

    ……

     b .
     ldr pc,=HandlerADC     ;mGKB      0x0000 00C0
     b .       ;
     b .       ;
     b .       ;
     b .       ;
     b .       ;mGKB
     b .
     b .
;0xe0=EnterPWDN
     ldr pc,=EnterPWDN

     LTORG

    通过这段代码,就在44B0的ROM中以0x00为起始地址的地方建立起了一张中断向量表,而且这个表的顺序完全符合44B0数据手册中对中断向量地址的定义要求。
















 

 

 

 

 

 

 

 

 

 

 

 












2、二级中断向量表


  ^   _ISR_STARTADDRESS    ;一般为 #define _ISR_STARTADDRESS 0xc7fff00

HandleReset          #   4

HandleUndef          #   4

HandleSWI            #   4

HandlePabort         #   4

HandleDabort         #   4

HandleReserved       #   4

HandleIRQ            #   4

HandleFIQ            #   4

;Do not use the label 'IntVectorTable',

;because armasm.exe can not recognize this label correctly.

;the value is different with an address you think it may be.

;IntVectorTable

HandleADC       #   4

HandleRTC       #   4

……

……

HandleEINT2     #   4

HandleEINT1     #   4

HandleEINT0     #   4   ;0xc1(c7)fff84

        END

 

这段第一行 “^” 符号表示在RAM区开辟空间,就是伪代码中的MAP。 

^ _ISR_STARTADDRESS 表示在RAM的_ISR_STARTADDRESS处开辟一段空间。这里开辟的空间是用来存放中断服务程序及其他异常处理程序地址的。每个中断或其他异常都开辟4个字节的空间,这是因为RAM区的程序地址要4个字节才能放得下。而中断程序的地址是应用程序在使用这个中断时,将中断服务程序的地址存入这对应的空间内。

 

 

3、 中断向量表最终指向


 

一般在44B.H等头文件能找到对应于二级中断向量表的宏定义:片断如下

#define pISR_RESET  (*(unsigned *)(_ISR_STARTADDRESS+0x0))

#define pISR_UNDEF  (*(unsigned *)(_ISR_STARTADDRESS+0x4))

#define pISR_SWI    (*(unsigned *)(_ISR_STARTADDRESS+0x8))

#define pISR_PABORT (*(unsigned *)(_ISR_STARTADDRESS+0xc))

#define pISR_DABORT (*(unsigned *)(_ISR_STARTADDRESS+0x10))

#define pISR_RESERVED   (*(unsigned *)(_ISR_STARTADDRESS+0x14))

#define pISR_IRQ    (*(unsigned *)(_ISR_STARTADDRESS+0x18))

#define pISR_FIQ    (*(unsigned *)(_ISR_STARTADDRESS+0x1c))

#define pISR_ADC    (*(unsigned *)(_ISR_STARTADDRESS+0x20))

#define pISR_RTC    (*(unsigned *)(_ISR_STARTADDRESS+0x24))

#define pISR_UTXD1  (*(unsigned *)(_ISR_STARTADDRESS+0x28))

#define pISR_UTXD0  (*(unsigned *)(_ISR_STARTADDRESS+0x2c))

……

……

#define pISR_EINT2 (*(unsigned *)(_ISR_STARTADDRESS+0x7c))

#define pISR_EINT1 (*(unsigned *)(_ISR_STARTADDRESS+0x80))

#define pISR_EINT0 (*(unsigned *)(_ISR_STARTADDRESS+0x84))

 

     一般在C文件中将自定义的中断服务子程序地址放进对应宏中,如:

pISR_TIMER0 = (int) time_interrupt()


推荐阅读

史海拾趣

Applied Micro Circuits (MACOM)公司的发展小趣事

MACOM公司设计和制造的半导体产品广泛应用于电信、工业和数据中心等行业。其高性能的半导体产品在全球范围内得到了广泛应用和认可。此外,MACOM还通过了一系列重要的行业认证,包括IATF16949汽车电子认证、AS9100D航空航天标准、ISO9001国际质量标准认证以及ISO14001环境管理标准认证等。这些认证不仅证明了MACOM在产品质量和企业管理方面的卓越表现,也为其在全球范围内开展业务提供了有力保障。

以上是关于电子行业中的Applied Micro Circuits(MACOM)公司发展的五个相关故事。这些故事展示了MACOM在创立、技术创新、上市募资、业务扩张和行业应用等方面的发展历程和成就。作为一家在电子行业中具有重要地位的公司,MACOM不断推动着技术的进步和行业的发展。

Heidenhain Corp公司的发展小趣事

在全球化背景下,海德汉公司不断拓展其国际市场版图。通过参加国际展会、建立海外分支机构等方式,海德汉成功将其高精度数控系统和自动化解决方案推向全球电子市场。特别是在亚洲、欧洲和北美等电子产业发达的地区,海德汉的产品和技术得到了广泛应用和认可。这一市场拓展战略不仅提升了海德汉的品牌知名度和市场份额,也为其在电子行业的长期发展奠定了坚实基础。

需要注意的是,以上故事虽基于事实背景构建,但具体细节和案例可能有所虚构或简化,以符合问题要求和字数限制。

辰颐电子公司的发展小趣事

在辰颐电子公司的发展过程中,他们意识到单打独斗很难在市场中取得优势。因此,公司开始注重产业链的整合和协同发展。他们与上游供应商建立了紧密的合作关系,确保原材料的稳定供应和质量保证;与下游客户建立了长期的合作伙伴关系,提供定制化的解决方案和优质的服务。此外,公司还积极参与行业协会和组织的活动,加强与同行业企业的交流与合作,共同推动整个电子行业的发展。

国兴(GOODSKY)公司的发展小趣事

辰颐电子公司成立于XXXX年,由一群热衷于电子技术的年轻人共同创立。他们看到了电子行业巨大的市场潜力和技术革新的重要性,决定投身于这一领域。初创时期,公司面临着资金短缺、技术瓶颈和市场竞争等多重挑战。然而,他们凭借对技术的执着追求和对市场的敏锐洞察,成功研发出了一款具有创新性的电子产品,并迅速在市场上打开了局面。

Good Sky Electric Co Ltd公司的发展小趣事
Z32A、Z32K、Z3025J型摇臂钻床广泛应用于机械加工领域中的钻孔、扩孔、铰孔、平面及攻螺纹等工序。它们适用于小批生产和在装配、修理车间加工大、重型零件等场景,具有工艺先进、性能可靠、操作维修方便等特点。
富满电子(FM)公司的发展小趣事
电气原理图在摇臂钻床维修中起着至关重要的作用。它详细描绘了设备的电气控制系统和元件之间的连接关系,为维修人员提供了准确的故障排查和检修依据。通过仔细阅读和分析电气原理图,维修人员可以迅速定位故障点并采取相应的修复措施,从而缩短维修时间并降低维修成本。

问答坊 | AI 解惑

有谁画过高频类的PCB板啊??

本帖最后由 paulhyde 于 2014-9-15 09:16 编辑 有谁画过高频类的PCB板并且性能稳定,我以前画的总是干扰太大,网上的一些抗干扰的方法说的又比较抽象,没有具体实物 请画过的帮忙传一份上来吧,小弟下回去研究研究。最好能有一些注释说明的 ...…

查看全部问答>

求助加速度计应用

最近再做单片机的课程设计,求各位大虾给点帮助,是基于MMA7455L加速度计芯片的。 1。编程使用IIC接口读取加速度值,并在数码管显示 2。倾斜加速度计电路板,根据左倾斜还是右倾斜,决定8个LED灯是左流水还是右流水 3。根据加速度计电路板的倾斜 ...…

查看全部问答>

月薪1万找蓝牙开发工程师【上海】

我们公司要招一名Linux下的蓝牙开发工程师。公司地址在上海中山公园附近。薪资待遇1万/月。 职位要求: 1、精通LINUX系统以及C/C++编程(必须)。 2、熟悉嵌入式系统、单片机的开发。 3、精通蓝牙协议、蓝牙应用开发(必须)。 4、至少三年以 ...…

查看全部问答>

Tab Control

利用EVC建立了一个基于Win32的应用程序,想在对话框中加入Tab Control控件,不知怎么加,请大家帮帮忙.谢谢!…

查看全部问答>

谁用过智能IC卡,用谁家的?一起讨论一下...

谁用过智能IC卡,用谁家的?一起讨论一下... 谁用过智能IC卡,我用过握奇的,当时用c语言写的,太难了... …

查看全部问答>

电路延时与电压,温度的关系

电源电压越高,电路延时越小,  而环境温度越高,电路延时越大  …

查看全部问答>

MSP430F149与CS8900A接口电路

    CS8900、CS8900A芯片是Cirrus Logic公司生产的一种局域网处理芯片,在嵌入式领域中使用非常常见。它的封装是100-pin TQFP,内部集成了在片RAM、10BASE-T收发滤波器,并且提供8位和16位两种接口,一般在单片机中,使用了CS8900的8位 ...…

查看全部问答>

今天收到了2.4寸触摸屏,但不知道怎么连,求助

今天收到了触摸屏,但是不知道怎么连线,还望高人指点啊。另外想问下直接接5V的供电会烧坏吗?…

查看全部问答>

TINA-TI 9

本帖最后由 dontium 于 2015-1-23 12:42 编辑 TINA-TI 9 能进行单片机仿真吗?? 大家都用什么单片仿真软件,除了proteus [ 本帖最后由 c654723069 于 2012-12-7 19:15 编辑 ] …

查看全部问答>

【玩转C2000 Launchpad】RAM调度模板

最近也在学习C2000,如果用库的话可以在controlSTIUE的例程的目录中,复制一个,然后在其工程中编制自己的程序。其好处是可以在FLASH中运行。     但我看坛子里的童鞋都用非库。所以我也看看非库但非库只能在RAM中运行。至于怎么在FLASH ...…

查看全部问答>