嵌入式系统实践实验报告--中断实验

上传人:liy****000 文档编号:373310976 上传时间:2023-12-15 格式:DOC 页数:22 大小:667.50KB
返回 下载 相关 举报
嵌入式系统实践实验报告--中断实验_第1页
第1页 / 共22页
嵌入式系统实践实验报告--中断实验_第2页
第2页 / 共22页
嵌入式系统实践实验报告--中断实验_第3页
第3页 / 共22页
嵌入式系统实践实验报告--中断实验_第4页
第4页 / 共22页
嵌入式系统实践实验报告--中断实验_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《嵌入式系统实践实验报告--中断实验》由会员分享,可在线阅读,更多相关《嵌入式系统实践实验报告--中断实验(22页珍藏版)》请在金锄头文库上搜索。

1、计算机科学技术系上机实践报告课程名称:嵌入式系统实践年级:上机实践成绩:指导教师:姓名:创新实践成绩:上机实践名称:中断实验学号:上机实践日期:上机实践编号:No.5组号:上机实践时间:一、 实验目的1. 通过实验掌握ARM处理器的中断方式和中断处理;2. 熟悉S3C44BOX中断控制寄存器的使用;3. 了解不同中断触发方式对中断产生的影响;4. 理解S3C44BOX处理器的中断响应过程;5. 熟练掌握如何进行ARM处理器中断处理的软件编程方法。二、 实验设备1. 硬件:Embest EDUKIT-III(实验平台) PC机2. 软件:Embest IDE Pro ARM 集成开发环境 GNU

2、 Assembler 汇编语言三、 实验内容编写中断处理程序,实现:由UART0 选择输入使用不同的中断触发方式,使能外部中断Eint4,5,6,7;在不同的中断触发方式下,使用按钮SB1202 触发EINT6,同时点亮LED1204 一段时间后熄灭;在不同的中断触发方式下,使用按钮SB1203 触发EINT7,同时点亮LED1205 一段时间后熄灭。文档中按钮标号、LED 标号均采用实验硬件平台上标号的简写形式:按钮:SB1202 SB2 SB1203 SB3LED:D1204 LED1 D1205 LED2用C语言实现中断程序,要求: 不再选择使用什么触发方式(EXTINT),而是全部使用

3、下降沿触发 从超级终端输入n=1-9,使得: 当按下按钮SB1202时,LED的D1204闪烁n下 当按下按钮SB1203时,LED的D1205闪烁n下 其中,闪烁是指点亮1秒,延时1秒,然后再熄灭,再延时1秒 假设:delay(10000)为延时1秒四、 实验原理1、 ARM 处理器中断S3C44B0X 的中断控制器可以接受来自30 个中断源的中断请求。这些中断源来自DMA、UART、SIO 等这样的芯片内部外围或芯片外部引脚。在这些中断源中,有4 个外部中断(EINT4/5/6/7)是逻辑或的关系,它们共用一条中断请求线。UART0 和UART1 的错误中断也是逻辑或的关系。中断控制器的任

4、务是在片内外围和外部中断源组成的多重中断发生时,选择其中一个中断通过FIQ 或IRQ 向ARM7TDMI 内核发出中断请求。实际上最初 ARM7TDMI 内核只有FIQ(快速中断请求)和IRQ(通用中断请求)两种中断,其它中断都是各个芯片厂家在设计芯片时定义的,这些中断根据中断的优先级高低来进行处理。例如,如果你定义所有的中断源为IRQ 中断(通过中断模式寄存器设置),并且同时有10 个中断发出请求,这时可以通过读中断优先级寄存器来确定哪一个中断将被优先执行。一般的中断模式在进入所需的服务程序前需要很长的中断反应时间,为了解决这个问题,S3C44B0X 提供了一种新的中断模式叫做向量中断模式,

5、它具有CISC 结构微控制器的特征,能够降低中断反应时间。换句话说S3C44B0X 的中断控制器硬件本身直接提供了对向量中断服务的支持。当多重中断源请求中断时,硬件优先级逻辑会判断哪一个中断将被执行,同时,硬件逻辑自动执行由0X18(或0X1C)地址到各个中断源向量地址的跳转指令,然后再由中断源向量进入到相应的中断处理程序。和原来的软件实现的方式相比,这种方法可以显著地减少中断反应时间。2. 中断控制l 程序状态寄存器的F 位和I 位如果 CPSR 程序状态寄存器的F 位被设置为1,那么CPU 将不接受来自中断控制器的FIQ(快速中断请求),如果CPSR 程序状态寄存器的I 位被设置为1,那么

6、CPU 将不接受来自中断控制器的IRQ(中断请求)。因此,为了使能FIQ 和IRQ,必须先将CPSR 程序状态寄存器的F 位和I 位清零,并且中断屏蔽寄存器INTMSK 中相应的位也要清零。l 中断模式(INTMOD)ARM7TDMI 提供了2 种中断模式,FIQ 模式和IRQ 模式。所有的中断源在中断请求时都要确定使用哪一种中断模式。l 中断挂起寄存器(INTPND)用于指示对应的中断是否被激活。如果挂起位被设置为 1,那么无论标志I 或标志F 是否被清零,都会执行相应的中断服务程序。中断挂起寄存器为只读寄存器,所以在中断服务程序中必须加入对I_ISPC 和F_ISPC 写1 的操作来清除挂

