推荐IO端口及中断控制器_第1页
推荐IO端口及中断控制器_第2页
推荐IO端口及中断控制器_第3页
推荐IO端口及中断控制器_第4页
推荐IO端口及中断控制器_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

1、io端口及中断控制器阅读阅读p156-p159思考以下问题思考以下问题s3c2410a共有多少个中断源?多少个外部中共有多少个中断源?多少个外部中断源?外部中断的触发方式如何设置?中断标志断源?外部中断的触发方式如何设置?中断标志位在哪些寄存器里?某中断是否允许由哪个寄存位在哪些寄存器里?某中断是否允许由哪个寄存器控制?中断优先级由哪个寄存器控制?中断器控制?中断优先级由哪个寄存器控制?中断处理的流程是什么样的?处理的流程是什么样的? 中断控制器概述n s3c2410a片内的中断控制器,接收来自56个中断源的中断请求。这些中断源由s3c2410a外部中断请求引脚和片内外设提供。片内外设包括dm

2、a控制器、uart、iic等。在这些中断源中,uartn的int_errn、int_rxdn和int_txdn经过逻辑或以后送到中断控制器,作为int_uartn。eint4eint7、eint8eint23经过逻辑或以后送到中断控制器,作为eint4_7、eint8_23。中断控制器概述n当从片内外设和外部中断请求引脚接收到多个中断请求时,中断控制器经过仲裁处理后,向arm920t内核请求fiq或irq中断。n仲裁处理取决于硬件优先权逻辑,并且仲裁结果写入中断挂起寄存器intpnd(interrupt pending register)。用这种方法可以帮助用户,告知在多个中断请求源中,哪一个

3、经过仲裁并送到arm920t内核。中断控制器概述n有了中断请求,请求源的保存可以分为两种。一种是带子请求寄存器的,如uartn的int_errn、int_rxdn和int_txdn,有了中断请求,请求源要保存在子源挂起寄存器subsrcpnd中;另一种是不带子请求寄存器的,如int_dma3,有了中断请求,请求源要保存在源挂起寄存器srcpnd中。对于带子请求寄存器的,还要检查中断子屏蔽寄存器intsubmsk是否对某一个子请求源进行了屏蔽,只有不屏蔽,才能在源挂起寄存器srcpnd中对应位置1。之后,一个或多个中断请求要判断是否被屏蔽;是irq模式还是fiq模式;如果是irq模式还要判断多个

4、中断请求的优先权;最后以irq或fiq请求送arm920t内核。中断控制器概述中断处理示意图。中断控制器概述n外部中断eint4eint7、eint8eint23的请求,要在外部中断挂起寄存器eintpend中保存,检查外部中断屏蔽寄存器eintmask是否屏蔽,如果不屏蔽,才能送到源挂起寄存器srcpnd的对应位eint4_7、eint8_23。n中断控制器用到的s3c2410a引脚信号有eint0eint23和nbatt_flt。 程序状态寄存器(psr)中的f位和i位 如果arm920t cpu中的psr的f位被设置为1,cpu不接受来自中断控制器的快速中断请求(fast interru

5、pt request,fiq)。同样,如果i位被设置为1,cpu不接受来自中断控制器的中断请求(interrupt request,irq)。因此,通过清除psr的f位或i位为0,同时设置中断屏蔽寄存器intmsk的对应位为0,送到中断控制器的中断请求才能被处理。 中断控制器特殊功能寄存器中断模式寄存器 arm920t有2种类型的中断模式:fiq或irq,所有的中断源在中断请求时,要确定该中断源被设置成哪一种模式。中断模式寄存器intmod中的每1位,指示一个中断源被设置成了哪一种模式。n中断模式寄存器intmod由32位组成,它们中的每一位对应一个中断源。中断模式寄存器intmod地址为0

6、x4a000004,可读写,reset值为0 x00000000。 源中断挂起寄存器ns3c2410a中有两个中断挂起寄存器,一个是源挂起寄存器srcpnd,另一个是中断挂起寄存器intpnd。这两个挂起寄存器指示一个中断请求是或否被挂起(记录)。当多个中断源同时请求中断服务时,寄存器srcpnd多个对应位被设置成1。与此同时,经过仲裁处理后,寄存器intpnd中仅仅1位被自动地设置为1。如果多个中断被屏蔽,这些中断源同时请求中断服务时,寄存器srcpnd中的对应位仍被设置为1,但是不引起寄存器intpnd值的改变。当寄存器intpnd中的1位被设置为1时,如果这1位对应irq请求,并且psr

7、中的i位为0;或者这1位对应fiq请求,并且psr中的f位为0,就会进入相应的中断服务程序。n寄存器srcpnd和intpnd能被读或写,中断服务程序必须清除相应的挂起位,方法是通过写1到srcpnd的对应位,能够将该位清0。然后再写1到intpnd的对应位,能够将intpnd的对应位清0。n中断挂起寄存器(interrupt pending register),也译作中断未决寄存器。n源挂起寄存器srcpnd由32位组成,其中每1位与1个中断源相对应。n源挂起寄存器srcpnd地址为0 x4a000000,可读写,reset值为0 x00000000。子源挂起寄存器n子源挂起寄存器(sub

8、source pending register)subsrcpnd中的每1位,指示对应的子中断源有无中断请求。 n子源挂起寄存器subsrcpnd地址为0 x4a000018,可读写,reset值为0 x00000000。 中断屏蔽寄存器n中断屏蔽寄存器intmsk中的某1位被设置为1,指示对应的中断已经被屏蔽(禁止)。如果寄存器intmsk中的某1位为0,这1位对应的中断源产生的中断请求,通常将被服务。n如果寄存器intmsk中的某1位为1,并且该位对应的中断源产生了中断请求,源挂起寄存器srcpnd中对应的源挂起位将被置1。n中断屏蔽寄存器intmsk由32位组成,它们中的每1位对应1个中

