《嵌入式系统实践实验报告--中断实验.docx》由会员分享,可在线阅读,更多相关《嵌入式系统实践实验报告--中断实验.docx(24页珍藏版)》请在优知文库上搜索。
1、计算机科学技术系上机实践报告课程名称:嵌入式系统实践年级:上机实践成绩:指导教师:姓名:创新实践成绩:上机实践名称:中断实验学号:上机实践日期:上机实践编号:No.5组号:上机实践时间:一实验目的1. 通过实验掌握ARM处理器的中断方式和中断处理;2. 熟悉S3C44B0X中断控制寄存器的使用;3. 了解不同中断触发方式对中断产生的影响;4. 理解S3C44B0X处理器的中断响应过程;5. 熟练掌握如何进行ARM处理器中断处理的软件编程方法。二、实验设备1. 硬件:EmbestEDUKIT-111(实验平台)PC机2. 软件:EmbestIDEProARM集成开发环境GNUAssembler汇
2、编语言三、实验内容编写中断处理程序,实现:由UARTo选择输入使用不同的中断触发方式,使能外部中断Eint4,5,6,7;在不同的中断触发方式下,使用按钮SB1202触发ElNT6,同时点亮LED1204段时间后熄灭;在不同的中断触发方式下,使用按钮SB1203触发ElNT7,同时点亮LEDl205一段时间后熄灭。文档中按钮标号、LED标号均采用实验硬件平台上标号的简写形式:按钮:SB1202-SB2SB1203-SB31.ED:D1204-LEDlD1205-LED2用C语言实现中断程序,要求:-不再选择使用什么触发方式(EXTIyr),而是全部使用下降沿触发-从超级终端输入n=l-9,使得
3、:当按下按钮SB1202时,LED的D1204闪烁n下当按下按钮SB1203时,LED的D1205闪烁n下其中,闪烁是指点亮1秒,延时1秒,然后再熄灭,再延时1秒假设:delay(10000)为延时1秒四、实验原理1、ARM处理器中断S3C44B0X的中断控制器可以接受来自30个中断源的中断请求。这些中断源来自DMA、UARTsSIO等这样的芯片内部外围或芯片外部引脚。在这些中断源中,有4个外部中断(EINT*7)是逻辑或的关系,它们共用一条中断请求线。UARTO和UARTI的错误中断也是逻辑或的关系。中断控制器的任务是在片内外围和外部中断源组成的多重中断发生时,选择其中一个中断通过FIQ或I
4、RQ向ARM7TDMI内核发出中断请求。实际上最初ARM7TDMI内核只有FlQ(快速中断请求)和IRQ(通用中断请求)两种中断,其它中断都是各个芯片厂家在设计芯片时定义的,这些中断根据中断的优先级高低来进行处理。例如,如果你定义所有的中断源为IRQ中断(通过中断模式寄存器设置),并且同时有10个中断发出请求,这时可以通过读中断优先级寄存器来确定哪一个中断将被优先执行。一般的中断模式在进入所需的服务程序前需要很长的中断反应时间,为了解决这个问题,S3C44B0X提供了一种新的中断模式叫做向量中断模式,它具有ClSC结构微控制器的特征,能够降低中断反应时间。换句话说S3C44B0X的中断控制器硬
5、件本身直接提供了对向量中断服务的支持。当多重中断源请求中断时,硬件优先级逻辑会判断哪一个中断将被执行,同时,硬件逻辑自动执行由0X18(或OXIC)地址到各个中断源向量地址的跳转指令,然后再由中断源向量进入到相应的中断处理程序。和原来的软件实现的方式相比,这种方法可以显著地减少中断反应时间。2 .中断控制 程序状态寄存器的F位和I位如果CPSR程序状态寄存器的F位被设置为1,那么CPU将不接受来自中断控制器的FIQ(快速中断请求),如果CPSR程序状态寄存器的I位被设置为1,那么CPU将不接受来自中断控制器的IRQ(中断请求)。因此,为了使能FlQ和IRQ,必须先将CPSR程序状态寄存器的F位
6、和I位清零,并且中断屏蔽寄存器INTMSK中相应的位也要清零。 中断模式(INTMoD)ARM7TDMI提供了2种中断模式,FIQ模式和IRQ模式。所有的中断源在中断请求时都要确定使用哪一种中断模式。 中断挂起寄存器(INTPND)用于指示对应的中断是否被激活。如果挂起位被设置为1,那么无论标志I或标志F是否被清零,都会执行相应的中断服务程序。中断挂起寄存器为只读寄存器,所以在中断服务程序中必须加入对LISPC和FJSPC写1的操作来清除挂起条件。 中断屏蔽寄存器(INTMSK)当INTMSK寄存器的屏蔽位为1时,对应的中断被禁止;当INTMSK寄存器的屏蔽位为0时,则对应的中断正常执行。如果
7、一个中断的屏蔽位为1,在该中断发出请求时挂起位还是会被设置为1。如果中断屏蔽寄存器的global位设置为1,那么中断挂起位在中断请求时还会被设置,但所有的中断请求都不被受理。3 .S3C44B0X中断源在30个中断源中,有26个中断源提供给中断控制器,其中4个外部中断(EINT4/5/6/7)通过“或”的形式提供一个中断源送至中断控制器,2个URAT错误中断(UERRoRo/1)也是如此。表4-14S3C44B0X的中断源SourcesDescriptionsMasterGroupSlaveIDEINTOExternalinterrupt0mGASGAEINT1Externalinterrup
8、t1mGASGBEINT2Externalinterrupt2mGASGCEINT3Externalinterrupt3mGASGDElNT46/7Externalinterrupt4/5/6/7mGASGKATICKRTCTimetickinterrupt.SGKBINTZDMACGeneralDMAOinterruptIll、,;:INTZDMA1GeneralDMA1interruptmGBsGBINTBDMAOBridgeDMAOinterrupt.SGCINTBDMA1BridgeDMA1InterruptmGBSGDINT_WDTWatch-DogtimerinterruptmGB
9、SGKAINTERR(V1UARTQderrorInterruptmGB-4:IINTTIMEROTimeK)InterruptmGCINT_TIMER1Timedinterrupt.、,INTTIMER2Time2hterruptmGCsGCINLTlMER3TimrInterruptmGCsGDINTTIMER4Timer4interruptmGCSGKAINTTIMER5Timer5IntemjptIIISGKBINT_URXD0UARTOreceiveinterruptm4)、,INTRXD1UART1receiveinterrupt.BINTJICIICinterruptmSGCIN
10、TSIOSKDinterruptmGDsGDINTUTXDOUARTOtransmitinterruptmSGKAINTUTXD1UART1transmitinterruptmGDSGKBINTRTCRTCalarminterruptmGKA一INTADCADCEOCintermptmGKB-4 .向量中断模式(仅针对IRQ)S3C44B0X含有向量中断模式,可以减少中断的反应时间。通常情况下ARM7TDMI内核收到中断控制器的IRQ中断请求,ARM7TDMI会在OXOOoOo018地址处执行一条指令。但是在向量中断模式下,当arm7tdmi从OXooooo018地址处取指令的时候,中断控制器
11、会在数据总线上加载分支指令,这些分支指令使程序计数器能够对应到每一个中断源的向量地址。这些跳转到每一个中断源向量地址的分支指令可以由中断控制器产生。例如,假设ElNTO是IRQ中断,如表4-15所示,EINTO的向量地址为0X20,所以中断控制器必须产生从0X18到0X20的分支指令。因此,中断控制器产生的机器码为OXeaOOoOoo.在各个中断源对应的中断向量地址中,存放着跳转到相应中断服务程序的程序代码,在相应向量地址处分支指令的机器代码是这样计算的:向量中断模式的指令机器代码=OXeaOOOOoO+(Y向量地址-08)2)例如,如果TimerO中断采用向量中断模式,则跳转到对应中断服务程
12、序的分支指令应该存放在向量地址OXOOoOO060处。中断服务程序的起始地址在OXlOOo0,下面就是计算出来放在0x60处的机器代码:machinecode0x00000060:0xea000000+(0xl0000-0x60-0x8)2)=0ea000000+03fe6=0ea003fe6通常机器代码都是反汇编后自动产生的,因此不必真正象上面这样去计算。表4-15中断源的向量地址InterruptSourcesVectorAddressEINTO0x00000020EINT10x00000024EINT20x00000028EINT30x0000002cEINT45670x00000030
13、INTTICK0x00000034INTZDMAC0x00000040INT_ZDMA1MoOoOo044INTBDMAO0x00000048INT_BDMA10x0000004cINTWDT0x00000050INTUERRO/10x00000054INTTIMERO0x00000060INTTIMER10x00000064INTJlMER20x00000068INTTIMER30x0000006cINT_TIMER40x00000070INTTIMERS0x00000074INTURXDO0x00000080INT一URXDl0x00000084INTIIC0x00000088INLSIO
14、0x0000008cINTUTXDO0x00000090INTUTXD10x00000094INTRTCOxOOOOOOaOINTADCOxOOOOcO向量中断模式的程序举例在向量中断模式下,当中断请求产生时,程序会自动进入相应的中断源向量地址,因此,在中断源向量地址处必须有一条分支指令使程序进入到相应的中断服务程序,如下:ENTRY:bResetHandIer*fordebug*/bHandlerllndef*handlerllndef*/bHandIerSWISWIinterrupthandler*/bHandIerPabort*handlerPAbort*/bHandIerDabort*handlerDAbort*/b.handlerReserved*/Idrpc,=HandIerIRQbHandIerFIQVECT0R_BRANCH:Idrpc,=HandIerEINTO*mGA0x20H/Winterruptvectortable*/Idrpc,=HandIerEINTI7Idrpc,=HandlerEINT2*/Idrpc,=HandIerEINTS*7Idrpc,=HandlerEINT4567*/Id