刘彦文等《Linux环境嵌入式系统开发基础》第5章.pptVIP

  • 5
  • 0
  • 约1.59万字
  • 约 81页
  • 2018-06-02 发布于河南
  • 举报

刘彦文等《Linux环境嵌入式系统开发基础》第5章.ppt

刘彦文等《Linux环境嵌入式系统开发基础》第5章.ppt

⒎ 子源登记寄存器 子源登记寄存器(sub source pending register)SUBSRCPND中的每1位,指示对应的子中断源有无中断请求。 子源登记寄存器SUBSRCPND地址为0x4A000018,可读写,Reset值为0具体含义见表5-46(p166)。 ⒏ 中断子屏蔽寄存器 中断子屏蔽寄存器(interrupt sub mask register)INTSUBMSK 11位中的每1位,对应1个子中断源。 中断子屏蔽寄存器INTSUBMSK地址为0x4A00001C,可读写,Reset值为0x7FF,具体含义见表5-47(p167)。 5.8 中断程序举例 【例5.4】对于某公司生产的S3C2410X开发板,假设4个开关分别连接到S3C2410X(S3C2410X与S3C2410A功能完全相同)芯片的GPF0/GPF2/GPG3/GPG11 4个引脚,这4个引脚设置为中断请求引脚,与中断请求和中断处理相关的内容有: ⑴ 中断初始化 中断初始化函数中与本例对应的C语言代码如下: rGPFCON|=20|24; //设置GPF0、GPF2为EINT0、EINT2功能rGPGCON|=26|222; //设置GPG3、GPG11为EINT11、EINT19功能 rINTMOD=0; // 中断模式寄存器设置为0,所有中断均为IRQ类型rEXTINT0|=40|48; // 设置EINT0、EINT2上升沿触发rEXTINT1|=412; // 设置EINT11上升沿触发 rEXTINT2|=412; // 设置EINT19上升沿触发rEINTMASK=~(111|119); // EINT11、EINT19对应屏蔽位置0,允许服务 rINTMSK=~(10|12|15); // EINT0、EINT2、EINT8_23对应屏蔽位置0,允许服务 // 假定中断优先权寄存器的值使用已经设定过的值, // 此处不再设置 ⑵ 中断请求 一旦这4个中断请求引脚出现一个或多个中断请求,则: · 如果EINT0或EINT2有请求,源登记寄存器SRCPND[0]或SRCPND[2]被自动置1; · 如果EINT11或EINT19有请求,外部中断登记寄存器EINTPEND[11]或EINTPEND[19]被自动置1,并且源登记寄存器SRCPND[5]被自动置1; · 由于这些中断都没有被屏蔽,经过优先权仲裁器,优先权最高的中断请求,在中断登记寄存器INTPND中的对应位被置1,中断偏移寄存器INTOFFSET中自动被设置相应的偏移量; · 作为IRQ请求送ARM920T内核; · ARM920T CPU的当前程序状态寄存器CPSR中如果I位为0时,表示允许IRQ中断,当前正在执行的指令执行结束后,CPU响应IRQ请求。 ⑶ 中断响应 在中断响应过程,ARM920T CPU自动完成以下操作: · 将PC的值,保存到IRQ方式下的连接寄存器LR中,返回时用; · 将当前程序状态寄存器CPSR内容保存到IRQ方式下的保留程序状态寄存器 SPSR中; · 强制设置程序状态寄存器的方式位CPSR[4:0]为10010,系统进入IRQ方式; · 强制设置程序状态寄存器的T状态位CPSR[5]为0,系统进入ARM状态; · 强制设置程序状态寄存器的IRQ禁止位CPSR[7]为1,禁止CPU再次响应IRQ请求; · 通常(没采用高向量地址配置)将IRQ异常入口地址0程序计数器PC。此后程序从0执行,分支到IRQ中断服务程序。 发生异常后,异常入口地址及这些地址中存放的指令见表5-48,表中对应IRQ的入口地址0,存放的是分支指令B HandlerIRQ,HandlerIRQ通常是IRQ中断服务程序的入口地址。 然而,由于表5-48(p168)中分支指令B的分支范围为±32MB,当中断服务程序在内存中保存后,如果首地址离异常入口地址较远,超过±32MB时,需要增加一段代码。这段代码应该与异常入口地址较近,并且能够分支到异常(中断)服务程序。例如对于中断请求IRQ,有以下代码: HandlerIRQ ;标号,程序入口,

文档评论(0)

1亿VIP精品文档

相关文档