硬件环境: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

最低0.47元/天 解锁文章
3277

被折叠的 条评论
为什么被折叠?



