slide1 n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
嵌入式 ARM 内核的概述 PowerPoint Presentation
Download Presentation
嵌入式 ARM 内核的概述

Loading in 2 Seconds...

play fullscreen
1 / 48

嵌入式 ARM 内核的概述 - PowerPoint PPT Presentation


  • 137 Views
  • Uploaded on

嵌入式 ARM 内核的概述. 报告人:王黎明 Email : icesoar785160@163.com. 概述. ARM 公司不生产芯片,只出售芯片技术授权 ARM 技术 IP 核的微处理器--汽车、消费电子、工业控制、海量存储、网络、安保、无线等 目前世界前 5 大半导体公司全部使用了 ARM 的技术授权,前 10 大半导体有 9 家,全世界有 70 多家公司生产 ARM 芯片。. ARM 技术的应用领域. 无线设备 蓝牙技术 互联网 消费电子 汽车电子 海量存储 成像 安全产品 PDA 产品 手持仪器 工业控制. ARM 芯片特点.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about '嵌入式 ARM 内核的概述' - alijah


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
slide1

嵌入式ARM内核的概述

报告人:王黎明

Email:icesoar785160@163.com

slide2
概述
  • ARM公司不生产芯片,只出售芯片技术授权
  • ARM技术IP核的微处理器--汽车、消费电子、工业控制、海量存储、网络、安保、无线等
  • 目前世界前5大半导体公司全部使用了ARM的技术授权,前10大半导体有9家,全世界有70多家公司生产ARM芯片。
slide3
ARM技术的应用领域
  • 无线设备
  • 蓝牙技术
  • 互联网
  • 消费电子
  • 汽车电子
  • 海量存储
  • 成像
  • 安全产品
  • PDA产品
  • 手持仪器
  • 工业控制
slide4
ARM芯片特点
  • ARM芯片具有一般RISC体系结构的一般特点:

1)具有大量寄存器

2)绝大多数操作都在寄存器中进行,在内存和寄存器之间是通过load/store进行的

3)寻址方式简单

4)采用固定长度的指令结构

  • ARM还采用了别的结构

1)在同一条指令中包含算术逻辑处理单元和移位处理

2)使用地址自动增加(减少)来优化程序中循环处理

3)Load/Store指令可以批量传输数据

4)所有指令都可以根据前面指令的执行结构,决定是否执行

slide7
ARM处理器模式

除了用户模式之外其他6种处理器模式为特权模式,在这些模式下,程序可以访问所有的系统资源,也可以任意的进行处理器模式的切换。

slide8
ARM处理器模式
  • 处理器模式可以通过软件控制进行切换,也可以通过外部中断或异常处理过程进行切换
  • 大多数应用程序在用户模式下执行,当处理器工作在用户模式下时,正常执行的程序不能访问某些被保护的系统资源,也不能改变模式,除非异常(exception)产生。
  • 当应用程序发生异常中断时,处理器进入相应的异常模式,每种异常模式都有一组寄存器,供相应的异常处理程序使用,这样就保证在进入异常模式时,用户模式下的寄存器(保存了程序的运行状态)不被破坏。
  • 系统模式不是通过异常过程进入的,它和用户模式具有完全一样的寄存器
slide9
ARM寄存器
  • 31个通用寄存器

1)未备份寄存器R0~R7

2)备份寄存器R8~R14

其中R13在ARM中经常用作栈指针

R14又称为连接寄存器

3)程序计数器PC 即R15

  • 程序状态寄存器

CPSR当前程序状态寄存器

SPSR备份程序状态寄存器

slide14
ARM指令概要
  • ARM指令分为:

1) 跳转指令

2)数据处理指令

3)乘法指令

4)程序状态寄存器(PSR)访问指令

5)load/Store指令

6)信号量操作指令

7)异常中断产生指令

8)协处理器指令

slide15
ARM指令概要
  • 跳转指令

ARM可以实现程序的跳转:

1)跳转指令 2)直接向PC寄存器中写入目标在地址

ARM跳转指令可以向前后的32MB的地址空间跳转

1)B 跳转指令

2)BL 带返回的跳转指令

3)BLX 带返回和状态切换的跳转指令

4)BX 带状态切换的跳转指令

slide16
ARM指令概要
  • 数据处理指令

1)数据传送指令 如:MOV

2)算术逻辑指令 如:ADD,SUB,AND等

