微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > ARM处理器架构异常/中断处理

ARM处理器架构异常/中断处理

时间:11-09 来源:互联网 点击:

此,可以推断,对于中断函数在ADS中有特殊的声明方式,如:static void __irq Uart_DMA_ISR(void)。像这种声明方式,在编译的时候,编译器会自动在函数的末尾添加恢复cpsr和pc的语句。另外, 寄存器r0-r12也是需要保护的,因为在中断函数和原来的上下文中都会用到,所以,我认为 编译器在中断处理函数中对r0-r12也进行了保护和恢复。

另外,在ucosII中,对IsrIRQ函数进行了修改,我们后面再进行分析。

另外,我们用软件实现了一套中断向量表:

ALIGNAREA RamData, DATA, READWRITE^   _ISR_STARTADDRESS		; _ISR_STARTADDRESS=0x33FF_FF00HandleReset 	#   4HandleUndef 	#   4HandleSWI	#   4HandlePabort    #   4HandleDabort    #   4HandleReserved  #   4HandleIRQ	#   4HandleFIQ	#   4;Dont use the label IntVectorTable,;The value of IntVectorTable is different with the address you think it may be.;IntVectorTable;@0x33FF_FF20HandleEINT0		#   4HandleEINT1		#   4HandleEINT2		#   4HandleEINT3		#   4HandleEINT4_7	#   4HandleEINT8_23	#   4HandleCAM		#   4		; Added for 2440.HandleBATFLT	#   4HandleTICK		#   4HandleWDT		#   4HandleTIMER0 	#   4HandleTIMER1 	#   4HandleTIMER2 	#   4HandleTIMER3 	#   4HandleTIMER4 	#   4HandleUART2  	#   4;@0x33FF_FF60HandleLCD 		#   4HandleDMA0		#   4HandleDMA1		#   4HandleDMA2		#   4HandleDMA3		#   4HandleMMC		#   4HandleSPI0		#   4HandleUART1		#   4HandleNFCON		#   4		; Added for 2440.HandleUSBD		#   4HandleUSBH		#   4HandleIIC		#   4HandleUART0 	#   4HandleSPI1 		#   4HandleRTC 		#   4HandleADC 		#   4;@0x33FF_FFA0
之前,我们在发生中断时,pc指针就跳转到了 HandleIRQ地址中所存储的数 出执行。也就是说在HandleIRQ中存的是异常处理函数的入口地址。这就是异常处理向量表的作用。
所以,我们可以看出,对于2440init.s实现的异常处理,采用的是两级向量表机制。 第一级向量表是arm核自己实现的,发生相应的异常时,pc指针跳转到0x18地址中存的数,作为入口地址。 第二级向量表是由Handler宏实现的,继续跳转到 HandleIRQ地址中存的数,继续执行。

而对于IRQ来讲,还有第三级的向量表,在IsrIRQ中,又会根据中断号,比如uart2的中断,跳转到 HandleUart2地址中 存的数,继续执行。

在2440init.s中,并没有给HandleUndef等这些地址处赋值,因此,一旦执行到,程序就会跑飞。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top