嵌入式实验报告课程名称嵌入式成绩实验项目ARM的中断实验指导教师曲培树学生姓名张健秀学号201000803026班级专业10电子本实验地点综合楼226实验日期2012年12月7日一、实验目的1.掌握ARM9的中断原理,能够对S3C2410的中断资源及其相关中断寄存器的进行合理配置2.掌握对S3C2410的中断的编程的方法二、实验内容1.学习响应外部中断请求的配置方法,并通过响应定时器中断,执行中断服务子程序使CPU板上的LED指示灯LED1、LED2闪烁。三、实验设备1.EL-ARM-830教学实验箱,PentiumII以上的PC机,仿真调试电缆。2.PC操作系统WIN98或WIN2000或WINXP,ADS1.2集成开发环境,仿真调试驱动程序四、ARM的中断原理在ARM中,有两类中断,一类是IRQ,一类是FIQ,IRQ是普通中断,FIQ是快速中断,在进行大批量的复制、数据转移等工作时,常使用此类中断。FIQ的优先级高于IRQ。同时,它们都属于ARM的异常模式,当一旦有中断发生,不管是外部中断,还是内部中断,正在执行的程序都会停下,PC指针进而跳入异常向量的地址处,若是IRQ中断,则PC指针跳到0x18处,若是FIQ中断,则跳到0x1C处。异常向量地址处,一般存有中断服务子程序的地址,所以,接下来PC指针跳入中断服务子程序中。当完成中断服务子程序后,PC指针会返回到被打断的程序的下一条地址处,继续执行程序。这就是ARM中断操作的基本原理。但是,通常由于生产ARM处理器的各厂家都集成了很多中断请求源,比如,串口中断、AD中断、外部中断、定时器中断、DMA中断等等,所以,很多中断可能同时请求中断,因此,为区分它们,更准确的完成任务,这些中断都有相应的优先级别,以及当发生中断时,它们都有相应的中断标志位,通过在发生中断是判断中断优先级,和访问中断标志位的状态来识别到底哪一个中断发生了。五、三星的2410ARM处理器的中断的使用首先,ARM920TCPU的PSR寄存器中的F位为1,则CPU不会响应中断控制器的FIQ中断,同样,ARM920TCPU的PSR寄存器中的I位为1,则CPU也不会响应中断控制器的IRQ中断,为使CPU响应中断,须在启动代码中将其设为0,以及使INTMSK寄存器中的相应位置0。S3C2410共有56个中断源,有26个中断控制器,外部中断EXTIN8~23共用一个中断控制器,外部中断EXTIN4~7共用一个中断控制器,9个UART中断分成3组,共用3个中断控制器,ADC和触摸屏共用一个中断控制器。见表2-6-2中断的优先级是由主组号和从ID号的级别控制的。中断优先级产生模块如下图所示:图2-6-1七、实验数据TP60未通话:TP60通话后:TP61未通话:TP61通话后:TP62未通话:TP62通话后:TP63未通话:TP63通话后:从上图可以看出,中断优先级产生模块共有7个判优器,每个判优器是否使能由寄存器PRIORITY[6:0]决定,每个判优器下面有4~6个中断源,这些中断源对应着REQ0~REQ5这6个优先级,这些优先级由寄存器PRIORITY[20:7]的相应位决定。要正确使用S3C2410的中断控制器,必须设置如下的寄存器,如下表2-6-1所示:SRCPND0x4a000000R/W中断源挂起寄存器,当中断产生后,相应位置位INTMOD0x4a000004R/W中断模式寄存器,设定IRQ或FIQ模式INTMSK0x4a000008R/W中断屏蔽寄存器,如果相应位置位则该中断被屏蔽PRIORITY0x4a00000cR/W中断优先级控制寄存器,设置中断优先级INTPND0x4a000010R/W中断挂起寄存器,相应位对应正在执行的中断服务INTOFFSET0x4a000014R中断源请求偏移寄存器SUBSRCPND0x4a000018R/W子中断源挂起寄存器INTSUBMSK0x4a00001cR/W子中断屏蔽寄存器表2-6-1中断挂起寄存器主要是提供哪个中断有请求的标志寄存器,相应位置1,则说明有该中断请求产生。若相应位为0,则无该中断请求产生。中断模式寄存器主要是配置该中断是IRQ型中断,还是FIQ型中断。中断屏蔽寄存器的主要功能是屏蔽相应中断的请求,即使中断挂起寄存器的相应位已经置1,若中断屏蔽寄存器相应位置1,则中断控制器屏蔽该中断请求,也无法让CPU响应该中断。INTPND为向量IRQ中断服务挂起状态寄存器,当向量IRQ中断发生时,该寄存器内只有一位被设置,即只有当前要服务的中断标志位置位。通过读它的值,就能判断出哪个中断发生了。在INTPND中相应位写入数据,就能清除掉中断挂起寄存器中的中断请求标志位,以使CPU不再响应中断,其实,CPU响应中断是看中断挂起寄存器中的请求标志位有没有置位,若置位,又屏蔽位打开,ARM920T的PSR的F或I为也打开,那么,CPU就响应中断,否则,有一个条件不成立,则CPU无法响应中断。表2-6-2六、中断编程实例在ADS1.2的开发环境下,打开HARDWARE/ADS/实验六目录下的Interrupt.mcp项目,在Application/SRC/Main.c中可以看到,主程序中,在进行目标板初始化后,程序进入死循环,等待中断!在Startup2410/src/target.C文件中包括对要使用的中断控制器的初始化程序,CPU响应了该中断后的中断服务子程序。该项目的程序流程是,按下程序启动后,初始化定时器1,设定定时器的中断时间,然后,等待定时器中断,当定时器中断到来时,就会进入定时器中断服务子程序,而中断服务子程序会把LED1和LED2灯熄灭或点亮,从现象中看到LED1和LED2灯忽闪一次,则说明定时器发生了一次中断。最后,关闭中断请求,等待下一次的中断的到来。为使CPU响应中断,在中断服务子程序执行之前,必须打开ARM920T的CPSR中的I位,以及相应的中断屏蔽寄存器中的位。打开相应的中断屏蔽寄存器中的位,是在target.C中的voidTimer1INT_Init(void)函数中,在做了这些准备后,就可以等待中断的到来了。voidTimer1INT_Init(void){//定时器接口使能if((rINTPND&BIT_TIMER1)){rSRCPND|=BIT_TIMER1;}pISR_TIMER1=(int)Timer1_ISR;rINTMSK&=~(BIT_TIMER1);//开中断;}TIMER1INT_Init()函数已在Target_Init()中调用。详见/实验程序/HARDWARE/ADS/实验六目录下的Interrupt.mcp源代码注释。七、实验步骤1.本实验仅使用实验教学系统的核心CPU板。在进行本实验时,LCD电源开关,音频的左右声道开关、AD通道选择开关、触摸屏中断选择开关等均应处在关闭状态。2.在PC机并口和实验箱的CPU板上的JTAG接口之间,连接仿真调试电缆。3.检查连接是否可靠,可靠后,接入电源线,系统上电。4.打开ADS1.2开发环境,从里面打开\实验程序\HARDWARE\ADS\实验六\Interrupt.mcp项目文件,进行编译。5.编译通过后,进入ADS1.2调试界面,加载\实验程序\HARDWARE\ADS\实验六\Interrupt_Data\Debug中的映象文件程序映像Interrupt.axf。6.在ADS调试环境下全速运行映象文件。观察LED1和LED2的变化!LED1和LED2灯会由于定时中断的1秒钟发生一次,而一秒钟闪烁一次!也可以改变闪烁的频率,即改变Startup2410\target.c文件内的voidTimer1_init(void)函数里的rTCNTB1=48828;的赋值,数字量越小,闪烁频率越快。编译全速运行,观看结果,看闪烁频率是否发生了改变!这是对GPIO口操作的结果。具体实现见程序。八、实验数据实验板上的LED1和LED2灯交替闪烁九、实验结论1.掌握了ARM9的中断原理,能够对S3C2410的中断资源及其相关中断寄存器的进行合理配置2.掌握了对S3C2410的中断的编程的方法3.进一步熟悉了ADS1.2集成开发环境,及仿真调试驱动程序4.深入了解了EL-ARM-830教学实验箱