3)比较指令 如:TST

Example:

ADD Rd,Rx,Rx,LRL #n :Rd=Rx+Rx×2*n

slide17
ARM指令概要
  • 乘法指令

1)32位乘法指令,即乘法操作的结果为32位

2)64位乘法指令,即乘法操作的结果为64位

Example

MUL R0,R1,R2 ;R0=R1*R2

MULS R0,R1,R2 ;R0=R1*R2 ,同时设置CPSR中的N位和Z位

slide18
ARM指令概要
  • 状态寄存器访问指令

通常修改状态寄存器是通过“读取-修改-写回”的操作来实现的

程序不能通过直接修改CPSR中的T控制位直接将程序状态切换到Thumb状态,必须通过BX等指令完成程序状态的切换

1)MRS 状态寄存器到通用寄存器的传送指令

2)MSR通用寄存器到状态寄存器的传送指令

Example:

MRS R0,CPSR ;读取CPSR

BIC R0,R0,#0x1F ;修改,去除当前处理器模式

ORR R0,R0,#0x13 ;修改,设置特权模式

MSR CPSR_C, R0 ; 写回

slide19
ARM指令概要
  • Load/Store内存访问指令

1)load指令用于从内存中读取数据放入寄存器中

2)store 用于将寄存器中的数据保存到内存

3)LDM 批量内存字数据读取指令

4)STM 批量内存数据写入指令

Example:

LDR R0,[R1,#4] ;将内存单元R1+4中的字读取到R0寄存器中STR R0, [R1,#0x4] ;R0中的字数据保存到内存(R1+0x4)中

slide20
ARM指令概要
  • 异常中断产生指令

1)SWI 软中断指令 2)BKPT断点中断指令

SWI指令主要用于用户程序调用操作系统的系统服务。操作系统在SWI的异常中断处理程序中提供相关的系统服务,并定义了参数传递的方法

BKPT指令用于产生软件断点中断,软件调试可以使用该中断,当系统使用硬件调试部件时可以忽略该中断。

slide21
ARM指令概要
  • 信号量操作指令-主要用于实现信号量操作

1)SWP 交换指令 2)SWPB 字节交换指令

SWP <Rd>,<Rm>,[<Rn>]

将内存单元(该单元地址放在寄存器<Rn>中)的内容读取到一个寄存器<Rd>中,同时将另一个寄存器<Rm>的内容写到该内存单元中。

Example:

SWP R1,R2,[R3] ;将内存单元(R3)中字数据读取到R1寄存器 中,同时将R2寄存器的数据写入到内存单元(R3)中。

SWP R1,R1,[R2];将R1寄存器内容和内存单元(R2)的内容互换

slide22
ARM指令概要
  • ARM协处理器指令

1)CDP 协处理器数据操作指令

2)LDC协处理器数据读取指令

3)STC协处理器数据写入指令

4)MCR ARM寄存器到协处理器寄存器数据传送指令

5)MRC协处理器寄存器到ARM寄存器的数据传送指令

slide24
ARM汇编语言程序设计
  • 符号定义(Symbol definition)伪操作
  • 数据定义(Data definition)伪操作
  • 汇编控制(Assembly control)伪操作
  • 框架描述(Frame description)伪操作
  • 信息报告(Reporting)伪操作
  • 其他伪操作
slide25
ARM汇编语言程序设计
  • 符号定义伪操作

1)GBLA,GBLL,GBLS声明全局变量

2)LCLA,LCLL,LCLS 声明局部变量

3)SETA,SETL,SETS给变量赋值

4)RLIST 为通用寄存器列表定义名称

5)CN 为协处理器的寄存器定义名称

6)CP为协处理器定义名称

7)DN及SN 为VFP的寄存器定义名称

8)FN 为FPA的浮点寄存器定义名称

slide26
ARM汇编语言程序设计
  • 数据定义伪操作

1)LTORG:声明一个数据缓冲池的开始

2)MAP 定义一个结构化的内存表的首地址 ……^

3)FIELD 定义结构化的内存表中的一个数据域 ……#

4)SPACE分配一块内存单元,并用0初始化 ……%

5)DCD 分配一段字的内存单元,并用指定的数据初始化 ……&

6)DATA在代码中使用数据

7)DCDB,DCFD,DCFS,DCI,DCQ,DCW

