培训讲义提纲.docx

上传人:b****6 文档编号:4805450 上传时间:2022-12-09 格式:DOCX 页数:60 大小:1.02MB
下载 相关 举报
培训讲义提纲.docx_第1页
第1页 / 共60页
培训讲义提纲.docx_第2页
第2页 / 共60页
培训讲义提纲.docx_第3页
第3页 / 共60页
培训讲义提纲.docx_第4页
第4页 / 共60页
培训讲义提纲.docx_第5页
第5页 / 共60页
点击查看更多>>
下载资源
资源描述

培训讲义提纲.docx

《培训讲义提纲.docx》由会员分享,可在线阅读,更多相关《培训讲义提纲.docx(60页珍藏版)》请在冰豆网上搜索。

培训讲义提纲.docx

培训讲义提纲

 

培训讲义提纲

 

单位:

西安电子科技大学

编写:

何方勇

编写日期:

2005年7月1日

1.绪言

本次ARM培训要紧使各位受训人员了解嵌入式操作系统的差不多概念、软硬件构成框架、以及把握与嵌入式操作系统相关的知识。

随着通信技术、电子技术、运算机技术、以及微电子技术的进展,片上系统(SOC)成为当今电子技术的一大主流;这就使得嵌入式开发技术成为整个业界的研究和开发的热点。

我们明白当今世界通信与信息技术进展的3大热点是:

第三、四代移动通信技术、数字电视技术、以及汽车电子技术。

在这几个热点技术的最终实现将被纳入系统的概念,其中嵌入式系统将在里面伴有重要的角色。

2.嵌入式操作系统

嵌入式操作系统作为一种新的系统,我们应该如何把握呢?

以下我们将简要介绍一下嵌入式系统。

2.1.嵌入式操作系统的差不多概念

从字面上,我们能够从两方面明白得嵌入式系统:

嵌入式、系统。

列举适当的例子说明嵌入式系统的应用:

手持设备、大型通信设备

2.2.嵌入式操作系统与常见的单片机、DSP系统的细微区别

从系统的概念动身讲解:

单片机、和DSP是没有系统概念的

2.3.嵌入式操作系统的软硬件平台开发

1.嵌入式操作系统的硬件构成:

核心处理器、程序和数据储备器、总线系统、外围接口(设备)等;

2.嵌入式操作系统的软件构成:

系统软件、API、底层驱动、应用程序等

结合微机系统操作系统讲解

3.常见嵌入式操作系统:

VxWorks、PSOS、LINUX、WINCE、NUCLEUS等,各种操作系统的区别和优点及应用前景。

2.4.如何样进行嵌入式系统设计

嵌入式系统开发是本次培训的要紧内容,那我们应该从以下方面入手:

处理器、硬件部件、操作系统、编程语言、软件开发工具、硬件开发平台、软件组成。

1)处理器:

速度、IO设计指标、处理器的软件支持、处理器调试方式、处理器提供商的信誉度;

2)硬件部件:

硬件实现难度、开发周期、市场前景、供货情形

3)操作系统:

产品的适合度、调试难度、代码结构、可开发潜力、移植可行性

4)编程语言:

高级语言、低级语言

5)软件开发工具:

系统调试功能如何、支持的库函数、开发商的软件支持

3.嵌入式处理器

在以上的讲义中我们简要提到了嵌入式开发的各方面的问题,接下来我们将从硬件开始讲解。

在嵌入式系统中,要紧以ARM芯片作为该系统的核心芯片。

3.1.嵌入式处理器简介

ARM是AdvancedRISCMachines的缩写,ARM公司于1990成立,ARM以低成本、低功耗、高性能迅速占据了全球市场。

其产品广泛应用到移动通信、消费电子、以及嵌入式市场。

ARM公司不生产芯片,只是IP供应商,只做设计。

常见ARM处理器系列有:

ARM7系列、ARM9系列、ARM9E系列、ARM10系列、SecurCoreSC100、StrongARM、XScale。

在此,我们要紧讲解ARM7系列、ARM9系列:

