ARM中断分析二.doc_第1页
ARM中断分析二.doc_第2页
ARM中断分析二.doc_第3页
ARM中断分析二.doc_第4页
ARM中断分析二.doc_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

ARM中断分析二1文件描述和准备 本文将试图讲述44B0X处理器处理中断的具体过程,如果读者的中断执行不正常,请确保 FLASH 中烧录了立宇泰 ARMSyss BootLoader for Linux V1.2,同时ADS开发环境中的RO Base为0x0c0008000,RW Base为0xc5f0000。 本文采用的44BINIT.s的自叙为: ; * ; * NAME : 44BINIT.S * ; * Version : 10.April.2000 * ; * Description: * ; * C start up codes * ; * Configure memory, Initialize ISR ,stacks * ; * Initialize C-variables * ; * Fill zeros into zero-initialized C-variables * ; * 本程序以系统的Timer0中断为例,中断初始化程序如下: void initial_time0(void) rINTCON=0x5; /Non-vectored,IRQ enable,FIQ disable rINTMOD=0x0; /All=IRQ mode rINTMSK=(BIT_TIMER0 | BIT_GLOBAL); pISR_TIMER0=(int)Timer_ISR; rTCFG0=0x000000ff;/定时器0预分频值设置为255 MCLK32M rTCFG1=0x00000004;/定时器0分割值设置为32 /最小周期约250us rTCNTB0=400;/约10ms中断周期 rTCON=0x0000000a;/ rTCON=0x00000009;/1001 自动重载,并启动定时器0 Uart_Printf(nTimer0 interrupter initialized!); 中断服务程序如下: void _irq Timer_ISR(void) rI_ISPC=BIT_TIMER0; globalcnt+; 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中 PC-0x0c000080处执行的是IsrIRQ中断识别程序 识别程序段执行完后,转到用户的中断服务程序Timer_ISR( )入口4矢量模式下的执行过程 OPTION.s中有_IRQ_BASEADDRESS EQU 0xc000000; 在44BINIT中有如下定义: (_IRQ_BASEADDRESS+0x100) HandleTIMER0 # 4 猜测地址HandleTIMER0_IRQ_BASEADDRESS+0x1340x0c000134,下面来看看猜想对不对。 改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中的中断

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论