s5p6818裸机-irq中断

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

前言

本次学习的目的是通过按按键触发按键中断,调用相关的中断服务函数,实现蜂鸣器鸣响。通过裸机学习能使自己对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
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值