1)ARM7系列:

0.9MIPS/MHz3级流水、冯.诺依曼结构;其内核要紧有ARM7TDMI和ARM720T;T:

支持16位THUMB指令,D支持在片调试,M增强型乘法器,产生全64位结果,I:

嵌入式ICE硬件提供片上断点和调试点支持

2)ARM9系列:

1.1MIPS/MHz5级流水、哈佛结构;其内核要紧有ARM920T、ARM722T和ARM940T;

3.2.基于ARM内核的芯片扩展

由于ARM公司只做IP,不生产具体的芯片;因此我们所使用的ARM芯片差不多上全世界其他硬件芯片厂商在通过ARM公司的授权,然后在此基础上进行硬件扩展,以满足不同领域的需求。

ARM9系列是当今嵌入式系统应用的主流芯片内核技术。

全世界各大厂商都采纳ARM公司的IP来开发自己的ARM芯片,要紧厂商有:

三星、AD、TI、菲利普、Intel、CIRRUSLOGIC等。

下面,我们以三星公司的ARM芯片S3C2410X为例来简要介绍基于ARM内核的芯片扩展。

注意:

ARM9系列是兼容ARM7系列的。

 

3.3.ARM920T内核详解

现在基于ARM920T内核的芯片逐步成为嵌入式系统芯片的主流,我们有必要详解其结构;这是进一步学习软件开发的基础。

内核的结构图如下所示:

下面我们将重点介绍ARM920T的协处理器CP15和内存治理单元MMU

3.3.1.协处理器CP15

3.3.2.内存治理单元MMU

4.软件开发

嵌入式系统的软件开发包括:

操作系统和应用程序开发两个方面。

下面我们进一步讲解基于ARM芯片的汇编语言。

4.1.ARM编程模型

ARM常见版本是V4和V5,现在要紧用的是V4,

处理器工作状态:

ARM,THUMB

开关状态:

进入THUMB状态、进入ARM状态

储备器格式:

大小端点格式

指令长度:

32位、16位

数据类型:

字,半字,字节

操作模式:

7种

寄存器:

31个通用寄存器和6个状态寄存器

中断:

4.2.ARM差不多寻址方式

寄存器寻址:

赶忙寻址:

寄存器移位寻址:

寄存器间接寻址:

变址寻址:

多寄存器寻址:

堆栈寻址:

块拷贝寻址:

相对寻址:

4.3.ARM指令集

本章内容是详细讲解ARM指令集。

4.3.1.ARM指令格式

1.指令集格式:

ARM指令集格式如下表4-1所示:

表4-1:

ARM指令集格式

注意:

某些指令码没有定义,但并不导致未定义指令陷阱显现,例如一个乘法指令的第6位变为1。

不应使用这些指令,因为它们的作用也许会由以后的ARM执行

2.ARM指令集表:

下面表4-2、表4-3列出了ARM指令集:

表4-2:

表4-2:

ARM指令集

表4-3:

表4-3:

ARM指令集

3.条件码:

在ARM状态下,所有指令都会依照CPSR条件码和指令条件域的状态被有条件地执行。

该域(位31:

28)决定了执行一条指令的环境。

假如C、N、Z和V标志的状态满足该域的编码条件,指令就被执行,否则不予执行。

存在着16个可能条件,每种由复加在指令经历符后的一个双字符后缀表示。

例如,Branch(B为汇编语言)变为BEQ表示“BranchifEqual”,意思是当Z标志被置位时执行Branch指令。

实际上,表3-2中所列的15个不同的条件也许会用到,第16个(1111)保留,不能使用。

在后缀缺省时,大多数指令的条件域被设置成“Always”(后缀AL)。

这意味着不管CPSR的条件码是什么,指令永久被执行。

下表4-4给出了条件码概况:

表4-4:

ARM指令中的条件码

4.3.2.ARM指令集详解

★★1分支与交换(BX指令,Branch和Exchange指令):

该指令仅仅在条件为真时被执行,参见表4-4。

该指令通过将一个通用寄存器Rn的内容复制到程序计数器PC来执行一个分支。

那个分支会引起管道流,并会依照Rn指定的地址再入。

该指令也承诺交换指令集。

当执行该指令时,Rn[0]的值决定了是否按照ARM指令依旧THUMB指令对指令流进行解码。

指令格式如下图4-1所示:

 

图4-1:

BX指令格式

★指令循环时刻:

执行BX指令占用2S+1N周期(与BL一样),那个地点S和N分别代表连续(S周期)和非连续(N周期)。

★汇编程序语法:

BX-分支和交换指令

BX{cond}Rn;{cond}为双字母条件经历符(即条件码),见表4-4,而Rn表示一个有效寄存器(比如:

R0)

★使用R15作操作数:

假如将R15作操作数,该情形未定义。

例:

ADRR0,Into_THUMB+1;产生分支目标地址,bit0置位,进入THUMB状态

BXR0;分支并改变到THUMB状,R15(PC):

=R0

CODE16;汇编作为THUMB指令的后续码

Into_THUMB

ADRR5,Back_to_ARM;产生分支目标到字排列地址,bit0置低,变回到ARM

BXR5;分支并变回到ARM状态,R15(PC):

=R0

ALIGN;字排列

CODE32;汇编作为ARM指令的后续码

Back_to_ARM

★★2分支与带链接分支(B、BL)

该指令仅仅在条件为真时被执行,参见表4-4。

该指令的编码如下图4-2所示。

图4-2:

B、BL指令格式

分支指令包含有一个有符号的2态补充24位偏移(相当于25根地址线+符号位,即+/-32M字节)。

这被左移两位,符号扩展至32位,并加到程序计数器PC。

因此该指令能够指定+/-32M字节的分支。

该指令偏置必须考虑预取操作,它会引起程序计数器PC超前当前指令2个字(8个字节)。

超过+/-32M字节的分支必须使用偏置或事先装入寄存器的绝对目标。

在这种情形下,假如要求有带链接类型的分支操作,应当将PC值人工存入R14。

★链接位:

带链接的分支(BL)将旧的PC写入当前储备空间的链接寄存器(R14)。

写入R14的值被调整到承诺预取,并包含紧跟着“分支与链接指令”的指令地址。

注意CPSR不保留PC值,R14[1:

0]总是清零。

从带链接的分支返回,假如链接寄存器仍旧有效,可使用MOVPC,R14;或假如链接寄存器以被Rn存作堆栈指针,使用LDMRn!

{..PC}。

★指令循环时刻:

分支和带链接分支指令占用2S+1N增加的周期(与BX一样),那个地点S和N分别代表连续(S周期)和内部(I周期)。

★汇编程序语法:

{}中的内容任意,<>中的内容必须显现

B{L}{cond}

{L}常用要求带链接分支的指令形式。

假如缺省,R14不受指令阻碍,即不将旧的PC值存入R14。

{cond}如表4-4中所示的双字母助记符(条件码),假如缺省,默认为AL(Always)。

目标单元,汇编程序运算偏移量。

hereBALhere;等待,指令汇编成0xEAFFFFFE

Bthere;等待,默认条件是“Always”

CMPR1,#0;R1=0?

比较

BEQfred;为零,则跳转;反之,连续下一个指令

BLsub+ROM;跳转,调用子程序

ADDSR1,#1;R1=R1+1,设置CPSR标志

BLCCsub;C=0,调用子程序

★★3数据处理:

数据处理指令仅在条件为真时被执行,参见表4-4。

该指令编码如下图4-3所示。

 

图4-3:

数据处理指令

该指令通过对一或两个操作数进行指定的算术或逻辑运算产生结果。

第一个操作数总是一个寄存器(Rn)。

依照指令中L(即D25)位的值,第二个操作数可能是一个移位寄存器(Rm)或一个8位循环赶忙数(Imm)。

依照指令中S位的值,确定该指令的结果是否能够爱护或更新CPSR中的条件码。

