付费下载
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验五中断控制实验(一)实验目的了解中断的作用;掌握嵌入式系统中断的处理流程;掌握ARM中断编程。(二)实验设备计算机;ARM硬件仿真器;ARM开发板(三)实验硬件设置在做实验之前,先将开发板电源接好,将仿真器的USB连线与电脑相连,通电,然后按核心板的复位键。(四)实验原理1 .中断的基本概念CPUW外设之间传输数据的控制方式通常有三种:查询方式、中断方式和DM防式。DMA方式将在后续实验中说明。查询方式的优点是硬件开销小,使用起来比较简单。但在此方式下,CPU不断地查询外设的状态,当外设未准备好时,CPU只能循环等待,不能执行其它程序,这样就浪费了CPU的大量时间,降低了CPU的利用率。为
2、了解决这个矛盾,通常采用中断传送方式:即当CPU进行主程序操作时,外设的数据已存入输入端口的数据寄存器;或端口的数据输出寄存器已空,由外设通过接口电路向CPU发出中断请求信号,CPU在满足一定的条件下,暂停执行当前正在执行的主程序,转入执行相应能够进行输入/输出操作的子程序,待输入/输出操作执行完毕之后CPUS返回并继续执行原来被中断的主程序。这样CPU!避免了把大量时间耗费在等待、查询状态信号的操作上,使其工作效率得以大大地提高。能够向CPU发出中断请求的设备或事件称为中断源。系统引入中断机制后,CPU与外设(甚至多个外设)处于“并行”工作状态,便于实现信息的实时处理和系统的故障处理。中断方
3、式的原理示意图如下所示。中断喟应断点一中断服葬孑程序中断返回图5-7中断处理示意图1) 中断响应中断源向CPU发出中断请求,若优先级别最高,CPU在满足一定的条件下,可以中断当前程序的运行,保护好被中断的主程序的断点及现场信息。然后,根据中断源提供的信息,找到中断服务子程序的入口地址,转去执行新的程序段,这就是中断响应。CPU响应中断是有条件的,如内部允许中断、中断未被屏蔽、当前指令执行完等。2)中断服务子程序CPU响应中断以后,就会中止当前的程序,转去执行一个中断服务子程序,以完成为相应设备的服务。中断服务子程序的一般结构如下图所示。图5-8中断服务子程序处理流程 保护现场(由一系列的压栈指
4、令完成)。目的是为了保护那些与主程序中有冲突的寄存器,(如R0,R1,R2等),如果中断服务子程序中所使用的寄存器与主程序中所使用的寄存器等没有冲突的话,这一步骤可以省略。 中断处理,中断处理程序在检查到相应的中断源后,调用对应的中断处理程序完成。 恢复现场并返回(由一系列的出栈指令完成)。是与保护现场对应的,但要注意数据恢复的次序,以免混乱。由于中断服务子程序需要打断主程序的执行,因此其处理应该及时完成,较长时间的延时将导致系统性能严重下降。(五)实验关键代码及使用的寄存器S3c44B0X勺中断控制器包括5类寄存器:中断控制寄存器、中断状态寄存器、中断模式寄存器、中断屏蔽寄存器和中断清除寄存
5、器。1)中断控制寄存器该控制寄存器是处理器总的中断控制,包括中断模式是矢量模式还是非矢量模式,是否使能IRQ模式的中断,是否使能FIQ模式的中断,具体说明如下:表5-3中断控制寄存器奇存器名称地址读写状态描述复位值INTCON0X01E00000R/W中断控制寄存器0x7INTCON位描述初始状态保留300V2IRQ禁止/使能向量模式0:向量中断模式1:非向量中断模式1I1使能CPU的IRQ中断,在使用IRQ中断之前,必须清除该位0:IRQ中断使能1:IRQ中断禁止1F0使能CPU的FIQ中断,在使用FIQ中断之前,必须清除该位0:FIQ中断使能1:FIQ中断禁止12)中断状态寄存器该寄存器用
6、于检查中断来源,该寄存器是只读属性的。表5-4中断状态寄存器奇存器名称地址读写状态描述复位值INTPND0X01E00004R指示中断请求状态0:中断已被响应1:有中断请求0x03)中断模式寄存器用于设置相应中断的工作模式,是IRQ模式还是FIQ模式。表5-5中断模式寄存器奇存器名称地址读写状态描述复位值INTMOD0X01E00008R/W中断模式寄存器0:IRQ模式1:FIQ模式0x04)中断屏蔽寄存器表5-6中断屏蔽寄存器奇存器名称地址读写状态描述复位值INTMSK0X01E0000CR/W确定哪一个中断源被屏蔽,屏蔽的中断源将不引发中断0:中断服务有效1:中断服务屏蔽0X7FFFFFF
7、5)中断清除寄存器中断处理之后需要清除相应的标志位,中断清除寄存器说明如下:表5-7中断清除寄存器寄存器名称地址读写状态描述复位值I_ISPC0X01E00024WIRQ中断请求清0寄存器未定义F_ISPC0X01E0003CWFIQ中断请求清0寄存器未定义4.44B0中断处理S3c44B0X处理器的中断处理与其他CPU的处理模式基本上是一致的,只是由于它引入了几种不同的处理器模式,使中断处理变得更加容易。其典型的步骤如下:1)保存现场:当系统出现中断时,处理器首先要做的就是保存现场,这一过程包括:保存当前的PC值到lr中,保存当前的程序运行状态到spsr中。值得注意的就是由于ARM7采用3级
8、流水线结构,此时的PC值实际上等于当前指令地址加上8(ARM旨令时),所以返回时还需要将保存的PC值减4;2)模式切换:当处理器完成现场保护后,就进入中断模式,并将PC值置为一个固定的值0X00000018,这也就是IRQ模式的中断入口地址。在中断模式下,有两个独立的寄存器R13R14,这样可以便于中断程序使用自己特有的堆栈。但这样随之而来产生一个问题,就是中断处理时堆栈溢出保护的问题,需要我们认真地估计堆栈的大小,同时在中断处理时也要尽量减少函数调用的层次,否则将产生一些不可预知的错误;3)获取中断源:所有的IRQ中断都从0X00000018开始执行,通常在该地址处放一条跳转指令,进一步跳到
9、我们的中断程序中;4)处理中断:在中断程序中需要进一步获取中断源,即谁引发了该中断,然后通过查表获取相应中断的处理程序入口,并调用对应的函数;5)中断返回,恢复现场:在返回时需要恢复处理器模式,包括恢复中断处理用到的所有寄存器、恢复被中断的程序运行状态到CPSR并跳转到被中断的主程序。下图为JX44B0教学实验系统中处理外部中断0的流程:HandlerIRQPC.=0X00000020图5-8JX44B0中断处理示意图中断的入口代码(汇编代码)0X00000018:LDRpc,=0X0C0000200X0C000020:HandlerIRQ:subsp,sp,#4stmfdsp!,r0ldrr
10、0,=HandleIRQ/*ldrr0,r0strr0,sp,#4ldmfdsp!,r0,pc/*bHandlerIRQ/*为中断分发例程入口地址预留栈空间*/*保存R0*/将中断分发例程入口地址指针保存到R0中*/*将中断分发例程入口地址保存到R0中*/*将中断分发例程入口地址保存到预留的堆栈空间*/将R0和中断分发例程入口地址出栈,这条指令也*/*实现了一个跳转*/上述代码实际上就是一个三级跳,即从FLASH中跳到了RAM勺中断入口,然后又从中断入口跳到中断分发例程入口。在此我们有一个前提条件,即必须在HandleIRQ地址处保存正确的分发例程入口地址,如使用下面代码后IsrIRQ就是中断
11、分发例程:ldrr0,=HandleIRQldrr1,=IsrIRQstrr1,r0中断分发例程可以采用汇编语言和C语言两种格式编写,下面将分别列出这两种方式。1)用汇编代码编写的中断分发例程:IsrIRQ:/*usingI_ISPRregister.*/sublr,lr,#4stmfdsp!,lr/*stmfdsp!,r0-r4/*subsp,sp,#4/*stmfdsp!,r8-r9/*ldrr9,=I_ISPR/*ldrr9,r9cmpr9,#0x0/*beqi2movr8,#0x0/*R8i0:/*movsr9,r9,lsr#1bcsi1addr8,r8,#4bi0/*保存中断返回的P
12、C值*/备份寄存器R0-R4*/为PC预留栈空间*/备份寄存器R8-R9*/读取中断状态*/检查中断状态*/保存中断表的偏移*/逐位检查中断状态*/*如果该位等于1,则处理这一中断*/*修改当前的中断偏移*/处理下一比特*/i1:ldrr9,=HandleADC/*HandleADC位于中断向量表起始位置,我们将该地址用作是中断向addr9,r9,r8ldrr9,r9/*strr9,sp,#8movlr,pc/*ldmfdsp!,r8-r9,pcldmfdsp!,r0-r4,pcA/*i2:ldmfdsp!,r8-r9/*addsp,sp,#4ldmfdsp!,r0-r4,pc-/*量表的基地
13、址*/*计算入口地址指针:中断基地址加上偏移*/从地址向量表中获取入口地址*/*将入口地址保存到堆栈,并移动堆栈指针*/保存当前PC*/*调用中断例程*/中断返回,并恢复中断前的处理器模式*/如果当前没有任何中断,直接返回*/*移动堆栈指针,该空间由第4句指令预留*/中断返回,并恢复中断前的处理器模式*/2)用C代码编写的中断分发例程:如果采用GN喻译器,需要将该函数定义为中断类型,使用关键字:_attribute_(interrupt("IRQ")。如下所示代码为C语言的IsrIRQ实现:typedef(*ISR_ROUTINE_ENTRY)(void);voidIsrI
14、RQ()_attribute_(interrupt("IRQ");voidIsrIRQ()intcount=0;unsignedintisr_pending;unsignedintisr_mask=0x00000001;unsignedintisr_mask_set=rINTMSK;/*读取中断掩码*/ISR_ROUTINE_ENTRYisr_routine_entry=(ISR_ROUTINE_ENTRY)0x0;isr_pending=(rINTPND&isr_mask_set);/*读取中断状态*/*查表*/while(isr_mask)(if(isr_pen
15、ding&isr_mask)(/*找到中断源,获取中断例程入口地址*/isr_routine_entry=(ISR_ROUTINE_ENTRY)(*(int*)(HandleADC+count);break;)count+=4;isr_mask<<=1;)/*调用中断服务例程*/if(isr_routine_entry)(*isr_routine_entry)();)中断处理例程(该函数无需定义为中断类型)voidEINT0_Isr()(rI_ISPC=BIT_EINT0;/*清除中断标志*/,)中断向量表中各个中断的偏移:表5-8中断向量表中各个中断的偏移中断源向量表的偏移ADC(AD转换中断)0X20RTC(实时时钟中断)0X24,(六)实验内容1)编译/执行程序2)跟踪/调试程序3)断点的设置与取消4)下载程序与调试(七)实验步骤1 .参照模板工程interrupt(modulesinterruptinterrupt.apj),新建一个工程interrupt,添加相应的文件,并修改interrupt的工程设置;2 .创
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年上海市青浦区政务服务中心(窗口人员)招聘笔试模拟试题及答案详解
- 2026年安徽警官职业学院管理助理、教学助理、科研助理招聘30名考试备考题库及答案详解
- 2026下半年乐山市市中区人民医院自主招聘编外工作人员考务工作笔试参考题库及答案详解
- 2026年苏州市平江区政务服务中心(窗口人员)招聘笔试参考题库及答案详解
- 2026年武汉市蔡甸区工会人员招聘考试参考试题及答案详解
- 2026年拉萨市城关区政务服务中心(窗口人员)招聘笔试备考试题及答案详解
- 2026年广东省惠州市政务服务中心(窗口人员)招聘考试备考试题及答案详解
- 2026年自贡市贡井区政务服务中心(窗口人员)招聘笔试参考试题及答案详解
- 2026年西藏自治区医疗系统事业编人员招聘笔试参考试题及答案详解
- 2026年北京市丰台区政务服务中心(窗口人员)招聘考试备考题库及答案详解
- 应聘简历教师个人简介
- 反恐验厂管理手册程序文件制度文件表单一整套
- 安全绳挂钩报警系统研制
- 展览业展台搭建与布置操作规范
- 中层干部竞聘演讲评分表
- SL-T+291-2020水利水电工程钻探规程
- JTG B02-2013 公路工程抗震规范
- 2024年中医经典《温病学》知识竞赛考试题库500题(含答案)
- (正式版)JBT 9229-2024 剪叉式升降工作平台
- 高架桥盖梁施工方案贝雷片支架
- 2024年江苏省农信机构职业技能大赛参考试题库(含答案)
评论
0/150
提交评论