(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

点击下载本课代码

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值