ARM知识学习
一、ARM简介
1、ARM:ARM是一个公司名,该公司主要业务是设计处理器内核。
处理器内核:又叫处理器架构,由控制时序电路 ARM指令集/thumb指令集组成,
处理器内核 外围组件=处理器芯片
ARM内核有两种工作状态:ARM态与thumb态
当处于ARM态时,该内核有7或8种工作模式
User:用户模式,大多数任务执行时处于这种状态
FIQ:高优先级中断产生时将会进入这种模式
IRQ:低优先级中断产生时将会进入这种状态
SVC:特权模式,当复位或软中断指令执行时将会进入这种状态
ABT:存取异常
UND:执行未定义指令时进入这种状态
SYS:系统模式,与user类似,但具有直接切换到其他模式的特权
Cortex-A特有模式:
Monitor : 是为了安全而扩展出的用于执行安全监控代码的模式;
也是一种特权模式
二、寄存器:
contex的内核有40个寄存器:r0~r15,cpsr,spsr
r13(sp):存放sp栈指针
r14(lr):用来存放中断的下一条指令地址或函数调用的返回地址
r15(pc): Pc程序的取址位置
cpsr:程序状态寄存器,保存当前处理器的状态信息
spsr:是cpsr的备份寄存器,通常发生中断时被使用
高四位:
31bit:N=1表示运算结果为负,N=0运算结果为正
30bit Z=1表示运算结果为0, Z=0表示为非零
29bit C,加法C=1表示有进位,C=0表示没有进位
28bit V=1ALU运算溢出,A=0ALU运算未溢出
低5位:处理器模式
处理器模式:
1、psr操作指令--------msr、mrs
复制一个寄存器到 PSR 中
MSR CPSR, R0 ; 复制 R0 到 CPSR 中
复制 PSR 到一个寄存器中
MRS R0, CPSR ; 复制 CPSR 到 R0 中
处理器模式切换:
-
mrs r0,cpsr
-
bic r0,#0x1F
-
orr r0,#0x10
-
msr cpsr,r0
三、汇编指令
1、数据处理指令:
算数指令:
-
ADD r0,r1 @r0=r0 r1 //adds 影响标志位
-
ADC r0,r1 @r0=r0 r1 C
-
SUB r0,r1 @r0=r0-r1
-
SBC r0,r1 @r0=r0-r1-!C
-
RSB r0,r1 @r0=r1-r0
-
RSC r0,r1 @r0=r1-r0-!C
逻辑指令:
-
AND r0,r1 @ r0=r0&r1
-
ORR r0,r1 @r0=r0|r1
-
EOR r0,r1 @r0=r0^r1
-
BIC r0,#0xFF @位清零,r0低8位被清零
比较指令:
-
CMP r0,r1 @r0与r1比较
-
CMN r0,r1 @反值比较 r0与~r1
-
TST r0,#0x3 @Z=1,第3bit为空,Z=0,第3bit不为空
-
TEQ r0,r1 @r0r1 比较
数据搬移指令
-
MOV r0,0x1f @将0x1f存入ro寄存器中
-
MVN r1,r0 @传送取反的值r1=~r0
2、ldr伪指令
[]:取地址中的内容
在ldr r3,[pc,#-0x0004]指令中,数据0x12345678放到哪里了?
放在了数据池中,数据池=pc 偏移=0x00000008 8 (-0x0004)=0x0000000C
[数据池]=[0x0000000C]=0x12345678
注意:指令从取指到执行,经历了两个指令周期,两个指令周期可以执行两条指令
所以,指令从取指到执行跨越了两条指令的宽度,所有要加2*4=8个地址单元
3、b/bl指令
b:无条件跳转
bl:保存下一条指令地址到lr中,程序返回mov pc, lr
4、移位指令
lsl:逻辑左移,低位补零
lsr:逻辑右移,高位补零
asr:右移,高位补原数符号位
ror:循环右移 ,高位用移出的数填充
rrx:右移一位,高位补上条指令结束后的C值
5、单寄存器传送指令
ldr/ldrb/ldrh:内存---->寄存器
str/strb/strh: 寄存器---->内存
str r1,[r2,#4]! @前索引赋值法 i
str r1,[r2],#4 @后索引赋值法i
6、块传送指令
ldm 内存----->寄存器 出栈ldmia=ldmfd
ia i
ib i
da i--
db --i
stm 寄存器----->内存 入栈 stmdb = stmfd
四、软中断
中断:是一个过程,是指CPU在执行当前程序的过程中插入了另外一段程序的执行过程。
当SWI 88执行时,ARM core:
1 拷贝cpsr的值到spsr
2 设置cpsr=0x000000d3
3 保存swi 88的下一条指令地址到lr=0x00000044
4 设置pc=0x00000008(异常向量表的第三条异常地址)
stmfd sp!,{r0-r12,lr}
当处理完中断,恢复现场时,ARM core:
1 将spsr的值拷贝到cpsr中
2 将swi 88 的下一条指令地址(lr)恢复给pc(ldmfd sp!,{r0-r12,pc}^ )
五、硬件中断
目标:通过k2按键触发硬件中断
第一阶段:连线
K2--》con4-->con3-->u1a(gpx1_1)--》能发出XEINT9中断--》57号中断
1 配置GPX1_1为外部中断模式
6.2.3.198 GPX1CON 0x11000C20 (4-7)0xF
2 配置中断的触发方式-->下降沿触发
6.2.3.211 EXT_INT41CON 0x11000E04 (4-6)0x2
3 取消中断掩码
6.2.3.223 EXT_INT41_MASK 0x11000F04 (1)0
第二阶段:gic
1 使能57号中断
9.5.1.16 ICDISER_CPU 0x10490104 (25)1
2 把57号中断交给cpu0处理
9.5.1.22 ICDIPTR14_CPU0 0x10490838 (8-15)0x1
3 设置中断优先级
9.5.1.21 ICDIPR_CPU 0x10490438 (8-15) 优先级范围0~255 例如 12
4 使能CPU0中断
9.5.1.1 ICCICR_CPU0 0x10480000 (0)1
5 设置cpu0的中断优先级阈值
9.5.1.2 ICCPMR_CPU0 0x10480004 (0-7)0xFF
6 使能GIC总开关
9.5.1.12 ICDDCR 0x10490000 (0)1
第三阶段:中断处理
1 得到中断号--》寄存器
9.5.1.4 ICCIAR_CPU0 0x1048000C (0-9)获取中断号
处理中断--》led uart
2 清除管脚中断标志
6.2.3.227 EXT_INT41_PEND 0x11000F44 (1)1
3 清除GIC控制器的57号中断标志
9.5.1.19 ICDICPR_CPU 0x10490284 (25)1
4 结束中断
9.5.1.5 ICCEOIR_CPU0 0x10480010 (0-9)中断号
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgaafge
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13