从ARM裸机看驱动之按键中断方式控制LED(一)

硬件环境:Samsung Cortex-A9 Exynos4412 BSP + JTAG ARM 仿真器

软件环境:Eclipse

=====================================================

从ARM裸机看驱动相关文章列表:

从ARM裸机看驱动之按键中断方式控制LED(二)http://blog.csdn.net/u010872301/article/details/78526055

=====================================================

同志们,我需要大家跟我的思路一起思考:

1、程序是从主函数main开始执行的吗?
2、按下按键后程序是怎么到达cpu核的?
3、异常向量表是什么鬼?
我将在从ARM裸机看linux驱动中一一道来!
芯片上电后,ARM处于SVC模式,首先要执行start.s文件,对芯片进行初始化,跳转到restart函数,设置异常向量表的首地址、初始化硬件接口、 初始化栈空间等。最后通过"b main"跳转到程序中的main函数。
.text
.global _start
_start:
        @ 异常向量表  偏移地址顺序不能改变
        b        reset
        ldr        pc,_undefined_instruction
        ldr        pc,_software_interrupt
        ldr        pc,_prefetch_abort
        ldr        pc,_data_abort
        @ 保留的向量表也要填充一条指令,否则后面的向量表地址会出现偏移
        ldr        pc,_not_used
        b       irq_handler
        ldr        pc,_fiq

@ 将各个异常处理函数的入口地址保存在当前位置
_undefined_instruction: .word  _undefined_instruction
_software_interrupt:    .word  _software_interrupt
_prefetch_abort:        .word  _prefetch_abort
_data_abort:            .word  _data_abort
_not_used:                .word  _not_used
_irq:                    .word  irq_handler
_fiq:                    .word  _fiq

reset:
    @ 设置异常向量表重新定位在0x40008000地址处存放
    ldr    r0,=0x40008000
    mcr    p15,0,r0,c12,c0,0        @ Vector Base Address Register

    @ 初始化其他硬件接口
        mrs      r0,cpsr
        bic        r0,r0,#0x1f
        orr        r0,r0,#0xd3
        msr        cpsr,r0         @ Enable svc mode of cpu

        mov    r0, #0xfffffff
          mcr    p15, 0, r0, c1, c0, 2      @ Defines access permissions for each coprocessor
                                    @ Privileged and User mode access

    /*
     * Invalidate L1 I/D
     */
    mov    r0, #0    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值