资源预览内容
第1页 / 共4页
第2页 / 共4页
第3页 / 共4页
第4页 / 共4页
亲,该文档总共4页全部预览完了,如果喜欢就下载吧!
资源描述
1 6 0C E S C2 0 0 6 年第一届全国嵌 式系统学术空流舍论文集基于嵌入式L i n u x 操作系统的中断处理的研究郏德和J 1帮红2张彦杰。1 石家庄市职业技术教育中心,石末庄,0 5 0 0 9 12西安电子科技太学计算机学院,西安,7 1 0 0 7 1摘薹中断处理是嵌入式系统极为重要的组成部分。从源代码的角度,详细氟速了基于X S c a l eP X A 2 5 5 处理器的嵌入式L i n u x 挺作系统的中斯处理的整个流程。关键词中断处理嵌入式L i n u x 操作系统,X S c a l e ,P X A 2 5 5引言随着嵌入式技术的不断发展,嵌入式系统的应用越来越广泛。一个完美的嵌入式系统与其中断处理机制是分不开的,擞宵中断处理的嵌人式系统不是真正意义上的嵌人式系统。中断处理的效率高低直接影响着整个嵌入式系统的工作效率。因此,中断处理机制是嵌入式系统中极为重要的一部分。近年来,I n t e l 公司生产的基于A R M 体系结构的X S c a l e 系列处理器应用越来越广,本文以X S c a l eP X A 2 5 5 处理器为例,从内核源代码的角度详细分析该系统的中断处理机制。2A R M 系列处理器中断处理的定义当正常的程序执行流程发生暂时的停止时,称之为异常( E x c e p t i o n s ) 。对于A R M 体系结构的处理器来说,所支持的异常类型有七种按处理的优先级从高到低分别为复位、数据中止、F I Q 、1 R Q 、预取指令中止、S W I( 也称软中断) 和未定义指令。其中F I Q ( F a s tI n t e r r u p t R e q u e s t ) 异常是为了支持快速数据传输或者通道处理而设计的,可由外部通过对处理器的n F I Q 引脚输入低电平并且在当前程序状态寄存器C P S R ( C u r r e n tP r o ,g r a mS t a u sR e g i s t e r ) 中的F 位为0 的时候来产生。l R Q ( I n t e r r u p tR e q u e s t ) 异常属于正常的中断请求,是通常指的是外部中断,可通过对处理器的n I R Q 引脚输入低电平并且在C P S R 中的I 位为0 时来产生,系统的外部设备都是通过该异常请求中断服务。这两个异常处理基本构成了整个系统的中断处理,是本文所讨论研究的重点。3 中断的初始化在嵌入式i A n u x 中,对中断的初始化必不可少的,下面就对系统中的常用的外部中断1 R Q 的初始化过程进行讨论。系统经过B o o t L o a d e r 启动后先运行i n i t 目录里面的m a i n c 该文件中的函数a s m l i n k a g ev o i di n i ts t a r tk e r n e l ( v o i d ) 调用了i n i t I R Q ( ) ,其中i n i t I R Q ( ) 函数的执行流程如图1 。从图1 里可以看出,先初始化i r q d e s c 数据结构,即中断请求描述块。该数据结构描述r 每一条中断线的情况。为了减少系统中断源过多而中断线少之间的矛盾可以通过连接一些门电路来懈决,也就是一条中断线可能对应多个q 1 断源。i r q _ d e s c N R _ l R Q s 这个结构体包含了系统内核能支持的所有的中断线的情况。在这个结构体中,还定义了一个i r q a c t i o n 结构体( s t r u c ti r q a c t i o n * a c t i o n ) 。i r q a c t l o n 是描述具体中断服务程序的描述,它会根据系统里各个驱动程序的初始化而被i r q _ d e s c 设置。i n i t a r c h i r q ( ) 是一个全局的函数指针,其在函数s e t u p a r c h ( ) 已经设置好的。在P X A 2 5 5 处理器中对应的是s t a t i cv o i d i n i tx h y p e r 2 5 5一i n i t i r q ( v o i d ) ,该函数源代码如下:s t a t i cv o i d ,i n i tx h y p e r 2 5 5 i n i t _ i r q ( v o i d )p x a _ i n i ti r q ( ) II 初始化矿qd 瞄c N R i r 删li n i t _ a r c hi r q O ;li n i ta m a O ;围1i n t t _ l R Q 流程第二部分科研交流篇1 6 1s e t - ( I P I ( L I R Q e d g e ( 0 。G P I ( L R I 鲥N G E D G E ) ;* E t h e r n e tI n t e r r u p t + # i f d e fC O N F I ( t A R C H X H Y P E R 2 5 5 Bs e t G P I ( L l R q 二e d g e ( I R Q L T o - G P I O 一2 8 0 ( I R ( L G P I O _ A D S 7 8 4 3 ) ,G P I ( ) F A I L I N G E D G E ) ;* A D $ 7 8 4 3t o u c hc o n t r o l l e r * s e tG P l ( ) 一I R Q e d g e ( I R q L T o _ G P l 0 _ 2 8 0 ( I R O - G P I o E Z H o S T ) ,G P l 0 L F A I ,I 。I N G E D G E ) * E Z H O S tU S B H O S Tc o n t r o l l e r * |s e t G P I ( ) 一l R Q e d g e ( I R q L T O L G P I ( ) - 2 8 0 ( I R q L G P I O L E X T E N D ) ,G P I o R l S I N ( 、E D ( 灌) hf p g ab o a r di n t e r r u p t * f# e l i fd e f i n e d ( C O N F I G A R C H X H Y P E R 2 5 5 A )s e t G P I 晚I R q e d g e ( I R Q _ T 0 - G P I O 一2 8 0 ( I R Q _ G P I 幔A D S 7 8 4 3 ) ,G P I O F A l II N G E D G E ) ; f * A D S 7 8 4 3t o u c hc o n t r o l l e r * 7# e n d i f由上面函数可以看到,先是p x ai n i ti r q ( ) ,然后初始化网口、触摸屏、U S B 主控器和F P G A 扩展板的四十外部中断。该函数可以根据实酝开发时的需要对初始化的外部中断进行增减。在p x a i n i t i r q O 函数中,先屏蔽掉所有的中断,然后再设置所有的中断为I R Q 而不是F I Q ,最后设置i r q _ d e s c 数据结构。该中断响应的框架完成以后,设备驱动程序就可以通过皤敷r e q u e s r _ i r q ( ) 将具体的中断处理程序跟其对应的中断请求号对应。其处理过程是首先分配一个i r q a c t i o n 的结构体,将有关的参数写到结构体中,再通过s e t u pa r m i r q ( 将其放人指定中断请求线i r q a e t i o n 数据结构队列,最后进行D M A 初始化。4P X A 2 5 5 处理器对中断源的识别及处理当有r f l 断发生时,P X A 2 5 5 处理器是通过阿个步骤确定中断源类型。P X A 2 5 5 处理器对中断源的识别癍程如图2 所目i 。孑从图2 中可以看出,第一步是中断请求线I n t e r r u p tS o u r c eB i t 先保存在中断未决寄存器I c P R ( I n t e r r u p tP e n d i n gR e g i s t e r ) ,然后中断再根据屏蔽寄存器I C M R ( I n l e r r u p t M A S RR e g i s t e r ) 决定是否处理。随后,中断级别寄存器I C I ,R ( I n t e r r u p tL e v e lR e g i s t e r ) 再根据本身内部的数据来控制将第一步处理的中断源信号保存到寄存器I C I P ( I R QI n t e r r u p tP e n d i n gR e g i s t e r ) 或者I C F P ( F I QI n t e r r u p tP e n d i n gR e g i s t e r ) 某位为0 时保存到I C I P 为1 时保存到I C F P 。当C P U 收到中断请求以后,可以根据中断的种类来进人I R Q 或者F I Q 的中断响应程序再根据I C I P 和1 C F P 的内容进一步确定中断源,最后进入具体的中断服务程序。在基于A R M 体系结构的处理器中异常向量( E x c e p t i o nV m ) 的地址都是系统设定好的,I R Q 的异常向量地址为0 x 0 0 0 0 0 0 1 8 发生异常后处理器将进 l R Q 模式。F I Q 的异常向量地址为0 x 0 0 0 0 0 0 1 C ,发生异常后处理器将进入F I Q 模式。下面分析外部中断l R Q 的中断响应过程。当一个外部中断I R Q 出现时,在中断响应之初C P U 会完成下面的操作。将下一条指令的地址存人相应的连接寄存器L R ,即存入碡1 4 一l R Q ,以便程序在处理中断返回时能从正确的位置重新开始执行。若中断是从A R M 状态进入,I 。R 寄存器中保存的是下一条指令围2P X A 2 5 5 对中断源的识别流程的地址( 当前程序计数器P C + 4 ) 若中断是从T h u m b 状态进入,则在I R 寄存器中保存当前P C 的偏移量,这 橇,中断处理程序就不需要确定中断是从何种状态进入的。将当前程序状态寄存器C P S R 复制到相应的备份程序状态寄存器S P S R ( S a v e dP r o g r a m1 6 2C E S C2 0 0 6 年第一届全国嵌入式系统学术交流套论文集S t a t u sR e g i s t e r ) ,即装人寄存器S P S R I R Q 。同时强制改变C P S R 的运行模式位使C P U 运行在相应的I R Q 模式,并关闭进一步的中断。并且堆栈指针S P 切换成S P I R Q 。强制P C 从相关的中断向量地址取下一条指令运行,就是使P C 指向0 x 0 0 0 0 0 0 1 8 ,而在这个位置处的指令是一条跳转指令,髋转到相应的中断处理程序处,如果中断发生的时候,处理器处于T h u m b 状态,则当中断向量地址加载到P C 时,处理器会t l 动切换到A R M 状态。C P U 做完上述工作以后就会进 中断响应程序的总入口v e c t o r _ l R Q ,先暂时保存中断对的I 。R 和S P S RI R Q 到_ _ t e m p _ i r q ,C P
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号