arm 裸板编程的总结(上)

来源:本站
导读:目前正在解读《arm 裸板编程的总结(上)》的相关信息,《arm 裸板编程的总结(上)》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《arm 裸板编程的总结(上)》的详细说明。
简介:arm 裸板编程的总结

一、嵌入式系统概述1.微处理器相关

1.体系结构

a.冯诺依曼体系

特点:指令和数据公用同一条数据总线

注重:主频、缓存

b.哈佛体系

特点:指令和数据分开存储,使用不同的数据总线进行传输

注重:流水线的层级

缺点:不适用于 跳转(调度)比较频繁的场合

2.RISC与CISC

a.CISC特点:

1.指令多

2.寻址方式多(甚至可以在内存和内存之间进行寻址,而不通过寄存器)

3.2/8法则

b.RISC特点:

1.指令少,好记

2.寻址方式少,一般只支持load/store两类访存指令

3.流水线2.嵌入式系统的组成

1.软件

操作系统(可选)

应用程序

网络(可选)

2.硬件

a.嵌入式微处理器

分类:

MCU

MPU

DSP

SOC

组成:

内核(arm、mips、ppc)

外设控制器

内部内存(sram,缓存)

b.时钟

c.电源和复位

d.内存

e.至少一个IO通道

f.其他外围设备3.最小系统

1.处理器

2.时钟

3.内存

4.电源和复位

5.至少一个IO通道

二、ARM内核概述1.ARM内核特点:

1.采用哈佛体系结构(ARM7TDMI采用冯诺依曼体系,之后统统采用哈佛体系)

2.采用RISC

1.指令长度固定

2.指令较少

3.寻址方式相对单一

3.流水线技术2.ARM体系结构版本

ARMv4-ARMv73.ARM内核系列

ARM7

ARM7TDMI

ARM9

ARM920T

ARM11

StrongARM

Cortex A,M,R

Cortext A8,M3

三、ARM编程模型1.工作状态

1.ARM状态--执行32bit的ARM指令

2.Thumb状态--执行16bit的Thumb指令

注:使用BLX或者BX指令可以切换工作状态2.内存格式

1.支持big-endian和little-endian模式

little-endian

高字节在高地址,低字节在低地址

以低字节为字的地址

big-endian

低字节在高地址,高字节在低地址

以高字节为字的地址3.数据类型

字--32bit

半字--16bit

字节--8bit4.操作模式

------------------------------------以下为“非特权模式”

USER(usr)

------------------------------------以下为“特权模式”

System(sys)

------------------------------------以下为“异常模式”

SuperVisor(svc)

FIQ(fiq)

IRQ(irq)

Abort(abt)

Undefined(und)特权模式与非特权模式

1.特权模式可以访问系统中所有的资源,而非特权模式仅可以访问部分系统资源

2.特权模式之间可以任意切换,非特权模式要想切换到特权模式只有一种手段:异常5.寄存器

37个寄存器 = 31个通用寄存器 + 6个状态寄存器

前提:User模式和Sys模式共享同一组寄存器1.几个特殊的寄存器

R13--sp(stack pointer)--习惯使用r13来代表当前模式下的栈指针

R14--lr(link return register)--用于存放子程序调用的返回地址

R15--pc(program counter)--pc总是指向下一条应该被取值的指令

PSR

MODE[4:0]--模式bit

T[5]--状态bit 1代表Thumb

F[6]--Fiq disable1代表disable

I[7]--Irq disable1代表disable

.

.

.

V[28]--溢出

C[29]--进位/借位

Z[30]--zero 1代表zero

N[31]--Negative2.R0-R12

普通数据寄存器,被所有模式共用

fiq有自己的r8-r12寄存器

3.R13

每种模式有自己独立的r13,因为每种模式都有独立的栈空间

4.R14

每种模式有自己独立的r14,因为每种异常模式都需要使用r14保存异常产生之前的模式的返回地址

5.R15

所有模式共享

6.CPSR

所有模式共享

7.SPSR

每种异常模式都有自己的SPSR

6.异常

1.异常的种类(7种)

Reset

SWISVC

FIQFIQ

IRQIRQ

Undefined InstructionUND

Data Abort

Prefetch AbortABT

2.ARM开发板加电之后的第一个运行模式:SVC

3.产生异常,系统自动做的事情

1.保留返回地址

将下一条指令的地址(PC-4)保存到对应异常的r14寄存器中

2.备份状态寄存器

将当前模式下的CPSR,保存到对应异常的SPSR

3.切换到对应的异常模式

强制修改CPSR的模式bit,为对应的异常模式

4.到异常向量处,取下一条指令

强制将PC的值修改为对应的异常向量

5.对于有些异常,还会禁用中断标志,以阻止不可预期的异常嵌套

6.如果在产生异常之前处于Thumb状态,产生异常之后,会切换到ARM状态

4.从异常中返回,应该做的事情

1.返回继续执行

将异常模式的lr寄存器的值(进行修正)赋给pc

2.恢复cpsr

将异常模式的spsr赋给cpsr

3.如果设置了中断禁用标志,需要清除

5.异常向量

Reset0x0SVC

Undefined Instruction0x4UND

Software Interrupt0x8SVC

Abort(Prefetch)0xCABT

Abort(Data)0x10ABT

IRQ0x18IRQ

FIQ0x1CFIQ注意:

1.开发板加电之后,执行的第一条指令的地址为0x0

2.开发板加电之后,第一个运行模式是SVC

3.每个异常向量只有4个字节(FIQ除外),只能放一条跳转指令

4.FIQ放在异常向量的最后,可以节省一条跳转指令

6.异常的优先级

Reset

Data Abort

FIQ

IRQ

Prefetch Abort

UND、SWI

==============================================================

day02 ARM指令和寻址方式

==============================================================1.ARM指令的特点:

1.RISC

2.长度固定,4个字节

3.所有指令可以条件执行

beq

4.采用load/store体系

只有load、store两类指令可以访问内存

5.三级流水线

PC = 当前正在执行的指令的地址 + 82.ARM指令格式

MOV{条件}{s} Rd Rn ...

对于立即数包含在指令内部的汇编指令,立即数的范围一定是有限制的,不可能包括0-4G所有数据条件码:

EQ

NE

GT

GE

LT

LE

AL always11103.常用ARM指令

1.mov指令

movr0,r1; r0 = r1

mov r0,#1;r0 = 1;

mov r1,#0x10;r1 = 0x10

2.add、sub

add r0,r0,r1; r0 = r0 + r1

add r0,r1,r2; r0 = r1 + r2

add r0,r1,#0x3; r0 = r1 + 0x3

3.b,bl

mov r0,#1

bl label

mov r0,#2

loop

b loop

label

mov r0,#3

mov pc,lr

4.cmp指令

cmp r0,r1

cmp r0,#0x10

5.ldr指令

ldr r0,[r1];; r0 = *(unsigned int *)r1;

str r0,[r1];; *(unsigned int *)r1 = r0;

6.orr | and

stmfd sp!,{r0-r12,lr}

ldmfd sp!,{r0-r12,pc}^

==============================================================

提醒:《arm 裸板编程的总结(上)》最后刷新时间 2024-03-14 01:14:19,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《arm 裸板编程的总结(上)》该内容的真实性请自行鉴别。