历史上的今天

今天是:2024年11月18日(星期一)

2019年11月18日 | S3C2440中断过程详解(ADS,TQ2440)

发布者:闪耀星空 来源: 51hei关键字:S3C2440  中断过程  ADS  TQ2440 手机看文章 扫描二维码
随时随地手机看文章

下面以串口UART0接收中断为例:


串口接收中断初始化时有这么一句:pISR_UART0=(unsigned)__irq UART0 _GetInt   /把 UART0 _GetInt这个中断服务子程序的入口地址放到pISR_TICK,
S3C2440addr.h中#define pISR_UART0  (*(unsigned *)(_ISR_STARTADDRESS+0x90)) 
option.inc中_ISR_STARTADDRESS EQU 0x33ffff00 //也就是中断服务子程序的入口地址放到0x33ffff00+0x90这个地址单元,即放入相应的中断向量表中,当中断发生时可通过查向量表(S3C2440addr.h最后有向量表,有这么一句HandleUART0  #   4,此处即放的UART0的中断入口地址)找到入口地址,执行中断服务子程序


再看S3C2440addr.h中下面几句指令,所在地址已标出,这些地址上的指令称为“异常向量”,当复位时,CPU进入系统模式,并跳到0x00地址执行, 再跳到ResetHandler   处执行相应的复位程序,其他异常也是一样的执行过程。


b ResetHandler    ;  @0x00
b HandlerUndef   ;  @0x04
b HandlerSWI       ;  @0x08
b HandlerPabort   ;  @0x0c
b HandlerDabort   ; @0x10
b .  ;reserved  ,保留@0x14
b HandlerIRQ         ;@0x18

b HandlerFIQ          ;@0x1c


言归正传,当中断(IRQ)发生时,CPU进入中断模式,并跳到0x18处执行b HandlerIRQ (在S3C2440addr.h中)这条指令,程序跳到HandlerIRQ HANDLER HandleIRQ(还在S3C2440addr.h中)处,此处将根据下面的宏定义展开:


$HandlerLabel HANDLER $HandleLabel

$HandlerLabel      ;相当于$HandleIRQ
sub sp,sp,#4  ;sp=sp-4

stmfd sp!,{r0} ; r0内容保存到sp对应的栈中,应为入在下边用到所以先保存起来

