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

	
### 关于IMX6ULL开发板的设备树配置 对于IMX6ULL开发板而言,设备树(Device Tree, DT)用于描述硬件特性给操作系统。通过修改和定制设备树源文件(DTS),可以实现对不同外设的支持以及调整现有功能。 #### 创建自定义设备树覆盖层 为了使IMX6ULL支持USB接口FC游戏手柄,在原有基础上创建个新的dts文件来扩展或更改现有的DTB是非常常见的做法[^1]: ```bash cp arch/arm/boot/dts/imx6ul-14x14-evk.dts my-imx6ul-custom.dts ``` 编辑`my-imx6ul-custom.dts`并加入必要的节点以启用所需的功能。例如,如果要增加对手柄的支持,则可能需要确保相应的GPIO引脚被正确分配,并且指定了合适的中断线。 #### 修改内核配置以便包含新的选项 使用预定义好的defconfig可以帮助快速设置好大部分参数,之后再根据实际需求微调其他细节部分[^2]: ```bash make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- 100ask_imx6ull_defconfig ``` 这步骤将会把`.config`初始化为目标平台的标准配置状态,从而简化后续操作流程中的复杂度。 #### 测试输入事件处理程序 当完成了上述工作后,还需要验证新添加的手柄能否正常工作。为此可以从主机端移植些实用工具如`libevdev`和`evtest`来进行调试测试[^3]: ```bash ./configure --prefix=$PWD/../libevdev-1.11.0-build --host=arm-linux-gnueabihf make && make install ``` 以上过程展示了如何针对特定应用场景构建适合自己的Linux发行版镜像及其配套软件包的方法论;同时也强调了理解整个体系结构的重要性——从最底层的物理连接直到最高层次的应用交互逻辑。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值