I.MX 6ULL GPIO中断实验 Cortex-A7 中断系统详解

start:
    ldr pc, =Reset_Handler      /* 复位中断服务函数 */
    ldr pc, =Undefined_Handler  /* 未定义指令中断服务函数 */
    ldr pc, =SVC_Handler        /* SVC */
    ldr pc, =PreAbort_Handler   /* 预取终止 */
    ldr pc, =DataAbort_Handler  /* 数据终止 */
    ldr pc, =NotUsed_Handler    /* 未使用 */
    ldr pc, =IRQ_Handler        /* IRQ中断 */
    ldr pc, =FIQ_Handler        /* FIQ中断 */

/* 复位中断服务函数 */
Reset_Handler:

    cpsid i                    /* 关闭IRQ */
    /* 关闭I,D Cache和MMU
     * 修改SCTLR寄存器,采用读-改-写的方式
     */
    MRC p15, 0, r0, c1, c0, 0 /* 读取SCTLR寄存器的数据到R0寄存器里面 */
    bic r0, r0, #(1 << 12)      /* 关闭I Cache */
    bic r0, r0, #(1 << 11)      /* 关闭分之预测 */
    bic r0, r0, #(1 << 2)       /* 关闭D Cache*/
    bic r0, r0, #(1 << 1)       /* 关闭对齐 */
    bic r0, r0, #(1 << 0)       /* 关闭MMU */
    MCR p15, 0, r0, c1, c0, 0 /* 将R0寄存器里面的数据写入到SCTLR里面 */

    /* 设置中断向量偏移 */
    ldr r0, =0x87800000
    dsb
    isb
    MCR p15,0,r0,c12,c0,0 /* 设置VBAR寄存器=0x87800000 */
    dsb
    isb

     /* 清除BSS段 */
    ldr r0, _bss_start
    ldr r1, _bss_end
    mov r2, #0
bss_loop:
    stmia r0! , {r2}
    cmp r0, r1          /* 比较R0和R1里面的值 */
    ble bss_loop        /* 如果r0地址小于等于r1,继续清除bss段 */

   
    
    /* 设置处理器进入IRQ模式 */
    mrs r0,cpsr         /* 读取cpsr到r0 */
    bic r0,r0,#0x1f     /* 清除cpsr的bit4-0 */ 
    orr r0,r0,#0x12     /* 使用IRQ模式 */
    msr cpsr,r0         /* 将r0写入到cpsr */
    ldr sp, =0x80600000 /* 设置IRQ模式下的sp */

    /* 设置处理器进入SYS模式 */
    mrs r0,cpsr         /* 读取cpsr到r0 */
    bic r0,r0,#0x1f     /* 清除cpsr的bit4-0 */ 
    orr r0,r0,#0x1f     /* 使用SYS模式 */
    msr cpsr,r0         /* 将r0写入到cpsr */
    ldr sp, =0x80400000 /* 设置SYS模式下的sp */

    /* 设置处理器进入SVC模式 */
    mrs r0,cpsr         /* 读取cpsr到r0 */
    bic r0,r0,#0x1f     /* 清除cpsr的bit4-0 */ 
    orr r0,r0,#0x13     /* 使用SVC模式 */
    msr cpsr,r0         /* 将r0写入到cpsr */
    ldr sp, =0x80200000 /* 设置SVC模式下的sp */ 

    cpsie i             /* 打开IRQ */         
    b main              /* 跳转到C语言main函数 */ 

其中查看手册:2000 - ARM Architecture Reference Manual ARMv7-A and ARMv

                         Cortex-A7 MPCore Technical Reference Manual

查找CIC控制器及CP15协处理器。

MRC: 将 CP15 协处理器中的寄存器数据读到 ARM 寄存器中。

MRC 就是读 CP15 寄存器, MCR 就是写 CP15 寄存器, MCR 指令格式如下:

MCR{cond} p15, <opc1>, <Rt>, <CRn>, <CRm>, <opc2>

MRC p15, 0, r0, c0,c0,0

其中make过程遇到 # BIC指令,该指令在BIC指令集中为与( | )意思

后续make完成烧录无问题

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值