ldr     r0,=$HandleLabel;   把HandleLabel这个地址放r0
ldr     r0,[r0]  ;  把HandleLabel这个地址的内容放r0
str     r0,[sp,#4]      ;把r0保存到sp+4的栈中,中断函数首地址HandleLabel入栈
ldmfd   sp!,{r0,pc}     ;   把sp对应的内容出栈放r0,sp+4放PC中,即原来保存的r0回复到r0,程序跳到HandleLabel,即HandleIRQ

MEND


上边这段程序执行完了之后,程序跳到HandleIRQ处执行,再看下面一段程序(S3C2440addr.h中),

ldr r0,=HandleIRQ       ;This routine is needed
ldr r1,=IsrIRQ   ;if there is not 'subs pc,lr,#4' at 0x18, 0x1c
str r1,[r0]

2440启动时执行这段程序,此段程序即把IsrIRQ和HandleIRQ标号等价起来,接着上面,程序跳到HandleIRQ处执行即跳到IsrIRQ处,在看下面程序IsrIRQ(S3C2440addr.h中)查向量表找入口地址:


IsrIRQ
sub sp,sp,#4       ;给PC寄存器保留;reserved for PC
stmfd sp!,{r8-r9}; 把r8-r9压入栈

ldr r9,=INTOFFSET ;INTOFFSET的值在2440addr.inc中定义为0x4a000014,
                                 ; 把中断偏移INTOFFSET寄存器的地址装入r9

ldr r9,[r9]                    ;把中断偏移INTOFFSET寄存器内容装入r9,
ldr r8,=HandleEINT0; 这就是向量表的入口HandleEINT0装入r8,中断向量表的基址
add r8,r8,r9,lsl #2       ;R8=R8+(R9<<2) ,基址加变址得到中断向量表地址

ldr r8,[r8]    ; 装入中断服务程序的入口
str r8,[sp,#8]   ;把入口压入堆,

ldmfd sp!,{r8-r9,pc} ;出栈,入口地址给PC即跳到中断服务程序执行,

关于INTOFFSET看下面截图:


至此程序跳到C编写的中断服务程序中执行。

为什么上面都没讲到中断的现场保护和现场恢复,请看下面(摘抄):

中断服务函数往往带有__irq 这样的标识

关于__irq 的使用

__irq为一个标识,用来表示一个函数是否为中断函数。对于不同的编译器,__irq在函数名中的位置不一样,例如:


ADS编译器中 : void __irq IRQ_Eint0(void);
Keil编译器中 : void IRQ_Eint0(void) __irq;


但是其意义一样,它所完成的任务是标识该函数为中断函数,在编译器编译是调用此函数时,先保护函数入口现场,然后执行中断函数,函数执行完毕,恢复中断现场,这整个过程不需要用户重新编写代码来完成,由编译器自动完成。当然也可以自己编写现场保护和恢复现场的代码。


关键字:S3C2440  中断过程  ADS  TQ2440 引用地址:S3C2440中断过程详解(ADS,TQ2440)

上一篇:2440裸机编程之二 C语言调用汇编语言编程
下一篇:u-boot-1.3.4 移植到S3C2440

推荐阅读

  近日,神州控股旗下科捷物流在北京发布了“人机共舞2.0”立体高密度机器人智能仓,该技术采用“货到人”模式,将技术与现有物流业务流程充分融合,属国内首例。   神州控股科捷物流常务副总裁陈滔滔介绍,相较于业内传统地面机器人“货到人”系统,该机器人拣选系统运用天地轨运行自动控制技术,采取空中悬挂机器人模式,突破了传统机器人仅能在...
纵观当前安防监控、网络摄像机主流市场,200万像素的全高清CMOS图像传感器仍然是众多镜头集成商们的首选,但随着安防监控市场的发展以及人工智能应用的渗透普及,更高清的画质、复杂光线环境下的良好适用性等要素,已经成为网络摄像机与安防监控应用厂商迫切的需要。 以客户的需求为出发点,技术领先的CMOS图像传感器供应商思特威科技(SmartSens)近日为...
据外媒报道,美国斯坦福大学(Stanford University)的科学家与能源部SLAC国家加速器实验室(SLAC National Accelerator Laboratory)重新设计了最重的电池组件——集电器(铜片或铝箔),并将其重量减少了80%,还能够立即熄灭起火事件,因而可以让锂离子电池变得更轻、更安全、更高效。集电器(图片来源:斯坦福大学)研究人员表示,如果采用该项技术...
如今的董事会所拥有的信息来源越来越多并且在质疑公司安全计划的效果时准备得更加充分。为了在远程团队日益增长的网络安全威胁环境中实现数字化目标,他们与安全和风险管理领导人的对话也变得更加复杂和细致。因此,他们根本不可能会问一些基本的问题,比如我们有多安全?为什么我们去年刚刚批准了X,现在又需要在安全方面投入更多的资金?你说我们被“黑...

史海拾趣

问答坊 | AI 解惑

印制电路板的可靠性设计—地线设计

印制电路板的可靠性设计—地线设计…

查看全部问答∨

0歐姆電阻燒毀

請教一問題 是關於RJ45接口轉RS232通訊的一接地電阻燒毀,圖如附件 TX,RX的信號處理芯片沒有損壞,單單就是0歐姆電阻燒毀, 原先是正常的,后客戶使用就燒毀了,無法讀取console信息了 個人懷疑是使用POE(power on ethernet)供電可能性較高,…

查看全部问答∨

求uPD78F1203资料?????

有谁有uPD78F1203的资料啊?能不能给我发一份啊?eeworld有一份谁下了啊?能不能给我发一份啊?我没有分数了。 我的邮箱 mazi86@163.com 先谢谢啦…

查看全部问答∨

中兴南京研究所中心研究院高端路由器开发部社招(工作地:南京)

中兴南京研究所中心研究院高端路由器开发部社招(工作地:南京) 要求: 1)必须有丰富的软件开发经验,擅长C/C++ 2) 精通网络协议(TCP/IP,路由协议)者优先 3) 具有硬件汇编,微码开发经验者尤佳 4)硕士1年/本科3年工作经验 有兴趣者简历 ...…

