make 工具
DESCRIPTION
Make 工具. GNU Make 是一种常用的编译工具,通过它,程序员可以很方便地管理软件编译的内容、方式和时机,从而使程序员能够把主要精力集中在代码的编写上。 Make 自动判断源码中哪些部分有更新,重新编译这些文件并重新链接。 对于那些由许多源文件组成的大型软件项目来说,采用这种项目管理方法则可以极大地提高工作效率,让原本复杂繁琐的开发工作变得简单。. make 工具通过一个称为 makefile 的文件来完成并自动维护编译工作。 makefile 需要按照某种语法进行编写,其中说明了如何编译各个源文件并连接生成可执行文件,并定义了源文件之间的依赖关系。 - PowerPoint PPT PresentationTRANSCRIPT
ARMARMARMARM
1
Make 工具
GNU Make 是一种常用的编译工具,通过它,程序员可以很方便地管理软件编译的内容、方式和时机,从而使程序员能够把主要精力集中在代码的编写上。
Make 自动判断源码中哪些部分有更新,重新编译这些文件并重新链接。
对于那些由许多源文件组成的大型软件项目来说,采用这种项目管理方法则可以极大地提高工作效率,让原本复杂繁琐的开发工作变得简单。
ARMARMARMARM
2
make 工具通过一个称为 makefile 的文件来完成并自动维护编译工作。makefile 需要按照某种语法进行编写,其中说明了如何编译各个源文件并连接生成可执行文件,并定义了源文件之间的依赖关系。当修改了其中某个源文件时,如果其他源文件依赖于该文件,则也要重新编译所有依赖该文件的源文件。
ARMARMARMARM
3
基本规则 :目标、依赖关系、指令
target : dependency …… command ……
目标( target ):需要由 make 工具创建的项目,是指令( command )执行的结果文件(目标文件或执行文件),也可以是一个标签( Lable ),如make clean、make all 等。依赖( dependency ):要创建的项目依赖于哪些文件或目标。依赖条件顶格书写。 指令( command ):创建每个项目时 make 需要运行的命令(任意的 Shell命令) 。指令必须使用一个 TAB 符(制表位)开始进行书写。在指令部分定义的指令会在依赖文件的内容有所变更或找不到目标文件时被执行。
ARMARMARMARM
4
如果一个工程有三个源文件 write.c, read.c,main.c生成可执行程序 test 。 用于生成 test的Makefile 文件如下:test: main.o read.o write.o
gcc –o test main.o read.o write.o
main.o : io.h main.c gcc –c main.cread.o : io.h read.c gcc –c read.cwrite.o : io.h write.c gcc –c write.cclean: rm test main.o read.o write.o
-c :对源程序进行预处理、编译,产生目标文件,但不进行连接。-o < 文件名 > :定义输出的执行文件名为 < 文件名 > 。
ARMARMARMARM
5
clean 不是一个文件,它只不过是一个动作名字,有点像 C 语言中的 lable 一样,其冒号后什么也没有,那么,make 就不会自动去找文件的依赖性,也就不会自动执行其后所定义的命令。要执行其后的命令,就要在make 命令后明显得指出这个 lable 的名字。
例如,使用名为 clean 标签来进行清除,可以没有依赖关系部分,即执行命令
以此来清除所有的目标文件,以便重新编译。
相当于执行了:
[root@XSBase test]# make clean
[root@XSBase test]# rm test main.o read.o write.o
ARMARMARMARM
6
Makefile 依赖关系
使用 vi 编译器创建 Makefile 后,进行 make ,则生成执行文件test。Make 将按照 Makefile 中指定的依赖关系来依次执行。
[root@XSBase test]# make
ARMARMARMARM
7
宏和标签
为了 makefile 的易维护,在 makefile 中我们可以使用变量。 makefile 的变量也就是一个字符串,理解成C 语言中的宏可能会更好。 比如,我们声明一个能够表示 obj 文件的宏,宏名可为 objects,OBJECTS, objs,OBJS, obj或 OBJ 等。
可使用宏( Macro )功能和标签( Label )功能使Makefile 的创建更为灵活。宏起到以替换指定的内容使程序简单化的作用。宏必须要在 $(..) 里面使用。
ARMARMARMARM
8
例:利用宏来创建 Makefile 。在这里宏是 OBJECTS ,将 main.o 、 read.o 、 write.o 替换为 OBJECTS 来使用。
OBJECTS = main.o read.o write.otest: $(OBJECTS) #使用名为 OBJECTS 的宏来创建 Makefile.
gcc –o test $(OBJECTS)main.o: io.h main.c gcc –c main.cread.o: io.h read.c gcc –c read.cwrite.o: io.h write.c gcc –c write.cclean: rm test $(OBJECTS)
ARMARMARMARM
9
预定义的宏 (Pre-defined Macro) 执行 make -p 可看到 Make 中事先指定好的各个值(宏,环境参数等)。
宏的定义 涵义AS = as 指定汇编器,默认值为 as
ASFLAGS = 汇编程序( AS 指令)的选项设置CC = cc 或 CC =
gcc指定编译器( C),默认值为 cc
CFLAGS = C编译器( gcc 指令)的选项设置CXX = g++ 指定 C++编译器,默认值为 g++
CPPFLAGS = C++编译器( g++ 指令)的选项设置LD = ld 指定链接器LDFLAGS = ld 的选项设置
ARMARMARMARM
10
扩展名规则
扩展名规则( Suffix Rule )是根据文件的扩展名来进行适当的运算操作。例如, .c 一般指 C 源文件, .o 文件是目标文件。 .c 文件编译后应成为 .o 文件。
在这里出现名为 .SUFFIXES 的宏,这个宏自动处理Makefile 中需要慎重处理的文件的扩展名。
.SUFFIXES = .c .o
上面的例子对带有 .c和 .o 扩展名的文件按照扩展名规则来处理,自动操作使 .c 文件编译后生成 .o 文件。
ARMARMARMARM
11
宏名 涵义$* 没有扩展名的当前目标文件
$@ 当前目标文件的完整名称
$< 第一个依赖文件的名称,即比当前目标文件更新的第一个文件名
$?所有的依赖文件,以空格分开,这些依赖文件修改日期比目标的创建日期晚。比当前目标文件更新的所有文件名
$^ 所有的依赖文件,以空格分开,重复出现的名字只保留一个
$+所有的依赖文件,以空格分开,并以出现的先后为序,保持重复出现的名字不变
内部宏定义( Internal Macro )用于简化 Makefile 的写法
ARMARMARMARM
12
内部宏的用法
例子一: main.o : main.c io.h
gcc -c $*.c 说明: $* 是没有扩展名的当前目标文件,所以 $*.c 扩展为 main.c 。
例子二: test :
gcc -o $@ -c main.c 说明: $@ 是当前目标文件,相当于 test 。
ARMARMARMARM
13
例子三: .c.o :
gcc -c $< test: main.o
gcc -o $@ main.o
说明:如果源文件 .c 比目标文件 .o 更新,则 .c 文件会自动编译。即在 main.o 生成之后更新了main.c 的话,那么 main.c 就会被 $< 自动重新编译。
ARMARMARMARM
14
myprog:main.o display.o input.o
gcc main.o display.o input.o -o myprog
main.o:main.c commom.h
gcc -c main.c
display.o:display.c display.h common.h
gcc -c display.c
input.o:input.c input.h common.h
gcc -c input.c
clean:
rm -f myprog main.o display.o input.o
CC=gcc
OBJS=main.o display.o input.o
myprog:$(OBJS)
$(CC) $(OBJS) -o $@
main.o:main.c commom.h
$(CC) -c $<
display.o:display.c display.h common.h
$(CC) -c $<
input.o:input.c input.h common.h
$(CC) -c $<
clean:
rm -f myprog $(OBJS)
ARMARMARMARM
15
实验二 Makefile
使用命令编译程序使用预定义变量编译程序使用预定义变量对多个 .c 文件编译具体练习题目详见实验指导书
16
第第 55章 章 ARMARM及及 XScaleXScale介绍介绍
ARMARMARMARM
17
ARM微处理器概述
ARMARMARMARM
18
ARM(Advanced RISC Machines) ,既可以认为是一个公司的名字,也可以认为是对一类微处理器的通称,还可以认为是一种技术的名字。 1991年 ARM公司成立于英国剑桥,主要出售芯片设计技术的授权。目前,采用 ARM 技术知识产权 (IP)核的微处理器,即我们通常所说的 ARM微处理器,已遍及工业控制、消费类电子产品、通信系统、网络系统、无线系统等各类产品市场,基于 ARM技术的微处理器应用约占据了 32位 RISC微处理器 75% 以上的市场份额, ARM技术正在逐步渗入到我们生活的各个方面。
ARMARMARMARM
19
ARM公司是专门从事基于 RISC技术芯片设计开发的公司,作为知识产权供应商,它本身不直接从事芯片生产,靠转让设计许可,由合作公司生产各具特色的芯片,世界各大半导体生产商从 ARM公司购买其设计的ARM微处理器核,根据各自不同的应用领域,加入适当的外围电路,从而形成自己的 ARM微处理器芯片进入市场。 目前,全世界有几十家大的半导体公司都使用 ARM公司的授权,因此既使得 ARM技术获得更多的第三方工具、制造、软件的支持,又使整个系统成本降低,从而使产品更容易进入市场被消费者所接受,更具有竞争力。
ARMARMARMARM
20
ARM 处理器系列
下面所列的是 ARM微处理器的几个系列,以及其他厂商基于 ARM体系结构的处理器,这些处理器除了具有 ARM体系结构的共同特点以外,每一个系列的 ARM微处理器都有各自的特点和应用领域。
◆ ARM7 系列 ◆ ARM9 系列 ◆ ARM9E 系列 ◆ ARMl0E 系列 ◆ SecurCore 系列 ◆ Intel的 Xscale
◆ Intel的 StrongARM
ARMARMARMARM
21
Xscale 处理器
Xscale 处理器是基于 ARMv5TE体系结构的解决方案,是一款性能全、性价比高、功耗低的处理器。它支持 16 位的 Thumb 指令和 DSP 指令集 ,已使用在数字移动电话、个人数字助理和网络产品等场合。Xscale 处理器是 Intel 目前主要推广的一款ARM微处理器。
ARMARMARMARM
22
RISC体系结构
ARM 处理器实现加载/存储 (load/store)体系结构是典型的 RISC 处理器。只有加载和存储指令可以访问存储器。数据处理指令只对寄存器的内容进行操作。
ARMARMARMARM
23
精简指令集计算机 RISC (Reduced Instruction Set Computer) 结构的产生是相对于传统的复杂指令集计算机 CISC (Complex Instruction Set Computer) 结构而言的。传统的 CISC计算机的指令集随着计算机的发
展而引入了各种各样的复杂指令 , 使得指令集和为此要实现这些指令的计算机体系结构越来越复杂 ,已经不堪重负。
ARMARMARMARM
24
经过大量的研究和分析 , 发现在 CISC 的指令集中 , 各种指令的使用频度相差悬殊。
大概有 20% 的指令被反复使用 , 使用量约占整个程序的 80%; 而有 80%左右的指令则很少使用 , 其使用量约占整个程序的 20% 。这就是所谓的 20%—80% 定律。
ARMARMARMARM
25
RISC特点如下:指令规整、对称、简单。指令小于 100 条,基本寻
址方式有 2~3 种。单周期指令。指令字长度一致,单拍完成,便于流水操作 ;
ARM7 三级流水线:取指、译码、执行;ARM9 五级流水线;ARMl0 六级流水线。大量的寄存器。寄存器不少于 32 个。数据处理器的
指令只对寄存器的内容操作。只有加载/存储指令可以访问存储器。
ARMARMARMARM
26
几种常用的调试方法指令集模拟器
一种利用 PC机端的仿真开发软件模拟调试的方法。驻留监控软件
驻留监控程序运行在目标板上, PC机端调试软件可通过并口、串口、网口与之交互,以完成程序执行、存储器及寄存器读写、断点设置等任务JTAG仿真器
通过 ARM芯片的 JTAG边界扫描口与 ARM核进行通信,不占用目标板的资源,是目前使用最广泛的调试手段在线仿真器
使用仿真头代替目标板上的 CPU,可以完全仿真 ARM芯片的行为。但结构较复杂,价格昂贵,通常用于 ARM硬件开发中
ARMARMARMARM
27
什么是 JTAG?
JTAG是 Joint Test Action Group的缩写是IEEE1149.1标准
JTAG的建立使得集成电路固定在 PCB上,只通过边界扫描便可以被测试
在 ARM7TDMI处理器中,可以通过 JTAG直接控制ARM的内部总线, IO口等信息,从而达到调试的目的
ARMARMARMARM
28
ARMARMARMARM
29
ARM的 JTAG调试结构
ARMARMARMARM
30
ARM的 JTAG调试接口1、 ARM的 JTAG调试结构一个典型的 ARM 基于 JTAG调试结构如图所示。
Debug 主控端
协议转换器
调试目标机 处理器的开发系统
负责转换 Debug 主控端发出的高级 ARM调试指令为底层的和 ARM 内核通信的
运行ARM公司或第三方提供的调试软件的PC机
ARMARMARMARM
31
Debug 主控( Host )通常是运行有 ARM公司或者第三方提供的调式软件的 PC ,通常用的调试软件有ARM Debug for Window(ADW), Linux 下的 arm-elf-gdb 等。通过这些调试软件,可以发送高级的 ARM 指令,比如:设置断点,读写存储器,单步跟踪,全速运行等。
ARMARMARMARM
32
协议转换器( Protocol converter )负责转换 Debug主控端发出的高级 ARM调式命令为底层的和 ARM 内核通信的 JTAG 命令。
Debug 主控端和协议转换器之间的介质可以有很多种,比如:以太网, USB, RS-232 ,并口等。主控端和协议转换器之间的通信协议最典型的就是 ARM公司提供的 Angle 标准,也可以是第三方厂家自己定义的标准。
关于 Angle 的协议,请参考 ARM SDT和ADS, ajj公司的 OpenICE32,EPI公司的 Jeeni 等。
Debug 目标板就是指系统的调试对象。
ARMARMARMARM
33
JTAG 的典型信号
TMS: 测试模式选择( Test Mode Select),通过 TMS信号控制 JTAG状态机的状态TCK : JTAG的时钟信号TDI:数据输入信号TDO :数据输出信号nTRST: JTAG复位信号,复位 JTAG的状态机和内部的宏单元( Macrocell)
ARMARMARMARM
34
JTAG与 Angel
JTAG调试:协议转换器解释上位机传送过来的命令,通过 JTAG控制 ARM执行。Angel调试:协议转换器可以直接做为目标板的Firmware的一部分。直接执行从宿主机传送过来的调试命令;并回送相应的数据。Angel可以节省专门的 JTAG仿真器,但是,它需要软件,或者是嵌入式操作系统的支持,做不到完全的实时仿真。而 JTAG仿真是通过硬件和控制 ARM的 EmbeddedICE实现的,可以做到实时仿真。
ARMARMARMARM
35
ARM微处理器的体系结构
ARMARMARMARM
36
数据和指令类型
ARM 采用的是 32 位架构。ARM约定:
Byte: 8 bit
Halfword: 16 bits(2 bytes)
Word: 32 bits(4 bytes)
大部分 ARM core 提供:ARM 指令集 (32-bit)
Thumb 指令集 (16-bit)
ARMARMARMARM
37
数据类型
字( Word )字的长度为 32 位,而在 8位 /16 位处理器体系结构中,字的长度一般为 16 位,请注意区分。半字 (Half-Word)
半字的长度为 16 位,与 8位 /16 位处理器体系结构中字的长度一致。字节( Byte )各种处理器体系结构中,字节的长度均为 8 位。
ARMARMARMARM
38
ARM微处理器的工作状态
从编程的角度看 ,ARM微处理器的工作状态一般有两种 , 并可在两种状态之间切换 :
ARM状态,此时处理器执行 32 位的字对齐的ARM 指令; Thumb状态,此时处理器执行 16 位的、半字对齐的 Thumb 指令。
ARMARMARMARM
39
ARM 处理器在两种工作状态之间可以切换:进入 Thumb状态。
当操作数寄存器的状态位 ( 地址的最低位,即位 [0])为 1 时,执行 BX 指令进入 Thumb状态。如果处理器在Thumb状态进入异常,则当异常处理(IRQ、 FIQ、 Undef、 Abort 和 SWI)返回时,自动转换到 Thumb状态。
进入 ARM状态。 当操作数寄存器的状态位 (位 [0])为 0 时,执行 BX指令进入 ARM状态。处理器进行异常处理 (IRQ、 FIQ、Reset、 Undef、 Abort 和 SWI ARM状态执行 ) 。在此情况下,把 PC 放人异常模式链接寄存器中。从异常向量地址开始执行也可以进入 ARM状态。
ARMARMARMARM
40
处理器工作模式
ARM微处理器支持 7 个基本工作模式,分别为: 用户模式 (User):非特权模式,大部分任务执行在这种模式, ARM 处理器正常的程序执行状态。快速中断模式 (FIQ): 当一个高优先级 (fast) 中断产生时将会进入这种模式,用于高速数据传输或通道处理。 外部中断模式( IRQ ):当一个低优先级 (normal) 中断产生时将会进入这种模式,用于通用的中断处理。 管理模式( Supervisor ):当复位或软中断指令执行时将会进入这种模式,操作系统使用的保护模式,系统复位后的缺省模式。
ARMARMARMARM
41
中止模式 (Abort) :当存取异常时将会进入这种模式。
1. 指令中止模式:指令预取终止时进入该模式。 2. 数据访问中止模式:当数据访问终止时进入该模式,可用于虚拟存储及存储保护。
指令未定义模式 (Undef): 当执行未定义指令时会进入这种模式,支持硬件协处理器指令的软件仿真。系统模式 (System) :使用和 User模式相同寄存器集的特权模式,运行具有特权的操作系统任务。
ARMARMARMARM
42
ARM微处理器的运行模式可以通过软件改变,也可以通过外部中断或异常处理改变。
大多数的应用程序运行在用户模式下,当处理器运行在用户模式下时,某些被保护的系统资源是不能被访问的。
除用户模式以外,其余的所有 6 种模式称为非用户模式或特权模式 (Privileged Modes);
其中除去用户模式和系统模式以外的 5 种又称为异常模式 (Exception Modes) ,常用于处理中断或异常 , 以及需要访问受保护的系统资源等情况。
ARMARMARMARM
43
超级模式( Supervisor)
多种特权模式变化 用户程序的运行模式
复位后的缺省模式 主要完成各模式的堆栈设置,注意不要进入用户模式
一般为用户模式
User
处理器模式
处理器启动时的模式转换图
ARMARMARMARM
44
寄存器
ARM 的中央寄存器集是 16 个用户寄存器 R0 – R15 。这些寄存器均是32 位宽度, R0 – R12 没有其他特殊功能,寄存器 R13 – R15在 CPU 中有特殊功能。
R13 被用作堆栈指针 (stack pointer, SP) ,保存当前处理器模式的堆栈的栈顶。
R14 被称为链接寄存器 (link register, LR) ,保存调用子函数的返回地址。
R15 是程序计数器 (program counter, PC) 。其内容是处理器要取的下一条指令的地址。
ARMARMARMARM
45
ARM状态下的寄存器组织
程序状态寄存器:• CPSR
(current program status register)
当前的程序状态寄存器
• SPSR
(saved program status register)
备份的程序状态寄存器
ARMARMARMARM
46
用户的应用程序通常运行于用户模式,可访问寄存器组 R0 – R15 以及 CPSR 。为了响应诸如中断、存储器错误,或者软件中断指令之类的异常,处理器将改变运行模式。当改变模式时,寄存器 R0–R12 和 R15 的作用不变,但 R13( LR )和 R14( SP )被相应模式特有的寄存器替代。意味着每一个模式都有它自己的栈寄存器和链接寄存器。此外,快速中断模式( FIQ )有自己的 R7–R12 寄存器,不需要将寄存器入栈就可以快速进入 FIQ 中断。
ARMARMARMARM
47
除了用户模式外的所有模式都有一个额外的寄存器——“程序状态保存寄存器”( SPSR )。当应用程序在用户模式下运行时,如果发生了一个异常, CPU 将改变操作模式,并将 CPSR 的当前内容保存到 SPSR 。执行完异常代码后返回时, SPSR 的内容被恢复到 CPSR ,以允许应用程序继续正常执行。ARM7 CPU 有六种用于处理异常的操作模式。由阴影标明的寄存器是当操作模式改变时使能的寄存器。 SPSR 寄存器用于在改变模式时保存 CPSR 的副本。
ARMARMARMARM
48
ARM微处理器共有 37个 32 位寄存器。1 个用作 PC1 个用作 CPSR5 个用作 SPSR30 个为通用寄存器
当前处理器的模式决定着哪组寄存器可操作,任何模式都可以存取:
相应的 R0 – R12 子集相应的 R13(SP), R14(LR)相应的 R15(PC)相应的 CPSR
特权模式 (除 system模式 )还可存取:相应的 SPSR
6 个状态寄存器
ARMARMARMARM
49
ARM和 Thumb寄存器组织图解
ARMARMARMARM
50
Thumb状态下和 ARM状态下的 R0~R7 是相同的
Thumb状态下和 ARM状态下的 CPSR 和所有的 SPSR 是相同的
Thumb状态下的 SP 对应于 ARM状态下的 R13
Thumb状态下的 LR 对应于 ARM状态下的 R14
Thumb状态下的程序计数器对应于 ARM状态下的 R15
(1) Thumb状态下的寄存器组织与 ARM状态下的寄存器组织的关系
ARMARMARMARM
52
(2) 访问 THUMB状态下的高位寄存器 (Hi-registers)
在 Thumb状态下,高位寄存器 R8~R15 并不是标准寄存器集的一部分,但可使用汇编语言程序有限制地访问这些寄存器,将其用作快速的暂存器 .
使用带特殊变量的 MOV 指令 , 数据可以在低位寄存器和高位寄存器之间进行传送 , 高位寄存器的值可以使用CMP和 ADD 指令进行比较或加上低位寄存器中的值。
ARMARMARMARM
53
ARM体系结构包含一个当前程序状态寄存器 (CPSR)和 5 个备份的程序状态寄存器 (SPSRs) 。备份的程序状态寄存器用来进行异常处理,其功能包括:保存 ALU 中的当前操作信息。控制允许和禁止中断。设置处理器的运行模式。
程序状态寄存器每一位的安排如图所示.
(3) 程序状态寄存器
ARMARMARMARM
54
程序状态寄存器的格式
ARMARMARMARM
55
① 条件码标志 (Condition Code Flags)
N、 Z、 C、 V均为条件码标志位。它们的内容可被算术或逻辑运算的结果所改变,并且可以决定某条指令是否被执行。在 ARM状态下,绝大多数的指令都是有条件
执行的。在 Thumb状态下.仅有分支指令是有条件执行的。
ARMARMARMARM
57
运行模式位 M[4:0]:M0、M1 、 M2、M3、M4是模式位。这些位决定了处理器的运行模式。具体含义如下。
由表可知,并不是所有的运行模式位的组合都是有效的,其他的组合结果会导致处理器进入一个不可恢复的状态。
ARMARMARMARM
58
异常
异常 (exception) 由内部或外部源产生以引起处理器处理一个事件,即当正常的程序执行流程发生暂时的停止时。例如,外部中断或试图执行未定义指令都会引起异常。在处理异常之前,处理器状态必须保留,以便在异常处理程序完成后,原来的程序能够重新执行。
处理器允许多个异常同时发生,它们将会按固定的优先级进行处理。
ARM支持 7 种类型的异常。列出了异常的类型以及处理这些异常的处理器模式。异常出现后,强制从异常类型对应的固定存储器地址开始执行程序。这些固定的地址称为异常向量 (Exception Vectors) 。
ARMARMARMARM
59
ARM体系结构所支持的异常类型
ARMARMARMARM
60
异常向量表( Exception Vectors )
ARMARMARMARM
61
异常优先级( Exception Priorities )
ARMARMARMARM
62
高端向量
一些 ARM实现允许异常向量的定位由 32 位地址空间低端的正常地址范围 Ox00000000~Ox000000lC ,移到接近于地址空间高端的另一地址范围 0xFFFF0000~ 0xFFFF00lC 。
这些改变后的地址位置称为高端向量。
ARMARMARMARM
63
异常的进入和退出
只要正常的程序流程被暂时停止 , 则异常发生,例如服务外部的中断。
在异常被处理之前,必须保存当前的处理器状态,以便当处理程序完成后,原来的程序能重新开始。
如果几种异常同时发生,则对它们按固定的次序处理,可参考异常优先级。
ARMARMARMARM
64
如果异常是从 ARM状态进入,则保存在 LR寄存器中的是下一条指令的地址 ( 当前 PC+4或 PC+8) ,取决于异常。如果异常是从 Thumb状态进入,则保存在 LR寄存器中的是当前 PC 的偏移值。它能使程序在异常处理返回后从正确的位置重新开始。如果在异常发生时处理器是在 Thumb状态下,那么当用中断异常向量地址加载 PC 时,自动切换进入 ARM状态。
ARMARMARMARM
65
当异常产生时, ARM core :拷贝 CPSR到 SPSR_<mode>
设置适当的 CPSR 位:改变处理器状态进入 ARM态改变处理器模式进入相应的异常模式设置中断禁止位禁止相应中断 ( 如果需要 )
保存返回地址到 LR_<mode>
设置 PC 为相应的异常向量
ARMARMARMARM
66
返回时,异常处理需要:从 SPSR_<mode>恢复 CPSR
从 LR_<mode>恢复 PC
Note :这些操作只能在 ARM态执行
ARMARMARMARM
67
在完成异常处理后: 将 LR寄存器的值减去相应的偏移量 (偏移量根据异常
不同而不同 ) ,送到 PC 中; 将 SPSR 复制回 CPSR 中; 清除中断禁止位标志。另外,不需要显式切换回 Thumb状态,因为从 SPSR中将 CPSR T 位自动设置为异常前的原值。
ARMARMARMARM
68
Xscale 系统结构 PXA255 处理器结构与特性
XSBase255 开发平台介绍
ARMARMARMARM
69
Xscale 系统结构
ARMARMARMARM
70
Xscale 系统结构 ---- Xscale超级流水线
PXA255拥有 7级超级流水线,主要由主流水线、 MAC流水线和内存访问流水线组成。
ARMARMARMARM
71
Xscale 系统结构 ---- Xscale超级流水线
主流水线 F1/F2 指令读取 (给下一级的指令译码级提交下一条要执行的指令。是许多重要功能单元所处之地。)ID 指令译码 (接收 IFU 中的指令字节和发送到 RF寄存器文件 /移位级的译码寄存器信息)RF寄存器文件 /移位级(主要对寄存器文件单元或者 RFU 进行读写,为 ALU 操作、 MAC 操作、内存数据 Cache 的读取和协处理器接口提供相关数据)X1 执行级 (执行 ALU计算、条件指令执行和分支目标确定)
X2 执行级 (包含程序状态寄存器 PSRs 并选择哪些需要在 XWB级写入 RFU 中。)XWB 写回级(当 一条指令到达写回级时将写回寄存器文件单元RFU )
ARMARMARMARM
72
Xscale 系统结构 ---- Xscale超级流水线
MAC流水线 执行所有的乘 /累加指令。它执行 40 位累加寄存器 acc0 和能把指令值转化成普通的 ARM 寄存器值。 MAC 不是真正的一条流水线,指令的类型和资源决定它所需的周期数。不会同时两条指令出现在 MAC流水线上。当 MAC 在处理一条指令的时候其他的指令不允许进出到M1 中,除非原来的指令在下一个周期中处理完成。 MAC 单元执行开始于 M1 ,接受 2个 32 位操作数, N 个周期后完成并返回寄存器文件。
ARMARMARMARM
73
Xscale 系统结构 ---- Xscale超级流水线
内存访问流水线 内存流水线有 D1、 D2和 DWB3级构成,独立完成指令的装载和存储。在执行完 X1 后开始执行 D1级,计算有效的存 /取地址;在 D2级数据 cache 和小型数据 cache返回目的数据; DWB级进行填入缓冲器和写入缓冲器操作。
ARMARMARMARM
74
Xscale 系统结构 ---- Xscale乘 /累加MAC
Xscale 为了多媒体的应用,支持 SIMD.
比如 MIAPH 指令,它执行 2个 16x16 位乘法,然后与 40 位累加器相加,即 2个 32 位寄存器可以看作为 2对 16 位寄存器,先高 16 位相乘并与累加器进行相加;低 16 位也相乘后与累加器相加,这 2个结果相加后再送到寄存器文件中。
ARMARMARMARM
75
Xscale 系统结构 ---- 内存管理
提供内存访问保护和虚拟地址到物理地址的转换 支持指令 TLB
支持数据 TLB
(Translation Look-aside Buffer, TLB ,转换搜索缓存 )
ARMARMARMARM
76
Xscale 系统结构 ---- 指令 Cache
容量为 32K
32路组相联 每路由 8 个字 (32 字节 ) 和一位有效位
(思考:有几组 ?)
循环替换算法
ARMARMARMARM
77
Xscale 系统结构 ---- 指令 Cache
ARMARMARMARM
78
Xscale 系统结构 ---- 数据 Cache
容量 32KB
32路组相联 每路包含 32 字节和 1 个有效位 ,还包含 2个dirty 位 ,分别对应低 16 位字节和高 16 位字节 采用循环替换法
ARMARMARMARM
79
Xscale 系统结构 ---- 转移目标缓冲器 BTB
BTB 由有 128入口的直接映像 cache构成 每个入口由 TAG 分支地址、 DATA 数据目标地址和 2位历史位组成。
ARMARMARMARM
80
Xscale 系统结构 ---- 性能监视
提供 2个 32 位的性能计数器,可以分别对 2 个独立的事件同时监视。 另外还有 1个 32 位时钟计数器用来联合性能计数器记录内核时钟数。
当计算突发事件时计数器将监测到一个特定事件的发生;当测量持续事件时计数器将记录处理器时钟周期数当指定条件为真时事件发生。
所有的这些计数器都有对应的 IRQ和 FIQ资源。Xscale 的性能监视模块可以通过协处理器 CP14 的寄存器 0-3 进行控制。
ARMARMARMARM
81
Xscale 系统结构 ---- 电源管理
Xscale核合并电源管理和时钟管理来控制时钟和管理电源,它控制每一个运行模式的时钟频率和管理不同电源管理模式下的性能与功耗间的优化。
ARMARMARMARM
82
Xscale 系统结构 ---- 调试
通讯控制模块通过 JTAG 指令来建立目标机和宿主机的握手
硬件断点模块 有指令和数据断点寄存器,由协处理器控制
跟踪缓冲模块 对程序历史记录以实现恢复异常和跳转
代码下载模块 代码下载到 I-Cache,调试代理程序实现读 / 写
ARMARMARMARM
83
PXA255 处理器结构与特性
ARMARMARMARM
84
PXA255 处理器结构与特性
PXA255 除了采用 Xscale 内核,还具有以下特点: 内核工作频率: 200MHz、 300MHz和 400MHz
系统存储器接口 时钟和电源控制器 DMA控制器 LCD控制器 系统集成模块 串行通信口 多媒体通信口
ARMARMARMARM
85
PXA255 处理器结构与特性
时钟模块:控制系统每一个模块的时钟频率优化计算处理和电源管理的功能。有三个寄存器: 核时钟设置寄存器 CCCR L :晶振频率至存储器频率倍因子,可以设置成
27、 32、 36、 40或 45 。 M :存储器频率至运行方式频率倍因子,可以设置成 1或 2 。 N :运行方式频率至快速方式频率因子,可以设置成
1.0、 1.5、 2.0或 3.0 。
时钟允许寄存器 CKEN
振荡器设置寄存器 OSCC
ARMARMARMARM
86
PXA255 处理器结构与特性
电源管理模块 运行模式 快速模式 ( CCCR的 N )空闲模式 空闲模式没有改变时钟的产生。应用程序选择 PWRMODE寄存器的M段来选择空闲方式。
睡眠模式 许多处理器内部单元功能关闭,实时时钟和电源管理模块继续工作
。通过使用 PWRMODE寄存器来进入睡眠模式。33MHz空闲模式 在 33MHz空闲模式下其他所有的外设单元都不能使用包括
SDRAM、 LCD和 DMA控制器。
ARMARMARMARM
87
PXA255 处理器结构与特性
GPIO口 PXA255 可以使用和控制的 GPIO 管脚有 81 个。使用 27 个寄存器可以配置这些 GPIO 管脚的方向( 进或出 ) 、管脚功能、管脚的状态 ( 输出 ) 、管脚的高低电平检测 ( 输入 ) 和选择第二功能。许多 GPIO 管脚的第二功能已经被处理器或外设配置使用。
ARMARMARMARM
88
PXA255 处理器结构与特性
中断控制器
ARMARMARMARM
89
PXA255 处理器结构与特性
实时时钟 RTC
使用实时时钟可以配置成频率很广的周期时钟信号,通常 RTC设置 1Hz信号输出用来当作系统时间的基准。 实时时钟芯片是 RTC4513
ARMARMARMARM
90
PXA255 处理器结构与特性
DMA控制器 (DMAC )DMAC有 16 个通道,从通道 0 到通道 15
在嵌入式 Linux中 DMA 在设备驱动上常常要用到。 DMA控制器对内存的访问和 CPU 的运行完全互斥,因此在DMA控制器访问内存时 CPU 不访问内存。 DMA控制器在传输数据上要比 CPU快得多,它的操作完全由硬件驱动,只要一个时钟周期就可以完成一个字节的传输。在 DMA控制器暂时占住了内存, CPU仍能取指令,而许多指令的执行是不要求访问内存的,这样 CPU和 DMA控制器之间有了一定的并行度,提高的综合效率。即使 CPU 要访问内存也可以在数据 cache 中读取。
ARMARMARMARM
91
XSBase255 的配件
ARMARMARMARM
92
XSBase255硬件介绍
ARMARMARMARM
93
XSBase255硬件介绍
ARMARMARMARM
94
XSBase255 Linux BSP介绍
ARMARMARMARM
95
XSBase255 Linux光盘内容
ARMARMARMARM
96
Xsbase255 开发系统 ----硬件资源
项目 描述处理器 Intel XScale PXA255 400MHz
SDRAM Samsung 64Mbyte
Flash Intel strata flash 32MByte
以太网 CS8900A 10BaseT
声卡 AC’97 Stereo audio
显示 LG TFT LCD 6.4”( 640 * 480)
触摸屏 ADS7843 touch screen
USB Host 2 Slot
USB Slave 1 Slot
PCMCIA 1 Slot
实时时钟 Real time clock RTC4513
红外 HDSL3600
CF 1 Slot
MMC 1 Slot
ARMARMARMARM
97
Xsbase255 开发系统 ----硬件资源
存储器接口主要可以分成 3类 :SDRAM SDRAM有 4块区域静态 FLASH静态存储器有 6块卡存储器卡存储器有 2块。
ARMARMARMARM
98
Xsbase255 开发系统 ----硬件资源
LCD 接口 PXA255 处理器内置的 LCD控制器支持被动 (DSTN) 或主动 (TFT)模式的显示器,还支持单色或多种的彩色像点格式,支持单屏或双屏显示;被动彩色方式有 65536 种颜色 ( 使用16位 TMED抖动算法 ) ,主动彩色方式有 65536 种颜色(16 位,绕过调色板 ) ,显示可以达到 1024x1024 ,推荐使用最大值 800x600;内置 2 个专用 DMA 通道。Xsbase255 系统使用的 LCD是 6.4’TFT 的彩色显示屏,分辨率是 640x480 。
ARMARMARMARM
99
Xsbase255 开发系统 ----硬件资源
以太网接口 Xsbase255 开发系统采用 Cirrus Logic公司CS8900A 以太网芯片,是符合 IEEE802.3协议的工业标准架构总线的一款低成本的以太网芯片。它高度集成了一些常用的部件比如:片内的RAM、 10BASE-T传输和接受过滤器和 ISA总线接口等 。
ARMARMARMARM
100
Xsbase255 开发系统 ----硬件资源
音频接口 PXA255 处理器包含 AC’97控制单元,支持音频控制器 (AC-link) ,能通过串口传输数字音频、调制调解器、音频输入、控制寄存器和状态信息等。因为 PXA255 处理器内置了 AC’97控制器,需要外扩一个音频解码芯片。Xsbase255外扩了 Cirrus Logic CS4299 用作音频解码器。
ARMARMARMARM
101
Xsbase255 开发系统 ----硬件资源
实时时钟 RTC
当关闭 Xsbase255 系统电源, RTC4513 可以通过一个电池来保持当前的时间。系统外扩了实时时钟芯片 RTC4513 和一个纽扣电池组成 RTC电路 。
ARMARMARMARM
102
Xsbase255 开发系统 ----硬件资源
串口 Xsbase 开发系统提供 1 个全功能的 (FF, Full Function) 串口, 1 个蓝牙串口 (BT,Bluetooth)和1 个标准 UART(红外接口 ) 。它们使用 PXA255中的第二功能 GPIO引脚。全功能串口支持Modem控制功能,其最高波特率为 230.4Kb/s;蓝牙串口是一个高速 UART ,最高波特率为921.6Kb/s ,可连接蓝牙模块 。
ARMARMARMARM
103
Xsbase255 开发系统 ----硬件资源
USB 接口 Xsbase255 开发系统有 1个 USB-Client 接口和 2个 USB-Host 接口 ( 其中一个是 mini USB 接口 ) 。 USB-Client 接口作为 USB 的从设备,一般与主设备如宿主机连接,用于下载数据和程序,也可以用作 USB网口来使用。 USB-Client控制器 UDC 集成在 PXA255处理器内部。
USB-Host 接口作为 USB 的主设备,用于连接 USB外设,例如 U盘、鼠标、键盘和摄像头等。
ARMARMARMARM
104
Xsbase255 开发系统 ----硬件资源
扩展接口 1个 PCMCIA 接口1个 CF卡接口1个MMC卡接口120pin 的扩展接口。
ARMARMARMARM
105
PCMCIA
通常,台式机和服务器等用的网卡均不支持 PCMCIA 标准, PCMCIA 是专门用在笔记本或 PDA 、数码相机等便携设备上的一种接口规范(总线结构)。也就是笔记本网卡通常都支持 PCMCIA 规范,而台式机网卡则不支持此规范。 PCMCIA 是英文“ PERSONAL COMPUTER MEMORY CARD INTERNATIONAL ASSOCIATION” 的缩写, PCMCIA定义了三种不同型式的卡,它们的长宽都是 85.6×54mm ,只是在厚度方面有所不同。 Type I 是最早的 PC卡,厚 3.3mm 主要用于 RAM和 ROM; Type II 将厚度增至 5.5mm 适用范围也大大扩展包括了大多数的 modem (调制解调器)和 faxmodem(传真调制解调器), LAN 适配器和其它电气设备; Type III则进一步增大厚度到 10.5mm 这种 PC卡主要用于旋转式的存储设备(例如硬盘)。 PCMCIA总线分为两类,一类为 16 位的 PCMCIA ,另一类为 32 位的 CardBus 。
ARMARMARMARM
106
CF卡
CF卡( Compact Flash )是 1994年由 SanDisk最先推出的。CF卡重量只有 14g ,仅纸板火柴般大小( 43mm x 36m x m3.3mm ),是一种固态产品,也就是工作时没有运动部件。 CF卡采用闪存( flash )技术,是一种稳定的存储解决方案,不需要电池来维持其中存储的数据。对所保存的数据来说,CF卡比传统的磁盘驱动器安全性和保护性都更高;比传统的磁盘驱动器及Ⅲ型 PC卡的可靠性高 5到 10倍,而且 CF卡的用电量仅为小型磁盘驱动器的 5% 。这些优异的条件使得大多数数码相机选择 CF卡作为其首选存储介质。
ARMARMARMARM
107
MMC
MMC(MultiMedia Card )卡由西门子公司和首推 CF的SanDisk于 1997年推出。 1998年 1月十四家公司联合成立了MMC协会( MultiMedia Card Association 简称 MMCA ),现在已经有超过 84 个成员。 MMC 的发展目标主要是针对数码影像、音乐、手机、 PDA 、电子书、玩具等产品,是把存贮单元和控制器一同做到了卡上,智能的控制器使得 MMC保证兼容性和灵活性。 MMC 被设计作为一种低成本的数据平台和通讯介质,它的接口设计非常简单:只有 7针!接口成本低于 0.5美元,相比之下SmartMedia和Memory Stick 的接口成本都要高于 1美元。在接口中,电源供应是 3针,而数据操作只用 3针的串行总线即可( SPI模式再加上 1针用于选择芯片)。MMC 的操作电压为 2.7伏到 3.6伏,写 /读电流只有 27mA和23mA ,功耗很低。
ARMARMARMARM
108
Xsbase255 开发系统 ---- 软件资源
Linux( Linux2.4.18 )
FLASH (32M 32bit)
Root Filesystem
Kernel Image
Reserved
Bootloader
0x0200 0000
0x001C 0000
0x000C 0000
0x0004 0000
0x0000 0000
30 MByte
1MByte
512KByte
256KByte