slide27
ARM汇编语言程序设计
  • 汇编控制伪操作

1)IF,ELSE 及ENDIF

2)WHILE及WEND

3)MACRO及MEND

4)MEXIT

Example:

count SETA 1 ;设置循环计数变量count初始值为1

WHILE count<=4 ;

count SETA count+1

;code

WEND

slide28
ARM汇编语言程序设计
  • 信息报告伪操作

1)ASSERT:报告错误信息

2)INFO:汇编处理过程中报告诊断信息

3)OPT

4)TTL:在列表文件的每一页开头插入一个标题

5)SUBT:在列表文件的每一页开头插入一个子标题

Example:

INFO 0,“Version 1.0” ;在第二遍扫描时报告版本信息

IF endofdata<=label1

INFO 4, “Data overrun at label1” ;如果endofdata<=label1成立

;在第一遍扫描报告错误信息,

;并终止程序

slide29
ARM汇编语言程序设计
  • 其他伪操作

1)ALIGN:通过添加补丁字节使当前位置满足一定的对齐方式

2)AREA:用于定义一个代码段或者数据段

3)CODE16,CODE32:说明后面指令序列是Thumb还是ARM指令

4)ENTRY:指定程序的入口点

5)EXPORT或者GLOBAL:声明一个全局变量

6)GET及INCLUDE:将一个源文件包含到当前源文件中

Example:

AREA Example,CODE,READONLY

EXPORT DoAdd

DoAdd ADD R0,R0,R1

slide30
ARM汇编语言程序设计
  • ARM汇编语言的伪指令:

1)ADR:将基于PC的地址值或基于寄存器的地址值读到寄存器中

2)ADRL:将基于PC的地址值或基于寄存器的地址值读到寄存器中

只是比ADR可以读取更大范围的地址

3)LDR:将一个32位的常数或者一个地址读取到寄存器中

4)NOP:空操作伪指令

slide32
ARM中异常中断处理概述
  • ARM体系结构3种方式控制程序的执行流程

1)正常执行--ARM指令PC+4,Thumb指令PC+2

2)跳转指令--B,BL,BX,BLX

3)异常中断发生--保存中断的程序的执行现场,中断退出之后,恢复中断程序的执行现场

slide34
ARM中异常中断处理概述
  • 如果异常处理程序中使用它自己的物理寄存器之外的其他寄存器,异常中断处理程序必须保存和恢复这些寄存器
slide35
ARM中异常中断处理概述
  • ARM处理器对异常中断的相应过程

1)保存处理器当前状态、中断屏蔽位以及各条件标志位

2)设置当前状态寄存器CPSR中相应的位

3)将寄存器Ir_mode设置成返回地址

4)将程序计数值PC设置成该异常中断的中断向量地址,从而跳转到相应的异常中断处理程序处执行

Example----响应IRQ异常中断

R14_irq=address of next instruction to be executed + 4

SPSR_irq=CPSR

CPSR[4:0]=0b10010 ;进入IRQ异常中断模式

CPSR[5]=0 ;切换到ARM状态

CPSR[7]=1 ;禁止IRQ异常中断

if high vectors configured then

pc=0xFFFF0018

else

pc=0x00000018

slide36
ARM中异常中断处理概述
  • 从异常中断处理程序中返回

1)恢复被中断的程序的处理器状态,即将SPSR_mode寄存器的内容复制到当前程序状态寄存器CPSR中

2)返回发生异常中断的指令的下一条指令处执行,即将lr_mode寄存器的内容赋值程序计数器PC中

3)复位异常中断处理程序不需要返回

4)当异常处理程序发生时,程序计数器PC所指的位置对于不同的异常中断是不同的

slide37
ARM中异常中断处理概述
  • 在系统的启动代码中安装异常中断处理程序分两种情况:

1)地址0x0处为ROM,可以使用数据读取指令LDR直接向程序计数器PC中赋值,也可以直接使用跳转指令跳到异常中断处理程序

2)0x0处为RAM,中断向量表必须使用数据读取指令直接向PC中赋值的形式,比且必须将中断向量表从ROM中赋值到RAM中

Example:

MOV R8,#0

ADR R9, Vector_Init_Block

LDMIA R9!,{R0-R7} ;复制中断向量表

STMIA R8!,{R0-R7}

LDMIA R9!,{R0-R7} ;复制中断处理函数地址表

