44B0 中断分析(二)

发布者:心境恬淡最新更新时间:2015-04-21 来源: eechina关键字:44B0  中断分析 手机看文章 扫描二维码
随时随地手机看文章
1.文件描述和准备  

本文将试图讲述44B0X处理器处理中断的具体过程,如果读者的中断执行不正常,请确保 FLASH 中烧录了立宇泰 ARMSys's BootLoader for Linux V1.2,同时ADS开发环境中的RO Base为0x0c0008000,RW Base为0xc5f0000。 本文采用的44BINIT.s的自叙为:



本程序以系统的Timer0中断为例,中断初始化程序如下: 



2.调试程序装载后 

AXD装载AXF调试文件后,暂时不运行,PC指针指示在b ResetHandler处,用右键菜单中的Disassembly,可以看出初始地址实际上指示在0x0c008000,即ADS中设置的RO Base,表示程序即将从0x0c008000开始运行。 






3.非矢量模式下的执行过程 

经过以上准备工作,单击【运行】两次后 Timer0 中断发生,通过事先设置好的断点捕捉中断,所有图中的红点即为运行前设置的断点: 

⑴PC->0x0c008000 转到 PC->0x00000018 处,即转到 Flash 中执行Bootloader的代码。



⑵ PC->0x00000018 转到 PC->0x0c000018处,即又跳回到SDRAM中。 [page]



⑶ PC->0x0c000080处执行的是IsrIRQ中断识别程序。 



⑷ 识别程序段执行完后,转到用户的中断服务程序Timer_ISR( )入口。



4.矢量模式下的执行过程 

OPTION.s中有_IRQ_BASEADDRESS EQU 0xc000000; 

在44BINIT中有如下定义: 

^ (_IRQ_BASEADDRESS+0x100) …… 
HandleTIMER0 # 4 
…… 

猜测地址HandleTIMER0=_IRQ_BASEADDRESS+0x134=0x0c000134,下面来看看猜想对不对。 改rINTCON=0x1进行矢量中断过程的观察,重新装载程序,再单击【运行】两次后,Time0中断产生: 

⑴ Timer0 中断产生,跳转到中断矢量地址 0x00000060,而不是跳转到 IRQ中断入口0x00000018,这就是非矢量中断和矢量中断的本质区别。 



⑵ 再跳转到0x00000334,注意还是在Flash中,因此还得归功于Bootloader 黑体所选程序是类似宏调用HandlerTIMER0 HANDLER HandleTIMER0产生的代码,由于这是在 Flash 中,所以不可能是调试时下载进去的。(不相信可以把44BINIT.s中的宏HandlerTIMER0 HANDLER HandleTIMER0注释掉试试。) 执行完0x00000348处的指令后,执行步骤⑶。



⑶ 好,Bootloader完成使命后,跳转到用户的Timer_ISR( ),入口地址为0x0c0087d4,在44B.h中有定义:#define pISR_TIMER0 (*(unsigned *)(_IRQ_BASEADDRESS+0x134))//0x54)),可看出pISR_TIMER0和44B0INIT.h中定义的HandleTIMER0指向地址是一样的,都指向0x0c000134。 下图即pISR_TIMER0=(int)Timer_ISR;已经生效的明证。


  
【心得】不管是何种中断模式,如果中断总是没有执行,则可以在FLASH中的中断分支表的相应项目上设置断点,再然后灵活运用STEPIN、STEPOUT、STEP等控制程序流程,以观察问题的根源。 在汇编级代码中设置断点,需要用到右键菜单中的【Set PC】,设置完后,不要忘记改回初始的PC值。
关键字:44B0  中断分析 引用地址:44B0 中断分析(二)

上一篇:ARM硬件设计:电源和时钟
下一篇:44B0中断分析(一)

推荐阅读最新更新时间:2024-03-16 13:59

