您的位置 首页 嵌入式

44B0中止剖析(二)

本文将试图讲述44B0X处理器处理中断的具体过程,如果读者的中断执行不正常,请确保 FLASH 中烧录了立宇泰 ARMSyss BootLoader for Linux V1.2,同时ADS开发环境中

1.文件描绘和预备

本文将企图叙述44B0X处理器处理中止的详细进程,假如读者的中止履行不正常,请保证 FLASH 中烧录了立宇泰 ARMSys’s BootLoader for Linux V1.2,一起ADS开发环境中的RO Base为0x0c0008000,RW Base为0xc5f0000。 本文选用的44BINIT.s的自叙为:

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

2.调试程序装载后

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

3.非矢量形式下的履行进程

经过以上预备工作,单击【运转】两次后 Timer0 中止发生,经过事前设置好的断点捕捉中止,一切图中的红点即为运转前设置的断点:

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

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

⑶ 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值。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/199098.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部