STMIA R8!,{R0-R7}

slide38
ARM中异常中断处理概述
  • 在C程序中安装异常中断处理程序

中断向量表中使用跳转指令的情况

1)读取中断处理程序的地址

2)从上一步得到的地址中减去该异常中断对应的中断向量的地址

3)从上一步得到的地址中减去8

4)将上步得到的地址右移2位

5)确保上步得到的地址高8位为0

6)将上步得到的地址与数据0xea00 0000做逻辑或,从而得到将要写到中断向量表中的跳转指令的编码

slide39
ARM中异常中断处理概述
  • Example:

其中参数routine是中断处理程序的地址,vector为中断向量地址

Unsigned Install_Handler (unsigned routine,unsigned *vector)

/*在中断向量表vector处,添加合适的跳转指令*/

/*该跳转指令跳转到中断处理程序routine处*/

/*程序返回原来的中断向量*/

{ unsigned vec ,oldvec;

vec=((routine-(unsigned)vector-0x08)>>2);

If (vec & 0xff000000)

{ printf( “ Installation of Handler failed”);

exit(1);}

vec=0xea000000 | vec;

oldvec = *vector;

*vector = vec

Return ( oldvec);

}

下面语句调用上面代码,在C程序中安装中断处理程序

Unsigned *irqvec = (unsigned *)0x18

Install_Handler ((unsigned) IRQHandler, irqvec);

slide40
ARM中异常中断处理概述
  • 中断向量表中使用数据读取指令的情况

1)读取中断处理程序的地址

2)从上步得到的地址中减去该异常中断对应的中断向量的地址

3)从上步得到的地址中减去8

4)将上步得到的地址与数据0xe59ff000作逻辑或,从而得到将要写到中断向量表中的数据读取指令的编码

5)将中断处理程序的地址放到相应的存储单元

slide41
ARM中异常中断处理概述
  • Example:

参数loction是一个存储单元,其中保存了中断处理程序的地址;vector为中断向量地址

unsigned Install_handler (Unsigned location, unsigned *vector)

/*在中断向量表中vector处,添上合适的指令LDR pc, [pc,#offset] */

/*该指令跳转到目标地址存放在存储单元‘location’中*/

/*函数返回原来的中断向量*/

{ unsigned vec, oldvec;

Vec = ((unsigned)location –(unsigned)vector-0x8) | 0xe59ff000;

Oldvec= *vector

*vector=vec;

Return (oldvec);

}

下面调用上面函数,在C程序中安装中断处理程序

Unsigned *irqvec = (unsigned *)0x18

Install_Handler ((unsigned) IRQHandler, irqvec);

slide42
ARM中异常中断处理概述
  • FIQ和IRQ异常中断处理程序

1)ARM提供FIQ和IRQ异常中断用于外部设备向CPU请求中断

2)FIQ异常中断的中断向量为0x1c,位于中断向量表的最后。这样FIQ异常中断处理程序可以直接放在地址0x1c开始的存储单元,这种安排省掉了中断向量表中的跳转指令,从而也就节省了中断响应的时间

3)与其他异常模式相比,FIQ异常模式还有额外的5个物理寄存器,这样在进入FIQ处理程序时可以不保存这5个寄存器,从而提高了FIQ异常中断的执行速度

slide44
ARM映象文件
  • ARM映象文件是一个层次结构的文件,其中包含了域(region)、输出段(output section)和输入段(input section)

1)一个映象文件由一个或者多个域组成

2)每个域包含一个或多个输出段

3)每个输出段包含一个或者多个输入段

4)各输入段包含了目标文件中代码和数据

输入段:代码,已经初始化的数据,未经初始化存储区域,内容初始化 成0的存储区域

一个输出段包含了一系列的具有相同的RO,RW和ZI属性的输入段

一个域包含的各输出段属性各不相同。

slide46
ARM映象文件
  • ARM映象文件各组成部分在存储系统中的地址有两种:

1)加载时地址 2)运行时地址

slide47
ARM映象文件
  • 通常一个映象文件中包含若干个域,各域又可包含若干的输出段,ARM是通过以下两个信息决定如何生成相应的映象文件。

1)分组信息:决定如何将各输入段组织成相应的输出段

和域。

2)定位信息:决定各域的存储空间中的起始地址

slide48

谢谢大家!

Email:icesoar785160@163.com