【ARM裸板】定时器中断示例与分析
1.定时器结构分析 1.每来一个CLK,TCNTn减1 2.当TCNTn == TCMPn时,(可以把对应的PWM引脚翻转) TCNTn与TCMPn的值来自寄存器TCNPBn与TCMTBn 3.TCNTn继续减1,当TCNTn == 0时,可以产生中断(PWM引脚再次翻转) 4.TCNTn == 0时,可自动加载初值 2.初始化 1.设置时钟源 2.设置初值 3.加载初值,启动Timer 4.设置为自动加载 5.中断相关 需要设置:1.Prescaler,2.MUX(Divider),3.TCMPB0(不是PWM测试,因此该不需要设置),4.TCNTB0,5.TCON0 2.1 设置时钟源 由上公式: 设
[单片机]
【ARM裸板】定时器<font color='red'>中断</font>示例与<font color='red'>分析</font>
arm linux 下中断流程简要分析中断处理流程
三 响应中断 首先在分析源码之前,让我们了解一些原理性的东西, 我们都知道在处理中断要保存当前现场状态,然后才能处理中断,处理完之后还要把现场状态恢复过来才能返回到被中断的地方继续执行,这里要说明的是在指令跳转到中断向量的地方开始执行之前,CPU帮我们做了哪些事情: R14_irq = 要执行的下条指令地址 + 4 //这里的下条指令是相对于被中断指令的下条。即返回地址 SPSR_irq = CPSR //保存的现场状态,r0到r12要由我们软件来保存(如果需要的话)。 CPSR = 0b10010 //进入中断模式 CPSR = 0 //在ARM模式下执行(不是Thumb下) CPSR
[单片机]
arm linux 下<font color='red'>中断</font>流程简要<font color='red'>分析</font><font color='red'>中断</font>处理流程
MCS-51单片机多个中断源中的外中断分析方案
MCS-51单片机有多个中断源,以8051为例,有5个中断源,两个外中断、两个定时中断和一个串行中断,这一节我们讨论lcd液晶屏图外中断软件编程。 外中断是由外部原因引起的中断,有两个中断源。即外中断0(INT0)和外中断1(INT1),中断请求信号由引脚P3.2(INT0)和P3.3(INT1)输入。 外中断请求信号有两种方式,一是电平方式,二是脉冲方式。可通过有关控制位的定义进行规定。 电平方式为低电平有效,只需在单片机的(INT0)和(INT1)中断请求输入端采样到有效的低电平时,就会激活外部中断。 脉冲方式则在脉冲的后负跳沿有效,即在相邻两个机器周期对中断请求引入端进行采样中,如前一次为高,后一次为低即为有效中断请
[单片机]
MCS-51单片机多个<font color='red'>中断</font>源中的外<font color='red'>中断</font><font color='red'>分析</font>方案
【ARM裸板】软件中断分析及示例
1.APP如何切换模式 APP一般运行于User Mode下,受到限制(例如不可访问硬件) 如果APP想要访问硬件,必须切换模式 如何切换?发生异常即可: 软中断,swi #val 中断 未定义指令异常 2.SWI中软处理过程 执行异常处理函数之前,硬件会处理的事情: 1.lr_svc保存有被中断模式中的下一条即将执行的指令的地址 2.SPSR_svc保存被中断模式CPSR 3.CPSR的 = ,进入到svc模式 4.跳到0x08的模式执行程序,即跳到b do_svc这一指令 /*====================================异常向量表===============================
[单片机]
【ARM裸板】软件<font color='red'>中断</font><font color='red'>分析</font>及示例
stm32 外部中断库函数实现全程分析
前题:   闭门造车,两周了,经过各种的思考和求问,反复阅读了 M3权威指南 和 stm32不完全手册 的相关章节,以及开发板厂商的实验例程,对stm32这块中断终有所悟,是以记之。   至于中断的什么优先级,什么优先级分组,使能之类的原理,就不再赘述。这里主要是记载以下如何使用中断,以及中断配置函数的实现过程,其中并叙述我曾经的疑惑和感悟。   我的开发板里的中断例程是用按键控制一个灯亮和灭的两个状态。   这个例程的实现过程如下描述: 第一步,将一个I/O口配置成中断输入模式。      这里需要注意的是,GPIO本身是没有中断功能神马的。如果硬要使他产生中断输入方式,就得将相应的端口映射到相应的外部事件上去。而
[单片机]
stm32 外部<font color='red'>中断</font>库函数实现全程<font color='red'>分析</font>
44B0中断分析(一)
首先ARM 芯片要中断设置要是能中断向量,然后当有 IRQ 中断来之后,CPU自动的到0x18地址处取指。0x18处的指令呢是CPU 根据中断源算好的(比如:中断 EINT4567 来了,那么 0x18 处的指令就是跳转到地址 0x30 处)。然后就执行 ldr pc,=HandlerEINT4567 这条指令。这条指令的执行结果就是跳转到 HandlerEINT4567 HANDLER HandleEINT4567 处执行。这条是宏指令,你可以看一下宏定义。执行结果就是跳转到HandleEINT4567 处执行。 那么 HandleEINT4567 处又是什么指令呢?这就要联系 44b.h 文件的#define pISR_EI
[单片机]
<font color='red'>44B0</font><font color='red'>中断</font><font color='red'>分析</font>(一)
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved