×
单片机 > 单片机程序设计 > 详情

arm 裸板编程的总结上

发布时间:2021-06-25 发布时间:
|

一、嵌入式系统概述

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-ARMv7

3.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

字节--8bit

4.操作模式


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

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]--Negative

2.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 = 当前正在执行的指令的地址 + 8

2.ARM指令格式


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

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

条件码:


EQ

NE

GT

GE

LT

LE

AL always1110

3.常用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}^


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



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
C51 特殊功能寄存器SFR的名称和地址