第六讲 中断控制器(1).ppt
《第六讲 中断控制器(1).ppt》由会员分享,可在线阅读,更多相关《第六讲 中断控制器(1).ppt(70页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1TM第六讲第六讲 中断控制器及编程中断控制器及编程 当当有有事事件件来来临临时时,必必须须中中断断当当前前cpu运运算算来响应突发事件!来响应突发事件!当当等等待待一一个个事事件件时时,是是一一直直查查询询还还是是事事件件来了告诉我一声?来了告诉我一声?中中断断是是MCU的的核核心心,因因为为几几十十个个中中断断要要处理,还要做得很好!处理,还要做得很好!2TM2内容提要内容提要61 中断的基本概念中断的基本概念62 中断控制器中断控制器63 中断实例中断实例3TM36.1 基本概念基本概念nARM中断的入口在哪里?中断的入口在哪里?(中断向量表中断向量表)nS3C2440有有60个中断源,
2、怎么分发和处理?个中断源,怎么分发和处理?n当有多个中断同时发生时怎么办?当有多个中断同时发生时怎么办?4TM46.1.1中断入口中断入口n所有所有ARM都一样,主要有七个都一样,主要有七个 n复位复位:reset 0 x0n未定义指令未定义指令:undef 0 x4n软件中断:软件中断:swi 0 x8n指令预取中止指令预取中止:pabort 0 xc n数据预取中止:数据预取中止:dabort 0 x10n普通中断:普通中断:irq 0 x18 n快速中断:快速中断:fiq 0 x1c5TM56.1.2 中断分发和处理中断分发和处理n所有外围接口的中断是挂到所有外围接口的中断是挂到irq或
3、或fiq上的上的n用到什么中断你使能什么中断用到什么中断你使能什么中断n总开关在:总开关在:CPSR寄存器的寄存器的I位和位和F位位n次开关在次开关在INTMASK寄存器寄存器n还有接口中与中断相关的寄存器还要注意设还有接口中与中断相关的寄存器还要注意设置!置!6TM66.1.2 中断分发与处理中断分发与处理思路:先登记(思路:先登记(pending)-按优先级选中(执行的)按优先级选中(执行的)-完了再顺序执行后面的完了再顺序执行后面的-7TM76.1.2 中断分发与处理中断分发与处理n登记:登记:rSRCPND寄存器中相关位置位寄存器中相关位置位n优先级排序规则:设置寄存器或默认的优先级排
4、序规则:设置寄存器或默认的n最高的优先级的,最高的优先级的,rINTPND置位,置位,rINTOFFSET置位置位n产生产生IRQ或或IRQ中断中断8TM86.1.2 中断分发与处理中断分发与处理n以以IRQ为例,为例,IRQ中断服务程序该干什么?中断服务程序该干什么?9TM96.1.2 中断分发与处理中断分发与处理n首先跳到首先跳到0 x18,即硬件将程序计数器(即硬件将程序计数器(R15或或PC)设置为)设置为0 x18,开始从开始从0 x18这里取指令。这里取指令。n大家想下看,大家想下看,0 x18这里放一条什么指令?这里放一条什么指令?n我们的我们的start.s中是怎么做的?中是怎
5、么做的?10TM106.1.2 中断分发与处理中断分发与处理n首先首先0 x18 bHandlerIRQ;nHandlerIRQ HANDLER HandleIRQ;n等价于:等价于:HandlerIRQ subsp,sp,#4 ;sp=sp-4 stmfdsp!,r0 ;sp=sp 4;sp=r0;ldr r0,=HandleIRQ;r0=HandleIRQ这个标号的地址这个标号的地址ldr r0,r0;r0 的值赋给的值赋给 r0,HandleIRQ 存放的值存放的值-r0 str r0,sp,#4;r0的值放到的值放到 sp+4 ldmfd sp!,r0,pc;sp-r0,sp=sp+4
6、;sp-pc;sp=sp+4;.HandleIRQ#4;0 x33ffff18 11TM116.1.2 中断分发与处理中断分发与处理nHandleIRQ=0 x33ffff18;nHandleIRQ里面放的是什么?里面放的是什么?n假设假设*(HandleIRQ)=(void*)isr_IRQ;n为什么会跳到为什么会跳到isr_IRQ函数中?函数中?12TM126.1.2 中断分发与处理中断分发与处理nstart.s 中的中的isr_IRQ:nIsrIRQ subsp,sp,#4 stmfdsp!,r8-r9ldrr9,=INTOFFSETldrr9,r9ldrr8,=HandleEINT0a
7、ddr8,r8,r9,lsl#2 ;ADD R0,R2,R3,LSL#1;R0=R2+(R3 1)/user add.ldrr8,r8strr8,sp,#8ldmfdsp!,r8-r9,pc13TM136.1.2 中断分发与处理中断分发与处理n假如我们想挂载假如我们想挂载isr_uart中断服务程序,该怎中断服务程序,该怎么做?么做?n*(某一地址某一地址)=(unsigned int)(void*)isr_uart;?isr_uart就是地址。就是地址。n某一地址我事先定义好,看某一地址我事先定义好,看uart中断在中断在rINTOFFSET第几位?若是第第几位?若是第n位,位,则等则等 于
8、于 开始地址开始地址+nspsr_irq,pc-lr;lr到底是什么呢?到底是什么呢?19TM196.1.2 中断分发与处理中断分发与处理n保存寄存器,保存寄存器,spsr_irq,lr_irq是是irq自己的物自己的物理寄存器;理寄存器;n其他的诸如其他的诸如r0-r8等,你用到哪个需要保存哪等,你用到哪个需要保存哪个个n需要保存到需要保存到r13_irq(sp)空间中,空间中,stmfd sp!,r0-r2,lr;20TM206.1.2 中断分发与处理中断分发与处理n还原现场还原现场:ldmfd sp!,r0-r2,lr subs pc,lr,#0 x4 ;cpsr 怎么恢复的?怎么恢复的
9、?21TM216.1.2 中断分发与处理中断分发与处理n保存现场保存现场-关中断关中断-处理事件处理事件-打开中打开中断断-恢复现场恢复现场n讲完保存现场、恢复现场,下面讨论打开和讲完保存现场、恢复现场,下面讨论打开和关中断关中断n一般一般rINTMASK寄存器全部寄存器全部Mask 掉掉22TM226.1.2 中断分发与处理中断分发与处理n处理事件开头或结尾往往要干一件事情,即处理事件开头或结尾往往要干一件事情,即清中断;清中断;n对于对于s3c2440来说,主要是清来说,主要是清rINTSRC和和rINTPND寄存器相应位寄存器相应位n若不清中断会发生什么?若不清中断会发生什么?23TM2
10、36.2 中断控制器中断控制器24TM248.1.2 命名规则命名规则(1)标识符的标识符的名称名称要简明,能够表达出确切的含义,可要简明,能够表达出确切的含义,可以使用完整的单词或通常可以理解的缩写。以使用完整的单词或通常可以理解的缩写。(2)如果在命名中使用特殊约定或缩写,则要进行)如果在命名中使用特殊约定或缩写,则要进行注释说明。注释说明。(3)对于变量命名,一般不取单个字符)对于变量命名,一般不取单个字符,例如例如i、j、k.(4)函数名函数名一般以大写字母开头;所有一般以大写字母开头;所有常量名常量名字母字母统一用大写。统一用大写。25TM258.1.3 注释说明注释说明注释有助于程
11、序员理解程序的整体结构,也便于以后注释有助于程序员理解程序的整体结构,也便于以后程序代码的维护与升级。常用的规则如下:程序代码的维护与升级。常用的规则如下:n(1)注释语言必须准确、简洁且容易理解)注释语言必须准确、简洁且容易理解;n(2)程序代码源文件头部应进行注释说明)程序代码源文件头部应进行注释说明;n(3)函数头部应进行注释;)函数头部应进行注释;n(4)程序中所用到的特定含义的常量、变量,在声)程序中所用到的特定含义的常量、变量,在声明时都要加以注释明时都要加以注释;26TM26n(5)对于宏定义、数据结构声明,如果其命)对于宏定义、数据结构声明,如果其命名不是充分自注释的,也要加以
12、注释。名不是充分自注释的,也要加以注释。n(6)如果注释单独占用一行,与其被注释的)如果注释单独占用一行,与其被注释的内容进行相同的缩进方式,一般将注释与其内容进行相同的缩进方式,一般将注释与其上面的代码用空行隔开上面的代码用空行隔开 n(7)程序代码修改时,其注释也要及时修改,)程序代码修改时,其注释也要及时修改,一定要保证代码与注释保持一致。一定要保证代码与注释保持一致。27TM27命名规则示例:命名规则示例:28TM288.2 嵌入式嵌入式C程序设计中的位运算程序设计中的位运算n在嵌入式程序设计中,在嵌入式程序设计中,位操作位操作是最常用的运是最常用的运算之一,因为在很多情况下要对算之一
13、,因为在很多情况下要对寄存器中的寄存器中的某位或某个管脚进行操作某位或某个管脚进行操作,这些都需要用位,这些都需要用位操作来完成。操作来完成。29TM298.2.1 按位与操作按位与操作n按按位与运算符位与运算符“&”是把参与运算的两个操作是把参与运算的两个操作数所对应的各个二进制位进行按位相与。只数所对应的各个二进制位进行按位相与。只有当对应的两个二进制位全为有当对应的两个二进制位全为1时,结果才为时,结果才为1,否则为,否则为0。参与运算的两个操作数以补码。参与运算的两个操作数以补码形式出现。形式出现。30TM30n例如例如7&3,补码分别为,补码分别为0000 0111与与0000 00
14、11 按位与运算后结果为按位与运算后结果为0000 0011等于十等于十进制的进制的3。按位与操作可以实现将特定的。按位与操作可以实现将特定的位清位清零零,也可以用于提取出某数的指定位。,也可以用于提取出某数的指定位。31TM318.2.2按位或操作按位或操作n按位或操作运算符按位或操作运算符“|”是把参与运算的两个是把参与运算的两个操作数对应的各个二进制位进行按位相或。操作数对应的各个二进制位进行按位相或。对应的两个二进制位中只要有一个为对应的两个二进制位中只要有一个为1,结果,结果就为就为1,当两个对应的二进制位都为,当两个对应的二进制位都为0时,结时,结果位为果位为0。参与运算的两个操作
15、数均以补码形。参与运算的两个操作数均以补码形式出现。式出现。32TM32n例如例如7|3,7的补码为的补码为0000 0111,3的补码为的补码为0000 0011,结果为,结果为0000 0111。按位与操作。按位与操作可以实现将特定位的可以实现将特定位的置位置位操作,也可以用于操作,也可以用于提取出某数的指定位。提取出某数的指定位。33TM338.2.3 按位异或操作按位异或操作n按位异或运算符按位异或运算符“”是将参与运算的两个操是将参与运算的两个操作数对应的各个二进制位进行相异或,当对作数对应的各个二进制位进行相异或,当对应的两个二进制位相异时,结果位为应的两个二进制位相异时,结果位为
16、1,相同,相同时为时为0。参与运算的两个操作数均以补码形式。参与运算的两个操作数均以补码形式出现。出现。34TM34n例如例如7 3,7的补码为的补码为0000 0111,3的补码的补码为为0000 0011,结果为,结果为0000 0100。35TM35应用举例:应用举例:n通过通过3次异或操作将寄存器次异或操作将寄存器rPDATAE中的内中的内容与变量容与变量tmp的值进行交换。的值进行交换。36TM36nrPDATAE=rPDATAE tmpntmp=tmp rPDATAE nrPDATAE=rPDATAE tmp37TM378.2.4 取反操作取反操作n取反运算符取反运算符“”实现对参
17、与运算的操作数对实现对参与运算的操作数对应的各个二进制位按位求反。取反运算符应的各个二进制位按位求反。取反运算符“”具有右结合性。所有具有右结合性。所有1变为变为0,0变为变为138TM38n。例如。例如(0101 1001)=1010 0110。在程序。在程序中主要用于将操作数的某位或某些位取反,中主要用于将操作数的某位或某些位取反,为其他操作提供数据准备。为其他操作提供数据准备。39TM398.2.5 移位操作移位操作n移位操作分为左移操作与右移操作。左移运移位操作分为左移操作与右移操作。左移运算符算符“”实现将实现将“”左边的操作数的各左边的操作数的各个二进制位向左移动个二进制位向左移动
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第六讲 中断控制器1 第六 中断 控制器
限制150内