确定的运算(TST(OP1与OP2)、TEQ(OP1异或OP2)、CMP(OP1-OP2)、CMN(OP1+OP2))不将结果写入Rd。

它们只用执行检测和设置结果中的条件码并总对S位置位。

★CPSR标志:

数据处理运算可分为逻辑运算和算术运算,逻辑运算(AND、EOR、TST、TEQ、ORR、MOV、BIC、MVN)对操作数的所有相应位或产生结果的操作数执行逻辑运算。

假如S位被置位(同时Rd不是R15,见下表),则CPSR中的V标志不受阻碍,C标志将被置位来执行barrelshifter(或当移位操作为LSL#0时爱护),Z标志当且仅当结果全零时被置位,N被置为结果bit31的逻辑值。

ARM数据处理指令见下表4-5

表4-5:

数据处理指令

算术运算(SUB、RSB、ADD、ADC、SBC、RSC、CMN)将每个操作数都看作是一个32位的整数(无符号或两个独立的符号,两种情形时一样的)。

假如S位被置位(同时Rd不是R15),则CPSR中的V标志在结果的bit31显现溢出时被置位,假如操作数均为无符号数能够不理会,但假如操作数为两个独立的有符号数则会发出错误提示,C标志会由于执行ALU的bit31被置位,Z标志当且仅当结果全零时被置位,N标志被置为结果bit31的值(假如认为操作数为两个独立的有符号数时指示结果为负)。

★移位:

当第二个操作数被指定为移位寄存器时,寄存器的移位操作受指令中的移位域操纵。

该域指示要执行的移位类型(逻辑左移或右移、算术右移或循环右移)。

寄存器要移动的值可包含在指令的赶忙域中,或者在另一个寄存器(除了R15)。

不同移位类型的编码如图4-4所示。

 

图4-4:

ARM移位操作

★指定偏移量指令:

当指令中指定了偏移量时,它包含了一个5位的区域,其赋值范畴为0~31。

逻辑左移(LSL)猎取Rm的内容并将每一位移动指定量到更有意义的位置。

结果的最不重要位以零填充,Rm的最高位被丢弃,并不映射到结果中,除非当ALU运算处于逻辑状态(见上面)时,丢弃的最不重要的位变为shifter的进位输出,并可能锁定CPSR的S位。

例如,LSL#5的阻碍如下图4-5所示。

图4-5:

逻辑左移

注意:

LSL#5是一个特例,那个地点shifter进位输出是CPSRC标志的过去值。

Rm的内容被直截了当用作第二个操作数。

逻辑右移(LSR)指令类似,然而Rm的内容被移到结果最不重要的位置。

LSR#5的阻碍如下图4-6所示。

图4-6:

逻辑右移

此种移位使得Rm的第31位有零进位输出。

与逻辑左移零一样,逻辑右移零是余外的,因此汇编程序将LSR#0(以及ASR#0和ROR#0)转换成LSL#0,并承诺指定LSR#32。

算术右移(ASR)与逻辑右移类似,不同的是高位被Rm的bit31填充而不是零。

这爱护了2个独立符号状态中的符号,例如,ASR#5如下图4-7所示。

图4-7:

算术右移

此种移位使得Rm的bit31重新用作进位输出,同时操作数2的每一位也等于Rm的bit31。

因此依照Rm的bit31的值,结果为全1或全0。

循环右移(ROR)操作是将逻辑右移操作中移出去的位再引入放置在结果的高端,在逻辑右移中常用零来填充高位。

例如,ROR#5如下图4-8所示。

图4-8:

循环右移

期望给ROR#0的移位域形式用于对barrelshifter的专门功能,即带扩展的循环右移编码。

那个循环右移是它使用附加的CPSR的C标志来提供一个要被移位的33位的数量到Rm内容的最高端,参见下图4-9。

图4-9:

带扩展循环右移

★指定偏移量寄存器

只有Rs的最低端字节被用来确定偏移量。

Rs能够是除R15外的任何寄存器。

假如该字节为零,Rm未改变的内容将被当作第二操作数,同时旧的CPSR的C标志值将会被作为shifter的进位输出。

假如1到31位之间字节有值,移位结果将与指定移位指令的同一个值和移位操作匹配。

假如字节中的值大于等于32,结果为上面所述移位的逻辑扩展:

1.LSL32结果为零,进位输出等于Rm的0位;

2.LSL大于32结果为零,进位为零;

3.LSR32结果为零,进位输出等于Rm的31位;

4.LSR大于32结果为零,进位为零;

5.ASR大于等于32结果和进位等于Rm的31位;

6.ROR32结果等于Rm,进位等于Rm的31位;

7.RORn结果和进位与RORn-32相同,那个地点n大于32;因此不断从n中减去32,直到n值在1~31之间,见前面。

注意:

必须使带有操纵移位寄存器指令的bit7为零,该位为1会引起指令为乘或未定义。

★赶忙数循环:

赶忙数循环域是一个4位无符号整数,指定对8位赶忙数进行移位操作。

该值为扩展到32位的零,然后通过在循环域中的两倍值服从右移。

这能够产生许多常数,例如2的幂。

★写入R15

当Rd为除R15外的寄存器时,CPSR中的条件码标志能够从前面所述的ALU标志更新。

当Rd为R15同时指令中的S标志未置位时,操作结果被放入R15且CPSR不受阻碍。

当Rd为R15且S标志置位时,操作结果被放入R15,对应于当前模式的SPSR被移入CPSR。

这承诺自动储备PC和CPSR的状态改变。

这种指令格式在用户模式下不能使用。

★用R15作操作数

假如R15(PC)被用于数据处理指令中的一个操作数,可直截了当使用该寄存器。

PC值确实是指令地址、加上由于指令预取的8或12个字节。

假如指令中指定了移位量,PC为前8个字节。

假如用寄存器指定移位量,则PC为前12个字节。

★TEQ、TST、CMP和CMN操作码:

注意:

TEQ、TST、CMP和CMN不写结果操作结果但置位CPSR中的标志位。

即使助记符中没有指定,汇编程序也应当总将这些指令的S标志置位。

不能使用TEQP指令,它是早期ARM处理器使用的TEQ指令:

代替PSR转移操作。

在ARM920T中TEQP的功能是:

假如处理器工作在特许模式就将SPSR_移入CPSR,假如在用户模式什么也不做。

指令周期:

数据处理指令增加的周期数如下表4-6:

表4-6:

增加的循环时刻

注:

S、N和I分别定义为顺序(S-周期)、非顺序(N-周期)和内部(I-周期)。

汇编程序句法

∙MOV,MVN(单操作数指令).

{cond}{S}Rd,

∙CMP,CMN,TEQ,TST(无结果指令).

{cond}Rn,

∙AND,EOR,SUB,RSB,ADD,ADC,SBC,RSC,ORR,BIC

{cond}{S}Rd,Rn,

那个地点:

Rm{,}或,<#expression>

{cond}双字母条件助记符,见表4-4

{S}假如S表示(指CMP,CMN,TEQ,TST),置位条件码.

Rd,Rn和Rm寄存器号表达式

<#expression>假如使用,汇编程序将会产生一个移位的赶忙8位域来匹配表达式,假如不用会出错

#expression,或RRX(带扩展右移1位).

sASL,LSL,LSR,ASR,ROR.(ASL与LSL意义相同,它们的汇编码一样)

例:

ADDEQR2,R4,R5;假如Z标志置位,使R2=R4+R5

TEQSR4,#3;测试R4等于3(S是余外的,由汇编程序自动插入)

SUBR4,R5,R7,LSRR2;通过R2底部字节数逻辑右移R7,从R5中减去结果,并

;将答案放入R4

MOVPC,R14;从子程序返回

MOVSPC,R14;从中断返回,并从SPSR方式储存CPSR

★★4PSR转移(MRS、MSR):

该指令仅当条件为真时执行,参见表4-4。

MRS和MSR指令来自于数据处理操作的子集,并用TEQ、TST、CMN和CMP指令执行,不置位S标志,编码参见下图4-10。

这些指令承诺对CPSR和SPSR寄存器存取。

MRS指令承诺将CPSR或SPSR_的内容移入通用寄存器。

MSR指令承诺将通用寄存器的内容移入CPSR或SPSR_寄存器。

MSR指令也承诺将一个赶忙数或寄存器内容转移到CPSR或SPSR_寄存器的条件码标志(N、Z、C和V)而不改变操纵位。

在这种情形下,指定的寄存器内容的高4位或32位赶忙数被写入相应PSR(程序状态寄存器)的高4位。

★操作数限制:

在用户模式,CPSR的操纵位受爱护,因此只有CPSR的条件码标志能够改变。

在其它(特许)模式,整个CPSR均可改变。

软件决不能改变CPSR中T位的状态。

假如显现这种情形,处理器将进入无法预料的状态。

存取的SPSR寄存器取决于执行时的方式。

例如,当处理器在FIQ模式时,只有SPSR_fiq是可存取的。

不能将R15指定为源或目的寄存器。

在用户模式下不能存取SPSR,因为该寄存器不存在(用户不能使用)。

图4-10:

MRS、MSR指令格式

保留位:

ARM920T中只定义了PSR的12个位(N、Z、C、V、I、F、T和M[4:

0]),其余位保留为今后的处理器使用。

为确保ARM920T和今后处理器之间的最大兼容性,应当遵守下列原则:

当改变PSR的值时,应当爱护保留位;

当检查PSR状态时,程序不应当依靠保留位的特定值,因为今后的处理器可能会将它们认作1或0。

例:

下列顺序完成模式改变:

MRSR0,CPSR;复制CPSR

BICR0,R0,#0x1F;模式位清零,立即CPSR.M[4:

0]清零

