中止处理:
中止是嵌入式里最重要的一个概念。一般一个体系关于一个设备要么选用中止办法,要么选用轮询办法 。中止办法能够有效地削减处理器负荷 ,可是假如许多选用中止则有或许下降处理速度 ,由于中止处理破坏了处理器的流水机制。温习下微机原理中中止处理进程和中止机制。
2440中支撑FIQ(快速中止)和IRQ(一般中止)2种中止办法,一般只选用IRQ中止。2440有60个中止源,不支撑中止嵌套。详细的参阅用户手册第14章。下图是2440中止发生进程。
详细的解说一下,关于寄存器请查阅用户手册。
中止源分为2种,子中止中止源和中止源,当一个子中止发生一个中止信号,子中止源挂起寄存器(SUBRCPND)相应位主动置1,观察子中止屏蔽寄存器(SUBMASK)该子中止是否被屏蔽(人工设置),假如没屏蔽,则中止源寄存器(SRCPND)置1,观察该中止源是否被屏蔽和选用那种形式,假如没被屏蔽,选用IRQ形式,进行优先级判断后,高优先级的履行,中止挂起寄存器置1,发生IRQ信号。一起CPSR寄存器的I方位1,标明当时有一个IRQ中止发生。记住曾经让咱们留意该寄存器中的I和Q位了吧,他的效果就在这 。
中止处理进程:
CPU每履行一条指令都会查看CPSR寄存器,当发现I和F位被置1时,就进行中止处理。第一步跳入反常向量表:
b ResetHandler
b HandlerUndef ;handler for Undefined mode
b HandlerSWI ;handler for SWI interrupt
b HandlerPabort ;handler for PAbort
b HandlerDabort ;handler for DAbort
b . ;reserved
b HandlerIRQ ;handler for IRQ interrupt
b HandlerFIQ ;handler for FIQ interrupt
HandlerFIQ HANDLER HandleFIQ
HandlerIRQ HANDLER HandleIRQ
HandlerUndef HANDLER HandleUndef
HandlerSWI HANDLER HandleSWI
HandlerDabort HANDLER HandleDabort
HandlerPabort HANDLER HandlePabort
^ _ISR_STARTADDRESS ; _ISR_STARTADDRESS=0x33FF_FF00
HandleReset # 4
HandleUndef # 4
HandleSWI # 4
HandlePabort # 4
HandleDabort # 4
HandleReserved # 4
HandleIRQ # 4
HandleFIQ # 4
假如是IRQ 则跳到HandlerIRQ,此进程由硬件来完结。接下来
ldr r0,=HandleIRQ ;This routine is needed
ldr r1,=IsrIRQ ;if there is not subs pc,lr,#4 at 0x18, 0x1c
str r1,[r0]
进行第2次跳转,跳转到2级中止向量表
IsrIRQ
sub sp,sp,#4 ;reserved for PC
stmfd sp!,{r8-r9}
ldr r9,=INTOFFSET
ldr r9,[r9]
ldr r8,=HandleEINT0
add r8,r8,r9,lsl #2
ldr r8,[r8]
str r8,[sp,#8]
ldmfd sp!,{r8-r9,pc}
HandleEINT0 # 4
HandleEINT1 # 4
HandleEINT2 # 4
HandleEINT3 # 4
次代码完结了树立2级中止向量表,在咱们中止程序中咱们先对中止进行注册
例 EINT0 = ISR_FUNC();这样就完结了中止向量和中止服务程序的相关。跳到2级中止向量表后就进入了中止处理程序。中止处理完结了CPU回来持续履行中止处理前的下一条程序,关于处理现场的维护部分参阅微原部分。
下边是一个关于中止处理函数的测试题:理解中止处理函数的运用
中止是嵌入式体系中重要的组成部分,这导致了许多编译开发商供给一种扩展—让规范C支撑中止。具代表事实是,发生了一个新的关键字
__interrupt。下面的代码就运用了__interrupt关键字去界说了一个中止服务子程序(ISR),请谈论一下这段代码的。
__interrupt double compute_area (double radius)
{
double area = PI * radius * radius;
printf(“\nArea = %f”, area);
return area;
}
上边便是2440的中止发生及处理进程,这些是最基本的常识要牢牢把握。关于ARM这些都是相同的,只不过是寄存器有或许不相同,但处理进程是相同的,有些处理器支撑中止可重入,如710处理器。阅览下用户手册14章中关于优先级部分,留意下有些寄存器的清0办法。