7、起条件。l 中断屏蔽寄存器(INTMSK)当 INTMSK 寄存器的屏蔽位为1 时,对应的中断被禁止;当INTMSK 寄存器的屏蔽位为0 时,则对应的中断正常执行。如果一个中断的屏蔽位为1,在该中断发出请求时挂起位还是会被设置为1。如果中断屏蔽寄存器的global 位设置为1,那么中断挂起位在中断请求时还会被设置,但所有的中断请求都不被受理。3. S3C44B0X 中断源在 30 个中断源中,有26 个中断源提供给中断控制器,其中4 个外部中断(EINT4/5/6/7)通过“或”的形式提供一个中断源送至中断控制器,2 个URAT 错误中断(UERROR0/1)也是如此。表 4-14 S3C44

8、B0X 的中断源4. 向量中断模式(仅针对IRQ)S3C44B0X 含有向量中断模式,可以减少中断的反应时间。通常情况下ARM7TDMI 内核收到中断控制器的IRQ 中断请求,ARM7TDMI 会在0X00000018 地址处执行一条指令。但是在向量中断模式下,当ARM7TDMI 从0X00000018 地址处取指令的时候,中断控制器会在数据总线上加载分支指令,这些分支指令使程序计数器能够对应到每一个中断源的向量地址。这些跳转到每一个中断源向量地址的分支指令可以由中断控制器产生。例如,假设EINT0 是IRQ 中断,如表4-15 所示,EINT0 的向量地址为0X20,所以中断控制器必须产生从

9、0X18 到0X20 的分支指令。因此,中断控制器产生的机器码为0xea000000.在各个中断源对应的中断向量地址中,存放着跳转到相应中断服务程序的程序代码,在相应向量地址处分支指令的机器代码是这样计算的:向量中断模式的指令机器代码=0xea000000 + ( - - 0x8)2)例如,如果Timer 0 中断采用向量中断模式,则跳转到对应中断服务程序的分支指令应该存放在向量地址0x00000060 处。中断服务程序的起始地址在0x10000,下面就是计算出来放在0x60 处的机器代码:machine code0x00000060 : 0xea000000+(0x10000-0x60-0x

10、8)2) =0xea000000+0x3fe6 = 0xea003fe6通常机器代码都是反汇编后自动产生的,因此不必真正象上面这样去计算。表 4-15 中断源的向量地址向量中断模式的程序举例在向量中断模式下,当中断请求产生时,程序会自动进入相应的中断源向量地址,因此,在中断源向量地址处必须有一条分支指令使程序进入到相应的中断服务程序,如下:ENTRY:b ResetHandler /* for debug */b HandlerUndef /* handlerUndef */b HandlerSWI /* SWI interrupt handler */b HandlerPabort /* h

11、andlerPAbort */b HandlerDabort /* handlerDAbort */b . /* handlerReserved */ldr pc, =HandlerIRQb HandlerFIQVECTOR_BRANCH:ldr pc, =HandlerEINT0 /*mGA 0x20 H/W interrupt vector table */ldr pc, =HandlerEINT1 /* */ldr pc, =HandlerEINT2 /* */ldr pc, =HandlerEINT3 /* */ldr pc, =HandlerEINT4567 /* */ldr pc,

12、 =HandlerTICK /*mGA 0x34 */b .b .ldr pc, =HandlerZDMA0 /*mGB 0x40 */ldr pc, =HandlerZDMA1 /* */ldr pc, =HandlerBDMA0 /* */ldr pc, =HandlerBDMA1 /* */ldr pc, =HandlerWDT /* */ldr pc, =HandlerUERR01 /*mGB 0x54 */b .b .ldr pc, =HandlerTIMER0 /*mGC 0x60 */ldr pc, =HandlerTIMER1 /* */ldr pc, =HandlerTIME

13、R2 /* */ldr pc, =HandlerTIMER3 /* */ldr pc, =HandlerTIMER4 /* */ldr pc, =HandlerTIMER5 /*mGC 0x74 */b .b .ldr pc, =HandlerURXD0 /*mGD 0x80 */ldr pc, =HandlerURXD1 /* */ldr pc, =HandlerIIC /* */ldr pc, =HandlerSIO /* */ldr pc, =HandlerUTXD0 /* */ldr pc, =HandlerUTXD1 /*mGD 0x94 */b .b .ldr pc, =Handl

14、erRTC /*mGKA 0xa0 */b . /* */b . /* */b . /* */b . /* */b . /*mGKA 0xb4 */b .b .ldr pc,=HandlerADC /*mGKB 0xc0 */5. 中断控制专用寄存器l 中断控制寄存器(INTCON)注意:FIQ 模式不支持向量中断模式。从表中可以看出,INTCON 寄存器中位0 - 为FIQ 中断使能位,写入0 就使能FIQ 中断;位1 - 为IRQ 中断使能位,写入0 就使能IRQ 中断;位2 - 是选择IRQ 中断为向量中断模式(V=0)还是普通模式(V=1)。l 中断挂起寄存器(INTPND)中断挂起寄

15、存器 INTPND 共有26 位,每一位对应着一个中断源,当中断请求产生时,相应的位会被设置为1。该寄存器为只读寄存器,所以在中断服务程序中必须加入对I_ISPC 和F_ISPC 写1 的操作来清除挂起条件。如果有几个中断源同时发出中断请求,那么不管它们有没有被屏蔽,它们相应的挂起位都会置1。只是优先级寄存器会根据它们的优先级高低来响应当前优先级最高的中断。l 中断模式寄存器(INTMOD)中断模式寄存器 INTMOD 共有26 位,每一位对应着一个中断源,当中断源的模式位设置为1 时,对应的中断会由ARM7TDMI 内核以FIQ 模式来处理。相反的,当模式位设置为0 时,中断会以IRQ模式来处理。l 中断屏蔽寄存器(INTMSK)在中断屏蔽寄存器 INTMSK 中,除了全屏蔽位“global mask”外,其余的26 位都分别对应一个中断源。当屏蔽位为1 时,对应的中断被屏

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 实验设计

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号