欢迎来到天天文库
浏览记录
ID:39896577
大小:1.28 MB
页数:12页
时间:2019-07-14
《1 EINT外部中断》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、EINT外部中断一、ARM异常中断IRQ(一般中断)和FIQ(快速中断)不是具体的中断源,而是中断的类型。我们是可以将一个中断源的类型设置成FIQ也可以设置成IRQ。在使用FIQ响应的时间比IRQ要短,其他方面没有什么区别。但是一般情况下,在一个平台内,我们只能将一个中断源设置成FIQ。二、S5PV210的中断源1、总共有93个,其中外部中断有32个。2、93个中断源分成了4个中断控制器(VIC)3、具体中断源(210手册p1-5)三、外部中断设计流程四、S5PV210中断控制器的特点•Supports93vectoredIRQinterrupts•Fixed
2、hardwareinterruptsprioritylevels•Programmableinterruptprioritylevels•SupportsHardwareinterruptprioritylevelmasking•Programmableinterruptprioritylevelmasking•GeneratesIRQandFIQ•GeneratesSoftwareinterrupt•Testregisters•Rawinterruptstatus•Interruptrequeststatus•SupportsPrivilegedmodefo
3、rrestrictedaccess五、分析GEC210平台的原理图12EINT16是一个二级中断,对应的一级入口是EINT16_31。12三、中断的初始化(设置SFR)1、将GPH2_0设置成EINT162、设置EINT16的触发方式3、设置外部中断的滤波器124、外部中断pending(判断/清除寄存器)5、外部中断的开关(屏蔽)寄存器125、设置中断类型EINT16----->VIC0INTSELECT7、中断向量地址寄存器1)VIC0ADDRESS读:该寄存器放置的是正在响应的入口中断处理程序的入口地址。该入口地址是在对应中断源向量地址寄存器(VIC0V
4、ECTADDRn)中初始化的。写:向该寄存器写0,用来清除中断。2)VIC0VECTADDRn在中断初始化的时候,将中断处理程序的入口地址保存到该寄存器。8、中断的开关寄存器12七、程序的设计1、程序入口(start.S).global_start.globalIRQ_handle_start:ldrsp,=0x40000000@初始化栈,stack放在DDR2movr0,#0x53msrCPSR_cxsf,r0@ARM进入管理模式,并关闭FIQ、打开IRQblclock_init@初始化210的系统时钟bmain@调用了main,进入中断初始化IRQ_han
5、dle:@IRQ中断的处理程序,在ARM响应IRQ中断时,会进入该程序ldrsp,=0xD0037F80@初始化IRQ模式的stacksublr,lr,#4@修正返回地址stmfdsp!,{r0-r12,lr}@保存现场,入栈blIrq_Isr@调用C环境的程序,去处理IRQ中断,在Irq_Isr函数中,确定中断源。ldmfdsp!,{r0-r12,pc}@退出现场,并实现中断的返回2、main函数voidisr_key(void)//EINT16中断处理程序12{GPJ2DAT^=(1<<0);//toggleledintc_clearvectaddr();
6、//clearVIC0ADDRESSEXT_INT_2_PEND
7、=1<<0;//clearpendingbit}intmain(void){//GPJ2CON[3:0]=0001;GPJ2_0--->outputGPJ2CON&=~(0xf<<0);GPJ2CON
8、=(1<<0);//interruptcontrollerinitint_init();GPH2CON
9、=0xF;//GPH2_0-->EXT_INT[16]//EXT_INT[16]:FallingedgetriggeredEXT_INT_2_CON&=~(7<0);EXT_INT_2_CON
10、
11、=(2<<0);//initializevectorinterruptaddresswithnumofinitandisr.intc_setvectaddr(NUM_EINT16_31,isr_key);//EINT16中断处理程序的安装EXT_INT_2_MASK&=~(1<<0);//unmaskedEINT16intc_enable(NUM_EINT16_31);//enableEINT16_31while(1);//等待中断}3、IRQ中断初始化函数//exceptionandinterruptinitializevoidint_init(void){
12、//vectortableofexce
此文档下载收益归作者所有