IMX6UL开发板的GPIO中断实验,编写中断向量表(一)

        那么就开始直接编写我们的中断向量表,中断向量表保存了各类中断处理程序入口地址的表格,通常包含处理器在发生中断或异常时跳转到的指令地址,它需要放在固定且易于访问的地方,处理器在发生中断或异常时,可以迅速找到对应的中断服务例程等原因
        然后先介绍一下,Cortex-A所有的中断向量表,Corterx-A7内核有8个异常中断,中断向量表中都是中断服务函数的入口地址

        1. 复位中断(Rest),CPU 复位以后就会进入复位中断,我们可以在复位中断服务函数里面
做一些初始化工作,比如初始化 SP 指针、DDR 等等。
        2. 未定义指令中断(Undefined Instruction),如果指令不能识别的话就会产生此中断。
        3. 软中断(Software Interrupt,SWI),由 SWI 指令引起的中断,Linux 的系统调用会用 SWI
指令来引起软中断,通过软中断来陷入到内核空间。
        4. 指令预取中止中断(Prefetch Abort),预取指令的出错的时候会产生此中断。
        5. 数据访问中止中断(Data Abort),访问数据出错的时候会产生此中断。
        6. IRQ 中断(IRQ Interrupt),外部中断,前面已经说了,芯片内部的外设中断都会引起此
中断的发生。
        7. FIQ 中断(FIQ Interrupt),快速中断,如果需要快速处理中断的话就可以使用此中断。

        根据上面的表的内容创建中断向量表,中断向量表位于程序最开始的地方,在这里就是start.S文件的最前面,在ldr pc那里就是中断向量表,当指定的中断发生以后就会调用对应的中断复位函数,比如复位中断发生以后就会执行ldr pc, =Reset_Handler,也就是调用函数Reset_Handler,函数Reset_Handler就是复位中断的中断复位函数,对于其它的中断也是一样的
        而下面的代码则是,对应的中断服务函数,中断服务函数都是用汇编编写的,我们实际需要编写的只有复位中断服务函数Reset_Handler和IRQ中断服务函数IQR_Handler,其他的中断暂时我们也不会使用到

        首先,ldr pc, =Reset_Handler,是加载特定中断处理程序的入口地址到程序计数器pc,从而跳转到Reset_Handler函数执行复位处理过程,用于从中断向量表条目跳转到对应的中断处理函数,确保处理器能够处理各种中断。这种写法提供了一个基本的中断响应框架,同时允许开发者在有需要时替换掉默认的处理程序,添加实际的中断处理逻辑。
        

_start:

	ldr pc, =Reset_Handler
	ldr pc, =Undefined_Handler
	ldr pc,	=SVC_Handler
	ldr pc, =PreAbort_Handler
	ldr pc, =DataAbort_Handler
	ldr pc, =NotUsed_Handler
	ldr pc, =IRQ_Handler
	ldr pc, =FIQ_Handler	

	/*复位中断 */
	Reset_Handler:
		/*复位中断具体处理过程 */

	/*未定义中断 */
	Undefined_Handler:
		ldr r0, =Undefined_Handler
		bx  r0

	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值