您好,  [请登录] [QQ登录]  [支付宝登录[免费注册]

商品分类

分享到: 百度搜藏 搜狐微博 新浪微博 腾讯微博 QQ收藏 人人网 Facebook Twitter

ARM处理惩罚器停止处理惩罚的编程实现

发布日期:2011-05-03

  ARM编程分外是体系初始化代码的编写中通常必要实现停止的相应、分析跳转和返回等操纵,以便支持上层应用步伐的开辟,而这每每是困扰初学者的一个困难。停止处理惩罚的编程实现必要深入相识ARM内核和处理惩罚器本身的停止特性,从而计划一种快速简便的停止处理惩罚机制。必要阐明的是,详细的上层高级语言编写的停止办事函数不在本文的讨论范畴之内。

 
 ARM处理惩罚器非常停止处理惩罚概述

  当非常停止产生时,体系实行完当前指令后,将跳转到相应的非常停止处理惩罚步伐处实行。当非常停止处理惩罚步伐实行完成后,步伐返回到产生停止的指令的下一条指令处实行。在进入非常停止处理惩罚步伐时,要生存被停止的步伐的实行现场。从非常停止处理惩罚步伐退出时,要规复被停止的步伐的实行现场。ARM体系中通常在存储地点的低端固化了一个32字节的硬件停止向量表,用来指定各别常停止及其处理惩罚步伐的映射干系。当一个非常出现以后,ARM微处理惩罚器会实行以下几步操纵:

  1)生存处理惩罚器当前状态、停止屏蔽位以及各条件标记位;
  2)设置当前步伐状态寄存器CPSR中相应的位;
  3)将寄存器lr_mode设置成返回地点;
  4)将步伐计数器(PC)值设置成该非常停止的停止向量地点,从而跳转到相应的非常停止处理惩罚步伐处实行。

  在吸取到停止恳求以后, ARM处理惩罚器内核会主动实行以上四步,步伐计数器PC总是跳转到相应的牢固地点。从非常停止处理惩罚步伐中返回包括下面两个根本操纵:

  1)规复被屏蔽的步伐的处理惩罚器状态;
  2)返回到产生非常停止的指令的下一条指令处连续实行。

  当非常停止产生时,步伐计数器PC所指的位置对付种种差别的非常停止是差别的,同样,返回地点对付种种差别的非常停止也是差别的。例外的是,复位非常停止处理惩罚步伐不必要返回,由于整个应用体系是从复位非常停止处理惩罚步伐开始实行的。

 
 支持停止跳转的分析步伐

  分析步伐的见解和作用

  如前所述,ARM处理惩罚器相应停止的时间,总是从牢固的地点开始的,而在高级语言环境下开辟停止办事步伐时,无法控制牢固地点开始的跳转流程。为了使得上层应用步伐与硬件停止跳转接洽起来,必要编写一段中间的办事步伐来举行连接。如许的办事步伐常被称作停止分析步伐。

  每个非常停止映射一个4字节的空间,恰好安排一条跳转指令大概向PC寄存器赋值的数据访问指令。理论上可以通过这两种指令直接使得步伐跳转到映射的停止处理惩罚步伐中去。但实际上由于函数地点值为未知和别的一些题目,并不这么做。这里给出一种常用的停止跳转流程:




                            图1


 
 停止跳转流程图

  这个流程中的关键部分是停止向量表,为了让分析步伐能找到向量表,应该将向量表的地点牢固化(编程者自定义)。如许,整个跳转流程的全部步伐地点都是牢固的,当停止触发后,就可以主动运行。此中,只有向量表的内容是可变的,编程者只要在向量表中填入精确的目标地点值就可以了。这使得上层停止处理惩罚步伐和底层硬件跳转有机地接洽起来。

  分析进程示例

  以一次IRQ跳转为例,假定停止向量表定义在0x00400000开始的外部RAM空间:




                        图2 停止分析示例流程

  图2中实线表现的流程都用ARM汇编语言编写,一样平常作为boot代码的一部分放在体系的底层模块中。填写向量表的操纵可以在上层应用步伐中方便地实现,比如在C语言中: *( int *(0x00400018)) = (int) ISR_IRQ;如许就将IRQ停止的办事步伐入口地点(0x00300260)填写到停止向量表中的牢固地点0x00400018开始的4字节空间了。
  云云一来,就可克制在应用步伐中谋略停止的跳转地点,并且可以很方便的选择差别的函数作为指定停止的办事步伐。固然,在步伐开辟时要公道开辟好向量表,克制对向量表地点空间不须要的写操纵。

 
 分析步伐的扩展

  众所周知,在ARM处理惩罚器中会包括很多停止源,通常会在ARM内核表面扩展一此停止控制器来办理种种缘故起因孕育产生的停止。比如,三星公司的S3C4510B处理惩罚器中的IRQ/FIQ范例的停止源可以有21个,S3C44B0X有26个。这时间停止处理惩罚的原理还是一样的,无非是向量表更长,并且当一此停止触发以后,必要在分析步伐里查问停止控制器的状态来确定详细的停止源,再根据停止源来读取向量表中的映射地点内容。其处理惩罚流程可用图3表现。





                     图3 停止分析的扩展

  相比图2,图3中多了一级的跳转,也便是在第一次分析跳转到IRQ/FIQ办事步伐中后,再举行第二次的分析_停止源的辨认。

 
 向量停止的处理惩罚

  一些处理惩罚器在计划外扩的停止控制器时提供了一种叫做“向量停止”的停止跳转机制。这与前文叙述的扩展分析跳转流程有所差别,它不必要软件来辨认详细的停止源,也便是不必要添加图3中的IRQ/FIQ办事步伐,而完全由硬件主动跳转到映射的停止地点。别的跳转流程的原理都是一样的。这相称于扩展了ARM内核的硬件停止向量表,减小了停止相应延时。以S3C44B0X处理惩罚器的外部停止0为例,必要在其映射的硬件牢固跳转地点0x00000020处添加指令:ldr pc,=HandlerEINT,使得步伐跳转到其办事步伐HandlerEINT0处实行。



                   图4 向量停止分析流程示例
 
 结语

  本文先容的停止处理惩罚机制是嵌入式编程中通常采取的要领,其原理是通用的。固然,在实际开辟中,必要根据体系处理惩罚器ARM内核的停止特性和处理惩罚器自身的停止控制器特点详细细化流程图中的各个步调和改写参考代码。