查看全部问答∨

第三次发帖:windows ce 5.0 系统 网页浏览器问题

    我有一款PDA ,用的是Windows CE 5.0的系统,系统自带的IE浏览器不好用,我想换一款。我试过Mozilla minimo ,NetFront,Ucweb,Opera,Deepfish,iBrowser和ccbrowser等都不行,好象支持Windows CE系统的软件很少,大部分都是支持Window ...…

查看全部问答∨

MSP430F149内部测温误差太大,求助

1. 我开启十通道内部测温 ADC12MCTL0 = 0x10; // Ref = ××ss, VREF; Input = A0 Ia ADC12MCTL1 = 0x11; // Ref = ××ss, VREF; Input = A1 ia*2 ADC12MCTL2 = 0x12; // Ref = ××ss, VREF; Input = A2 Ib ADC1 ...…

查看全部问答∨

scope-shot用户测试模块(UTM),您了解多少呢?

scope-shot用户测试模块[1](UTM)是一个通用的实用工具,用于验证,调试和样机的瞬态测试。 UTM以固定值的方式给DUT门施加了一个脉冲链,给DUT的漏极施加一个直流偏置。返回的数据是示波器[2]的波形数据,如图13所示。 图13.  &n ...…

查看全部问答∨

關GPIO的設定的一個暫存器PUD (28335)

GPIO里面有一个寄存器为PUD看了一下解释是内部上拉功能,还是不太明白,有比较懂的人可以教导一下吗 如果是上拉,那不是跟GPIODAT.SET暂存器一样了吗,置1就是高电平…

查看全部问答∨

TI的超高速ADC

本帖最后由 dontium 于 2015-1-23 12:59 编辑   最高达3600MSPS   ti./lit/sg/snwt001/snwt001.pdf …

查看全部问答∨

「ADI模拟大学堂」视频分享帖

由于之前在论坛中和大家分享了ADI模拟大学堂的资料,可能仅仅有资料还不够,需要去听听讲解人是如何讲解的,本次一些视频的形式与大家分享,希望大家能够有所收获。 下载资料的链接 「ADI模拟大学堂」集合贴 $(\'flv_LZ2\').innerHTML=(AC_FL_ ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
  • ARM裸机篇--按键中断
    先看看GPOI的输入实验:按键电路图:GPF1管教的功能:EINT1要使用GPF1作为EINT1的功能时,只要将GPFCON的3:2位配置成10就可以了!GPF1先配 ...
  • 网上下的--ARM入门笔记
    简单的介绍打今天起菜鸟的ARM笔记算是开张了,也算给我的这些笔记找个存的地方。为什么要发布出来?也许是大家感兴趣的,其实这些笔记之所 ...
  • 学习ARM开发(23)
    三个任务准备与运行结果下来看看创建任务和任运的栈空间怎么样的,以及运行输出。Made in china by UCSDN(caijunsheng)Lichee 1 0 0 ...
  • 学习ARM开发(22)
    关闭中断与打开中断中断是一种高效的对话机制,但有时并不想程序运行的过程中中断运行,比如正在打印东西,但程序突然中断了,又让另外一个 ...
  • 学习ARM开发(21)
    先要声明任务指针,因为后面需要使用。 任务指针 volatile TASK_TCB* volatile g_pCurrentTask = NULL;volatile TASK_TCB* vol ...
  • 学习ARM开发(20)
  • 学习ARM开发(19)
  • 学习ARM开发(14)
  • 学习ARM开发(15)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved