当前位置:网站首页>bootloader系列三——核心初始化
bootloader系列三——核心初始化
2022-07-21 10:04:00 【HelloAaric】
arm架构指导手册下载地址:
链接:https://pan.baidu.com/s/1K7wlX3sxNTeJ9Z-tazcVcg 密码:3xii
2440芯片手册下载地址:
链接:https://pan.baidu.com/s/10QXymx0Em3d1XCmf_o2_zA 密码:o69o
ARM920T内核指导手册:
链接:https://pan.baidu.com/s/1mWz7g-xYsPbHAfjkHda2gw 密码:9a0l
1. 设置异常向量表
arm处理器共有7种异常,其对应的向量地址如下表所示(arm架构指导手册第54页)。
.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
ldr pc, _irq
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
_fiq: .word fiq
undefined_instruction:
nop
software_interrupt:
nop
prefetch_abort:
nop
data_abort:
nop
not_used:
nop
irq:
nop
fiq:
nop
reset:
bl set_svc
bl disable_watchdog
bl disable_interrupt
bl disable_mmu
2. svc模式
svc模式对应的编码如下图所示(arm架构指导手册41页)。通过设置状态寄存器,可以改变处理器工作模式。
状态寄存器的介绍如下图(arm架构指导手册49页)。该寄存器的0-4位用来设置处理器工作模式。
set_svc:
mrs r0, cpsr
bic r0, r0, #0x1f
orr r0, r0, #0xd3
msr cpsr, r0
mov pc, lr
3. 关闭看门狗
watchdog可以通过WTCON寄存器控制,如下图所示(2440芯片手册462页)。
#define pWTCON 0x53000000
disable_watchdog:
ldr r0, =pWTCON
mov r1, #0x0
str r1, [r0]
mov pc, lr
4. 关闭中断
中断屏蔽寄存器的介绍如下图所示(2440芯片手册389页)。
disable_interrupt:
mvn r1, #0x0
ldr r0, =0x4a000008
str r1, [r0]
mov pc, lr
5. 关闭mmu和cache
cache操作寄存器7的介绍如下图(ARM920T内核指导手册43页)。
控制寄存器1的介绍如下图(ARM920T内核指导手册37页),用于禁止mmu和i/d cache。
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
边栏推荐
- pytorch入门二 使用pyplot动态展示函数拟合过程
- Use dichotomy to find peak value
- 微信小程序-that.setData({})设置复杂字段数据
- quartz简单用法及其es-job
- 一个非常简单的函数为什么会崩溃
- MySQL性能优化(二):选择优化的数据类型
- In the cloud native era, developers should have these five capabilities
- Force buckle 1260 2D mesh migration
- Ali Er Mian: what is MMAP? (not MMP)
- 请教个问题 有没有用cdc监控oracle遇到Error Msg = ORA-04036: 实例使用
猜你喜欢
随机推荐
Redis到底是单线程还是多线程
Codeforces Round #578 (Div. 2) C - Round Corridor 【数论+规律】
quartz简单用法及其es-job
Educational Codeforces Round 70 A题 You Are Given Two Binary Strings...
Implementing DDD based on ABP -- domain service, application service and dto practice
荐号 | 真正的卓越者,都在践行“人生最优策略”,推荐这几个优质号
2019杭电多校 第七场 6651-Final Exam【规律+思维】
It takes only 10 pictures to figure out how the coupon architecture evolved!
How airbnb realizes dynamic expansion of kubernetes cluster
Grafana visual configuration chart table
Six ways for JS to implement inheritance
我,AI博士生,在线众筹研究主题
[watermelon book learning] 1. Decision tree
A year has passed, has livedata really been replaced by flow? Will livedata be discarded?
I, AI doctoral student, online crowdfunding research topic
搜狐畅游笔试题+知识点总结
Mobilevit: challenge the end-to-side overlord of mobilenet
rust 文件读写操作
maya咖啡机建模
2019牛客暑期多校训练营(第七场)B-Irreducible Polynomial 【数论】