9、断源。 n中断屏蔽寄存器intmsk地址为0 x4a000008,可读写,reset值为0 xffffffff,具体含义见表7-42。5.优先权寄存器n优先权寄存器priority,地址为0 x4a00000c,可读写,reset值为0 x7f。中断优先权产生模块n用于32个中断请求的优先权逻辑由7个仲裁器(arbiter)组成,其中6个为第一级仲裁器,一个为第二级仲裁器,如图所示。n在图中,每个仲裁器,根据优先权寄存器priority中的1位仲裁模式控制(arb_mode)和2位选择控制信号(arb_sel)中的值,以如下方式,处理连接在仲裁器上的6个中断请求.6 中断挂起寄存器n中断挂起寄

10、存器intpnd地址为0 x4a000010,可读写,reset值为0 x00000000。 中断程序举例 【例】对于某公司生产的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功能

11、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个中断请求引脚出现一

12、个或多个中断请求,则: 如果eint0或eint2有请求,源挂起寄存器srcpnd0或srcpnd2被自动置1; 如果eint11或eint19有请求,外部中断挂起寄存器eintpend11或eintpend19被自动置1,并且源挂起寄存器srcpnd5被自动置1; 由于这些中断都没有被屏蔽,经过优先权仲裁器,优先权最高的中断请求,在中断挂起寄存器intpnd中的对应位被置1,中断偏移寄存器intoffset中自动被设置相应的偏移量; 作为irq请求送arm920t内核; arm920t cpu的当前程序状态寄存器cpsr中如果i位为0时,表示允许irq中断,当前正在执行的指令执行结束后,cp

13、u响应irq请求。 中断响应n在中断响应过程,arm920t cpu自动完成以下操作: 将pc的值,保存到irq方式下的连接寄存器lr中,返回时用; 将当前程序状态寄存器cpsr内容保存到irq方式下的保留程序状态寄存器 spsr中; 强制设置程序状态寄存器的方式位cpsr4:0为10010,系统进入irq方式; 强制设置程序状态寄存器的t状态位cpsr5为0,系统进入arm状态; 强制设置程序状态寄存器的irq禁止位cpsr7为1,禁止cpu再次响应irq请求; 通常(没采用高向量地址配置)将irq异常入口地址0 x00000018送程序计数器pc。此后程序从0 x00000018处执行,分

14、支到irq中断服务程序。n发生异常后,异常入口地址及这些地址中存放的指令见表,表中对应irq的入口地址0 x00000018内,存放的是分支指令b handlerirq,handlerirq通常是irq中断服务程序的入口地址。n然而,由于表中分支指令b的分支范围为32mb,当中断服务程序在内存中保存后,如果首地址离异常入口地址较远,超过32mb时,需要增加一段代码。这段代码应该与异常入口地址较近,并且能够分支到异常(中断)服务程序。例如对于中断请求irq,有以下代码:handlerirq ;标号,程序入口, ;由0 x00000018中b handlerirq ;指令分支到此处sub sp,s

15、p,#4 ;修改栈指针,在栈顶留出4 ;字节空间,后续指令 ;str r0,sp,#4将r0内容填入stmfd sp!,r0 ;保存工作寄存器r0内容ldr r0,=handleirq ;取出保存handleirq异常向量的表地址ldr r0,r0 ;表地址的内容,即handleirq地址,送r0 str r0,sp,#4 ;r0的值,即handleirq地址,存堆栈ldmfd sp!,r0,pc ;恢复工作寄存器r0内容;出栈 ;handleirq地址到pc,实现分支n上述代码中的handleirq是irq中断服务程序的入口地址,各异常(中断)服务程序的入口地址在异常向量表中已经定义。;异常

16、向量表handlereset # 4 ;reset异常服务程序入口地址,占4字节handleundef # 4handleswi # 4handlepabort # 4handledabort # 4handlereserved # 4handleirq # 4 ;irq中断服务程序入口地址,占4字节handlefiq # 4 中断向量表n进入irq中断服务程序后,要区分是哪个中断源提出了请求,并且应该转到对应的服务程序。n中断挂起寄存器intpnd的32位对应的32个中断源,有32段服务程序与之相对应。用32段服务程序中每段程序的起始地址,可以建立一个表,称为中断向量表。中断向量表如下:;中

17、断向量表handleeint0 # 4;handleeint0是eint0中断源 ;对应的程序入口地址,长度为4字节handleeint1 # 4handleeint2 # 4handleeint3 # 4handleeint4_7 # 4;handleeint4_7是 ; eint4eint7中断源对应的程序入口地址, ;进入该程序,还要根据外部中断挂起寄存器 ; eintpend区分4个中断源中哪一个提出了 ;中断请求 handleint_adc # 4 irq中断服务程序n在irq中断服务程序中,要根据中断偏移寄存器值并结合中断向量表,转到中断请求对应的服务程序,部分汇编语言程序如下:isrirq;标号 sub sp,sp,#4;修改栈指针,在栈顶留出4字节空间stmfd sp!r8-r9;保存r8,r9 ldr r9,=intoffse

温馨提示

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

评论

0/150

提交评论