前言
本次学习的目的是通过按按键触发按键中断,调用相关的中断服务函数,实现蜂鸣器鸣响。通过裸机学习能使自己对SoC的运行环境,开发环境有更好的了解。
软件实现流程
1)在start.S启动汇编中实现中断向量表,及irq处理函数
2)实现irq中断结构体数组,irq通用中断服务函数注册函数(中断号和中断服务函数的联系)
3)实现gic中断控制器初始化函数
4)实现gpio初始化函数,复用-中断配置
流程具体
1、异常向量表和IRQ_Handler一般都在start.S里面编写,因为需要做一些中断触发时保护现场和恢复现场的工作。
_start:
/*DDR范围:0x40000000~0x80000000 1GB*/
/*异常向量表 */
ldr pc, =Reset_Handler /* 复位中断 */
ldr pc, =Undefined_Handelr /* 未定义中断 */
ldr pc, =SVC_Handelr /* SVC(Supervisor)中断 */
ldr pc, =PrefAbort_Handler /* 预取终止中断 */
ldr pc, =DataAbort_Handler /* 数据终止中断 */
ldr pc, =NotUsed_Handler /* 未使用中断 */
ldr pc, =IRQ_Handler /* IRQ中断 */
ldr pc, =FIQ_Handler /* FIQ(快速中断)未定义中断 */
IRQ_Handler:
ldr sp,=0x7FC00000 /*设置irq模式的sp指针 */
/*保护现场 */
push {lr}
push {r0-r3,r12}
mrs r0, spsr /*访问SPSR寄存器,保存cpsr */
push {r0}
/****************************************************** */
mrc p15,1,r1,c15,c3,0 /*读取GIC的CPU接口端基地址 GICC_CTLR*/
ldr r0, [r1,#0xC] /*基地址偏移0xC,访问GICC_IAR寄存器 */
/*GICC_IAR能够获取到中断ID号 */
push {r0,r1}
cps #0x3 /*进入svc模式 */
push {lr} /*保存svc的lr寄存器 */
//ldr r2, =sys

本文详细介绍了如何通过启动S文件配置中断向量表,实现GPIO中断与蜂鸣器联动,包括异常处理、中断服务函数注册、GIC初始化和GPIO配置。深入探讨了中断执行流程,有助于理解嵌入式开发中中断管理的关键步骤。
最低0.47元/天 解锁文章
3197