ORRR0,R0,#new_mode;选择新模式

MSRCPSR,R0;回写修改后的CPSR

当目的只是简单地改变PSR中的条件方式码时,可直截了当将值写入标志位而不必阻碍操纵位。

下列指令对N、Z、C和V标志置位:

MSRCPSR_flg,#0xF0000000;对所有标志位置位,不考虑它们的过去状态(不阻碍操纵位)

不要试图向整个PSR写入8位赶忙数,因为这种操作不爱护保留位。

★指令循环周期:

PSR转移占用1S增加的周期,那个地点S定义为顺序(S-周期)。

汇编语言句法:

MRS–将PSR内容转移到寄存器

MRS{cond}Rd,

MSR–将寄存器内容转移到PSR

MSR{cond},Rm

MSR–只将寄存器内容转移到PSR标志位

MSR{cond},Rm

寄存器内容最重要的4位分别写入N、Z、C和V标志。

MSR–只将赶忙数转移到PSR标志位

MSR{cond},<#expression>

应当用符号表示分别写入N、Z、C和V标志的最重要4位的32位数值。

★关键:

{cond}双字母条件助记符,见表4-4

RdandRm除R15外的寄存器表达式

CPSR,CPSR_all,SPSR或SPSR_all.(CPSR和CPSR_all与SPSR和SPSR_all意义相同)

CPSR_flg或SPSR_flg

<#expression>假如使用,汇编程序将会产生一个移位的赶忙8位域来匹配表达式,假如不用会出错

例:

在用户模式,指令表现为:

MSRCPSR_all,Rm;CPSR[31:

28]<-Rm[31:

28]

MSRCPSR_flg,Rm;CPSR[31:

28]<-Rm[31:

28]

MSRCPSR_flg,#0xA0000000;CPSR[31:

28]<-0xA(setN,C;clearZ,V)

MRSRd,CPSR;Rd[31:

0]<-CPSR[31:

0]

在特许模式,指令表现为:

MSRCPSR_all,Rm;CPSR[31:

0]<-Rm[31:

0]

MSRCPSR_flg,Rm;CPSR[31:

28]<-Rm[31:

28]

MSRCPSR_flg,#0x50000000;CPSR[31:

28]<-0x5(setZ,V;clearN,C)

MSRSPSR_all,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 高考

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1