(9)ok6410学习之芯片内部初始化之核心初始化



1.异常有七个
异常向量表  缺少00000014
使用装载命令

.text
.global _start
_start:
 b reset
 ldr pc, _undifined_instruction
 ldr pc, _software_interrupt
 ldr pc, _prefetch_abort
 ldr pc, _data_abort
 ldr pc, _not_used;异常向量表  缺少00000014
 ldr pc, _irq
 ldr pc, _fiq
 

_undifined_instruction: .word undifined_instruction
_software_interrupt: .word software_interrupt
_prefetch_abort: .word prefetch_abort
_data_abort: .word data_abort
_not_used: .word not_used
_irq: .word irq
_fiq: .word reset

undifined_instruction:
 nop

software_interrupt:
 nop
 
prefetch_abort:
 nop
 
data_abort:
 nop

not_used:
 nop

irq:
 nop

fiq: 
 nop

reset:
 
2.选为svc模式
在reset  处理那里加一段程序   bl set_svc
set_svc:
 mrs r0, cpsr
 bic r0, r0,#0x1f
 orr r0, r0,#0xd3;设置为svc模式
 msr cpsr, r0
 mov pc, lr
3.关闭看门狗
喂狗主要是给WTDT加新数
关闭主要是对wtcon寄存器置零

调用函数  放rest    bl disable_watchdog

#define pWTCON 0x7e004000
disable_watchdog:
 ldr r0, =pWTCON
 mov r1, #0x0
 str r1, [r0]
 mov pc, lr

4.关闭中断
第一去关闭中断cpsr
第二去屏蔽寄存器mask

disable_interrupt:
 mvn r1,#0x0
 ldr r0,=0x71200014
 str r1,[r0]

 ldr r0,=0x71300014
 str r1,[r0]
 mov pc, lr


5.关闭mmu和cache
什么是cache:也是一种存贮器,存放一些数据拷贝  访问速度快
什么是mmu:mmu完成虚拟内存到物理内存的转换
在初始化时最好关掉
关闭步骤:使icahe和dcahe失效  mcr p15,0,r0,c7,c7,
         1.关闭cahe和mmu        mrc p15,0,r0,c1,c0,0//读写要求
    bic r0,r0,#0x00000007
     mcr p15,0,r0,c1,c0,0

disable_mmu:
 mcr p15,0,r0,c7,c7,0
 mrc p15,0,r0,c1,c0,0
 bic r0, r0, #0x00000007
 mcr p15,0,r0,c1,c0,0
 mov pc, lr

点击下载本课代码

你可能感兴趣的:(bootloader,OK6410,核心初始化)