ARM应用系统开发详解(入门资料)
2015-09-28
第1章ARM微处理器概述
本章简介ARM微处理器的一些基本概念、应用领域及特点,引导读者进入ARM技术的殿堂。
本章主要内容:
- ARM及相关技术简介
- ARM微处理器的应用领域及特点
- ARM微处理器系列
- ARM微处理器的体系结构
- ARM微处理器的应用选型
1.1 ARM-ADVANCED
ARM(ADVANCED
1991
ARM公司是专门从事基于RISC技术芯片设计开发的公司,作为知识产权供应商,本身不直接从 事芯片生产,靠转让设计许可由合作公司生产各具特色的芯片,世界各大开云棋牌官网在线客服生产商从ARM公司购买其设计的ARM微处理器核,根据各自不同的应用领域,加 入适当的外围电路,从而形成自己的ARM微处理器芯片进入市场。目前,全世界有几十家大的开云棋牌官网在线客服公司都使用ARM公司的授权,因此既使得ARM技术获得更 多的第三方工具、制造、软件的支持,又使整个系统成本降低,使产品更容易进入市场被消费者所接受,更具有竞争力。
1.2 ARM微处理器的应用领域及特点
1.2.1 ARM微处理器的应用领域
到目前为止,ARM微处理器及技术的应用几乎已经深入到各个领域:
1、工业控制领域:作为32的RISC架构,基于ARM核的微控制器芯片不但占据了高端微控制器市场的大部分市场份额,同时也逐渐向低端微控制器应用领域扩展,ARM微控制器的低功耗、高性价比,向传统的8位/16位微控制器提出了挑战。
2、无线通讯领域:目前已有超过85%的无线通讯设备采用了ARM技术, ARM以其高性能和低成本,在该领域的地位日益巩固。
3、网络应用:随着宽带技术的推广,采用ARM技术的ADSL
4、消费类电子产品:ARM技术在目前流行的数字音频播放器、数字机顶盒和游戏机中得到广泛采用。
5、成像和安全产品:现在流行的数码相机和打印机中绝大部分采用ARM技术。手机中的32位SIM智能卡也采用了ARM技术。
除此以外,ARM微处理器及技术还应用到许多不同的领域,并会在将来取得更加广泛的应用。
1.2.2 ARM微处理器的特点
采用RISC架构的ARM微处理器一般具有如下特点:
1、体积小、低功耗、低成本、高性能;
2、支持Thumb(16位)/ARM(32位)双指令集,能很好的兼容8位/16位器件;
3、大量使用寄存器,指令执行速度更快;
4、大多数数据操作都在寄存器中完成;
5、寻址方式灵活简单,执行效率高;
6、指令长度固定;
1.3 ARM微处理器系列
ARM微处理器目前包括下面几个系列,以及其它厂商基于ARM体系结构的处理器,除了具有ARM体系结构的共同特点以外,每一个系列的ARM微处理器都有各自的特点和应用领域。
- ARM7系列
- ARM9系列
- ARM9E系列
- ARM10E系列
- SecurCore系列
- Inter的Xscale
- Inter的StrongARM
其中,ARM7、ARM9、ARM9E和ARM10为4个通用处理器系列,每一个系列提供一套相对独特的性能来满足不同应用领域的需求。SecurCore系列专门为安全要求较高的应用而设计。
以下我们来详细了解一下各种处理器的特点及应用领域。
1.3.1 ARM7微处理器系列
ARM7系列微处理器为低功耗的32位RISC处理器,最适合用于对价位和功耗要求较高的消费类应用。ARM7微处理器系列具有如下特点:
- 具有嵌入式ICE-RT逻辑,调试开发方便。
- 极低的功耗,适合对功耗要求较高的应用,如便携式产品。
- 能够提供0.9MIPS/MHz的三级流水线结构。
- 代码密度高并兼容16位的Thumb指令集。
- 对操作系统的支持广泛,包括Windows CE、Linux、Palm OS等。
- 指令系统与ARM9系列、ARM9E系列和ARM10E系列兼容,便于用户的产品升级换代。
- 主频最高可达130MIPS,高速的运算处理能力能胜任绝大多数的复杂应用。
ARM7系列微处理器的主要应用领域为:工业控制、Internet设备、网络和调制解调器设备、移动电话等多种多媒体和嵌入式应用。
ARM7系列微处理器包括如下几种类型的核:ARM7TDMI、ARM7TDMI-S、
ARM720T、ARM7EJ。其中,ARM7TMDI是目前使用最广泛的32位嵌入式RISC处理器,属低端ARM处理器核。TDMI的基本含义为:
T: 支持16为压缩指令集Thumb;
D: 支持片上Debug;
M:内嵌硬件乘法器(Multiplier)
I: 嵌入式ICE,支持片上断点和调试点;
本书所介绍的SAMSUNG
1.3.2 ARM9微处理器系列
ARM9系列微处理器在高性能和低功耗特性方面提供最佳的性能。具有以下特点:
- 5级整数流水线,指令执行效率更高。
- 提供1.1MIPS/MHz的哈佛结构。
- 支持32位ARM指令集和16位Thumb指令集。
- 支持32位的高速AMBA总线接口。
- 全性能的MMU,支持Windows CE、Linux、Palm OS等多种主流嵌入式操作系统。
- MPU支持实时操作系统。
- 支持数据Cache和指令Cache,具有更高的指令和数据处理能力。
ARM9系列微处理器主要应用于无线设备、仪器仪表、安全系统、机顶盒、高端打印机、数字照相机和数字摄像机等。
ARM9系列微处理器包含ARM920T、ARM922T和ARM940T三种类型,以适用于不同的应用场合。
1.3.3 ARM9E微处理器系列
ARM9E系列微处理器为可综合处理器,使用单一的处理器内核提供了微控制器、DSP、Java应用系统的解决方案,极大的减少了芯片的面积和系统的复杂程度。ARM9E系列微处理器提供了增强的DSP处理能力,很适合于那些需要同时使用DSP和微控制器的应用场合。
ARM9E系列微处理器的主要特点如下:
- 支持DSP指令集,适合于需要高速数字信号处理的场合。
- 5级整数流水线,指令执行效率更高。
- 支持32位ARM指令集和16位Thumb指令集。
- 支持32位的高速AMBA总线接口。
- 支持VFP9浮点处理协处理器。
- 全性能的MMU,支持Windows CE、Linux、Palm OS等多种主流嵌入式操作系统。
- MPU支持实时操作系统。
- 支持数据Cache和指令Cache,具有更高的指令和数据处理能力。
- 主频最高可达300MIPS。
ARM9系列微处理器主要应用于下一代无线设备、数字消费品、成像设备、工业控制、存储设备和网络设备等领域。
ARM9E系列微处理器包含ARM926EJ-S、ARM946E-S和ARM966E-S三种类型,以适用于不同的应用场合。
1.3.4 ARM10E微处理器系列
ARM10E系列微处理器具有高性能、低功耗的特点,由于采用了新的体系结构,与同等的ARM9器件相比较,在同样的时钟频率下,性能提高了近50%,同时,ARM10E系列微处理器采用了两种先进的节能方式,使其功耗极低。
ARM10E系列微处理器的主要特点如下:
- 支持DSP指令集,适合于需要高速数字信号处理的场合。
- 6级整数流水线,指令执行效率更高。
- 支持32位ARM指令集和16位Thumb指令集。
- 支持32位的高速AMBA总线接口。
- 支持VFP10浮点处理协处理器。
- 全性能的MMU,支持Windows CE、Linux、Palm OS等多种主流嵌入式操作系统。
- 支持数据Cache和指令Cache,具有更高的指令和数据处理能力
- 主频最高可达400MIPS。
- 内嵌并行读/写操作部件。
ARM10E系列微处理器主要应用于下一代无线设备、数字消费品、成像设备、工业控制、通信和信息系统等领域。
ARM10E系列微处理器包含ARM1020E、ARM1022E和ARM1026EJ-S三种类型,以适用于不同的应用场合。
1.3.5 SecurCore微处理器系列
SecurCore系列微处理器专为安全需要而设计,提供了完善的32位RISC技术的安全解决方案,因此,SecurCore系列微处理器除了具有ARM体系结构的低功耗、高性能的特点外,还具有其独特的优势,即提供
第2章 ARM微处理器的编程模型
本章简介ARM微处理器编程模型的一些基本概念,包括工作状态切换、数据的存储格式、处理器异常等,通过对本章的阅读,希望读者能了解ARM微处理器的基本工作原理和一些与程序设计相关的基本技术细节,为以后的程序设计打下基础。
本章的主要内容:
- ARM微处理器的工作状态
- ARM体系结构的存储器格式
- ARM微处理器的工作模式
- ARM体系结构的寄存器组织
- ARM微处理器的异常状态
在开始本章之前,首先对字(Word)、半字(Half-Word)、字节(Byte)的概念作一个说明:
字(Word):在ARM体系结构中,字的长度为32位,而在8位/16位处理器体系结构中,字的长度一般为16位,请读者在阅读时注意区分。
半字(Half-Word):在ARM体系结构中,半字的长度为16位,与8位/16位处理器体系结构中字的长度一致。
字节(Byte):在ARM体系结构和8位/16位处理器体系结构中,字节的长度均为8位。
2.1 ARM微处理器的工作状态
从编程的角度看,ARM微处理器的工作状态一般有两种,并可在两种状态之间切换:
- 第一种为ARM状态,此时处理器执行32位的字对齐的ARM指令;
- 第二种为Thumb状态,此时处理器执行16位的、半字对齐的Thumb指令。
当 ARM微处理器执行32位的ARM指令集时,工作在ARM状态;当ARM微处理器执行16位的Thumb指令集时,工作在Thumb状态。在程序的执行过 程中,微处理器可以随时在两种工作状态之间切换,并且,处理器工作状态的转变并不影响处理器的工作模式和相应寄存器中的内容。
状态切换方法:
ARM指令集和Thumb指令集均有切换处理器状态的指令,并可在两种工作状态之间切换,但ARM微处理器在开始执行代码时,应该处于ARM状态。
进 入Thumb状态:当操作数寄存器的状态位(位0)为1时,可以采用执行BX指令的方法,使微处理器从ARM状态切换到Thumb状态。此外,当处理器处 于Thumb状态时发生异常(如IRQ、FIQ、Undef、Abort、SWI等),则异常处理返回时,自动切换到Thumb状态。
进入ARM状态:当操作数寄存器的状态位为0时,执行BX指令时可以使微处理器从Thumb状态切换到ARM状态。此外,在处理器进行异常处理时,把PC指针放入异常模式链接寄存器中,并从异常向量地址开始执行程序,也可以使处理器切换到ARM状态。
2.2 ARM体系结构的存储器格式
ARM体系结构将存储器看作是从零地址开始的字节的线性组合。从零字节到三字节放置第一个存储的字数据,从第四个字节到第七个字节放置第二个存储的字数据,依次排列。作为32位的微处理器,ARM体系结构所支持的最大寻址空间为4GB(232字节)。
ARM体系结构可以用两种方法存储字数据,称之为大端格式和小端格式,具体说明如下:
大端格式:
在这种格式中,字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中,如图2.1所示:
图2.1 以大端格式存储字数据
小端格式:
与大端存储格式相反,在小端存储格式中,低地址中存放的是字数据的低字节,高地址存放的是字数据的高字节。如图2.2所示:
图2. 2 以小端格式存储字数据
2.3 指令长度及数据类型
ARM微处理器的指令长度可以是32位(在ARM状态下),也可以为16位(在Thumb状态下)。
ARM微处理器中支持字节(8位)、半字(16位)、字(32位)三种数据类型,其中,字需要4字节对齐(地址的低两位为0)、半字需要2字节对齐(地址的最低位为0)。
2.4 处理器模式
ARM微处理器支持7种运行模式,分别为:
─ 用户模式(usr): ARM处理器正常的程序执行状态
─ 快速中断模式(fiq): 用于高速数据传输或通道处理
─ 外部中断模式(irq): 用于通用的中断处理
─ 管理模式(svc): 操作系统使用的保护模式
─ 数据访问终止模式(abt): 当数据或指令预取终止时进入该模式,可用于虚拟存储及存储保护。
─ 系统模式(sys): 运行具有特权的操作系统任务。
─ 未定义指令中止模式(und):当未定义的指令执行时进入该模式,可用于支持硬件协处理器的软件仿真。
ARM微处理器的运行模式可以通过软件改变,也可以通过外部中断或异常处理改变。
大多数的应用程序运行在用户模式下,当处理器运行在用户模式下时,某些被保护的系统资源是不能被访问的。
除用户模式以外,其余的所有6种模式称之为非用户模式,或特权模式(Privileged Modes);其中除去用户模式和系统模式以外的5种又称为异常模式(Exception Modes),常用于处理中断或异常,以及需要访问受保护的系统资源等情况。
2.5 寄存器组织
ARM 微处理器共有37个32位寄存器,其中31个为通用寄存器,6个为状态寄存器。但是这些寄存器不能被同时访问,具体哪些寄存器是可编程访问的,取决微处理 器的工作状态及具体的运行模式。但在任何时候,通用寄存器R14~R0、程序计数器PC、一个或两个状态寄存器都是可访问的。
2.5.1 ARM状态下的寄存器组织
通用寄存器:
通用寄存器包括R0~R15,可以分为三类:
─ 未分组寄存器R0~R7;
─ 分组寄存器R8~R14
─ 程序计数器PC(R15)
未分组寄存器R0~R7:
在所有的运行模式下,未分组寄存器都指向同一个物理寄存器,他们未被系统用作特殊的用途,因此,在中断或异常处理进行运行模式转换时,由于不同的处理器运行模式均使用相同的物理寄存器,可能会造成寄存器中数据的破坏,这一点在进行程序设计时应引起注意。
分组寄存器R8~R14
对于分组寄存器,他们每一次所访问的物理寄存器与处理器当前的运行模式有关。
对于R8~R12来说,每个寄存器对应两个不同的物理寄存器,当使用fiq模式时,访问寄存器R8_fiq~R12_fiq;当使用除fiq模式以外的其他模式时,访问寄存器R8_usr~R12_usr。
对于R13、R14来说,每个寄存器对应6个不同的物理寄存器,其中的一个是用户模式与系统模式共用,另外5个物理寄存器对应于其他5种不同的运行模式。
采用以下的记号来区分不同的物理寄存器:
R13_
R14_
其中,mode为以下几种模式之一:usr、fiq、irq、svc、abt、und。
寄存器R13在ARM指令中常用作堆栈指针,但这只是一种习惯用法,用户也可使用其他的寄存器作为堆栈指针。而在Thumb指令集中,某些指令强制性的要求使用R13作为堆栈指针。
由 于处理器的每种运行模式均有自己独立的物理寄存器R13,在用户应用程序的初始化部分,一般都要初始化每种模式下的R13,使其指向该运行模式的栈空间, 这样,当程序的运行进入异常模式时,可以将需要保护的寄存器放入R13所指向的堆栈,而当程序从异常模式返回时,则从对应的堆栈中恢复,采用这种方式可以 保证异常发生后程序的正常执行。
R14也称作子程序连接寄存器(Subroutine LINK
寄存器R14常用在如下的情况:
在每一种运行模式下,都可用R14保存子程序的返回地址,当用BL或BLX指令调用子程序时,将PC的当前值拷贝给R14,执行完子程序后,又将R14的值拷贝回PC,即可完成子程序的调用返回。以上的描述可用指令完成:
1、执行以下任意一条指令:
MOV PC,LR
BX LR
2、在子程序入口处使用以下指令将R14存入堆栈:
STMFD SP!,{
对应的,使用以下指令可以完成子程序返回:
LDMFD SP!,{
R14也可作为通用寄存器。
程序计数器PC(R15)
寄 存器R15用作程序计数器(PC)。在ARM状态下,位[1:0]为0,位[31:2]用于保存PC;在Thumb状态下,位[0]为0,位[31:1] 用于保存PC;虽然可以用作通用寄存器,但是有一些指令在使用R15时有一些特殊限制,若不注意,执行的结果将是不可预料的。在ARM状态下,PC的0和 1位是0,在Thumb状态下,PC的0位是0。
R15虽然也可用作通用寄存器,但一般不这么使用,因为对R15的使用有一些特殊的限制,当违反了这些限制时,程序的执行结果是未知的。
由于ARM体系结构采用了多级流水线技术,对于ARM指令集而言,PC总是指向当前指令的下两条指令的地址,即PC的值为当前指令的地址值加8个字节。
图2.3 ARM状态下的寄存器组织
在ARM状态下,任一时刻可以访问以上所讨论的16个通用寄存器和一到两个状态寄存器。在非用户模式(特权模式)下,则可访问到特定模式分组寄存器,图2.3说明在每一种运行模式下,哪一些寄存器是可以访问的。
寄存器R16:
寄存器R16用作CPSR(Current Program Status Register,当前程序状态寄
第3章 ARM微处理器的指令系统
本章介绍ARM指令集、Thumb指令集,以及各类指令对应的寻址方式,通过对本章的阅读,希望读者能了解ARM微处理器所支持的指令集及具体的使用方法。
本章的主要内容有:
- ARM指令集、Thumb指令集概述。
- ARM指令集的分类与具体应用。
- Thumb指令集简介及应用场合。
3.1 ARM微处理器的指令集概述
3.1.1 ARM微处理器的指令的分类与格式
ARM微处理器的指令集是加载/存储型的,也即指令集仅能处理寄存器中的数据,而且处理结果都要放回寄存器中,而对系统存储器的访问则需要通过专门的加载/存储指令来完成。
ARM微处理器的指令集可以分为跳转指令、数据处理指令、程序状态寄存器(PSR)处理指令、加载/存储指令、协处理器指令和异常产生指令六大类,具体的指令及功能如表3-1所示(表中指令为基本ARM指令,不包括派生的ARM指令)。
表3-1 ARM指令及功能描述
助记符 指令功能描述
ADC 带进位加法指令
ADD 加法指令
AND 逻辑与指令
B 跳转指令
BIC 位清零指令
BL 带返回的跳转指令
BLX 带返回和状态切换的跳转指令
BX 带状态切换的跳转指令
CDP 协处理器数据操作指令
CMN 比较反值指令
CMP 比较指令
EOR 异或指令
LDC 存储器到协处理器的数据传输指令
LDM 加载多个寄存器指令
LDR 存储器到寄存器的数据传输指令
MCR 从ARM寄存器到协处理器寄存器的数据传输指令
MLA 乘加运算指令
MOV 数据传送指令
MRC 从协处理器寄存器到ARM寄存器的数据传输指令
MRS 传送CPSR或SPSR的内容到通用寄存器指令
MSR 传送通用寄存器到CPSR或SPSR的指令
MUL 32位乘法指令
MLA 32位乘加指令
MVN 数据取反传送指令
ORR 逻辑或指令
RSB 逆向减法指令
RSC 带借位的逆向减法指令
SBC 带借位减法指令
STC 协处理器寄存器写入存储器指令
STM 批量内存字写入指令
STR 寄存器到存储器的数据传输指令
SUB 减法指令
SWI 软件中断指令
SWP 交换指令
TEQ 相等测试指令
TST 位测试指令
3.1.2 指令的条件域
当处理器工作在ARM状态时,几乎所有的指令均根据CPSR中条件码的状态和指令的条件域有条件的执行。当指令的执行条件满足时,指令被执行,否则指令被忽略。
每 一条ARM指令包含4位的条件码,位于指令的最高4位[31:28]。条件码共有16种,每种条件码可用两个字符表示,这两个字符可以添加在指令助记符的 后面和指令同时使用。例如,跳转指令B可以加上后缀EQ变为BEQ表示“相等则跳转”,即当CPSR中的Z标志置位时发生跳转。
在16种条件标志码中,只有15种可以使用,如表3-2所示,第16种(1111
表3-2 指令的条件码
条件码 助记符后缀 标 志 含 义
0000 EQ Z置位 相等
0001 NE Z清零 不相等
0010 CS C置位 无符号数大于或等于
0011
0100 MI N置位 负数
0101 PL N清零 正数或零
0110 VS V置位 溢出
0111 VC V清零 未溢出
1000
1001
1010
1011
1100
1101
1110
3.2 ARM指令的寻址方式
所谓寻址方式就是处理器根据指令中给出的地址信息来寻找物理地址的方式。目前ARM指令系统支持如下几种常见的寻址方式。
3.2.1 立即寻址
立即寻址也叫立即数寻址,这是一种特殊的寻址方式,操作数本身就在指令中给出,只要取出指令也就取到了操作数。这个操作数被称为立即数,对应的寻址方式也就叫做立即寻址。例如以下指令:
ADD R0,R0,#1 ;R0←R0+1
ADD R0,R0,#0x3f ;R0←R0+0x3f
在以上两条指令中,第二个源操作数即为立即数,要求以“#”为前缀,对于以十六进制表示的立即数,还要求在“#”后加上“0x”或“&”。
3.2.2 寄存器寻址
寄存器寻址就是利用寄存器中的数值作为操作数,这种寻址方式是各类微处理器经常采用的一种方式,也是一种执行效率较高的寻址方式。以下指令:
ADD R0,R1,R2 ;R0←R1+R2
该指令的执行效果是将寄存器R1和R2的内容相加,其结果存放在寄存器R0中。
3.2.2 寄存器间接寻址
寄存器间接寻址就是以寄存器中的值作为操作数的地址,而操作数本身存放在存储器中。例如以下指令:
ADD R0,R1,[R2] ;R0←R1+[R2]
LDR R0,[R1] ;R0←[R1]
STR R0,[R1] ;[R1]←R0
在第一条指令中,以寄存器R2的值作为操作数的地址,在存储器中取得一个操作数后与R1相加,结果存入寄存器R0中。
第二条指令将以R1的值为地址的存储器中的数据传送到R0中。
第三条指令将R0的值传送到以R1的值为地址的存储器中。
3.2.3 基址变址寻址
基址变址寻址就是将寄存器(该寄存器一般称作基址寄存器)的内容与指令中给出的地址偏移量相加,从而得到一个操作数的有效地址。变址寻址方式常用于访问某基地址附近的地址单元。采用变址寻址方式的指令常见有以下几种形式,如下所示:
LDR R0,[R1,#4] ;R0←[R1+4]
LDR R0,[R1,#4]! ;R0←[R1+4]、R1←R1+4
LDR R0,[R1] ,#4 ;R0←[R1]、R1←R1+4
LDR R0,[R1,R2] ;R0←[R1+R2]
在第一条指令中,将寄存器R1的内容加上4形成操作数的有效地址,从而取得操作数存入寄存器R0中。
在第二条指令中,将寄存器R1的内容加上4形成操作数的有效地址,从而取得操作数存入寄存器R0中,然后,R1的内容自增4个字节。
在第三条指令中,以寄存器R1的内容作为操作数的有效地址,从而取得操作数存入寄存器R0中,然后,R1的内容自增4个字节。
在第四条指令中,将寄存器R1的内容加上寄存器R2的内容形成操作数的有效地址,从而取得
第4章 ARM程序设计基础
ARM编译器一般都支持汇编语言的程序设计和C/C++语言的程序设计,以及两者的混合编程。本章介绍ARM程序设计的一些基本概念,如ARM汇编语言的伪指令、汇编语言的语句格式和汇编语言的程序结构等,同时介绍C/C++和汇编语言的混合编程等问题。
本章的主要内容:
- ARM编译器所支持的伪指令
- 汇编语言的语句格式
- 汇编语言的程序结构
- 相关的程序示例
4.1 ARM汇编器所支持的伪指令
在 ARM汇编语言程序里,有一些特殊指令助记符,这些助记符与指令系统的助记符不同,没有相对应的操作码,通常称这些特殊指令助记符为伪指令,他们所完成的 操作称为伪操作。伪指令在源程序中的作用是为完成汇编程序作各种准备工作的,这些伪指令仅在汇编过程中起作用,一旦汇编结束,伪指令的使命就完成。
在ARM的汇编程序中,有如下几种伪指令:符号定义伪指令、数据定义伪指令、汇编控制伪指令、宏指令以及其他伪指令。
4.1.1 符号定义(Symbol Definition)伪指令
符号定义伪指令用于定义ARM汇编程序中的变量、对变量赋值以及定义寄存器的别名等操作。常见的符号定义伪指令有如下几种:
- 用于定义全局变量的GBLA、GBLL和GBLS。
- 用于定义局部变量的LCLA、LCLL和LCLS。
- 用于对变量赋值的SETA、SETL、SETS。
- 为通用寄存器列表定义名称的RLIST。
1、 GBLA、GBLL和GBLS
语法格式:
GBLA(GBLL或GBLS) 全局变量名
GBLA、GBLL和GBLS伪指令用于定义一个ARM程序中的全局变量,并将其初始化。其中:
GBLA伪指令用于定义一个全局的数字变量,并初始化为0;
GBLL伪指令用于定义一个全局的逻辑变量,并初始化为F(假);
GBLS伪指令用于定义一个全局的字符串变量,并初始化为空;
由于以上三条伪指令用于定义全局变量,因此在整个程序范围内变量名必须唯一。
使用示例:
GBLA TEST1
TEST1
GBLL TEST2
TEST2
GBLS test3
test3
2、 LCLA、LCLL和LCLS
语法格式:
LCLA(LCLL或LCLS) 局部变量名
LCLA、LCLL和LCLS伪指令用于定义一个ARM程序中的局部变量,并将其初始化。其中:
LCLA伪指令用于定义一个局部的数字变量,并初始化为0;
LCLL伪指令用于定义一个局部的逻辑变量,并初始化为F(假);
LCLS伪指令用于定义一个局部的字符串变量,并初始化为空;
以上三条伪指令用于声明局部变量,在其作用范围内变量名必须唯一。
使用示例:
LCLA test4
test3
LCLL TEST5
test4
LCLS TEST6
TEST6
3、 SETA、SETL和SETS
语法格式:
变量名 SETA(SETL或SETS) 表达式
伪指令SETA、SETL、SETS用于给一个已经定义的全局变量或局部变量赋值。
SETA伪指令用于给一个数学变量赋值;
SETL伪指令用于给一个逻辑变量赋值;
SETS伪指令用于给一个字符串变量赋值;
其中,变量名为已经定义过的全局变量或局部变量,表达式为将要赋给变量的值。
使用示例:
LCLA test3
test3
LCLL test4
test4
4、 RLIST
语法格式:
名称 RLIST {寄存器列表}
RLIST伪指令可用于对一个通用寄存器列表定义名称,使用该伪指令定义的名称可在ARM指令LDM/STM中使用。在LDM/STM指令中,列表中的寄存器访问次序为根据寄存器的编号由低到高,而与列表中的寄存器排列次序无关。
使用示例:
RegList RLIST {R0-R5,R8,R10} ;将寄存器列表名称定义为RegList,可在ARM指令LDM/STM中通过该名称访问寄存器列表。
4.1.2 数据定义(Data Definition)伪指令
数据定义伪指令一般用于为特定的数据分配存储单元,同时可完成已分配存储单元的初始化。常见的数据定义伪指令有如下几种:
- DCB 用于分配一片连续的字节存储单元并用指定的数据初始化。
- DCW(DCWU) 用于分配一片连续的半字存储单元并用指定的数据初始化。
- DCD(DCDU) 用于分配一片连续的字存储单元并用指定的数据初始化。
- DCFD(DCFDU)用于为双精度的浮点数分配一片连续的字存储单元并用指定的数据初始化。
- DCFS(DCFSU) 用于为单精度的浮点数分配一片连续的字存储单元并用指定的数据初始化。
- DCQ(DCQU) 用于分配一片以8字节为单位的连续的存储单元并用指定的数据初始化。
- SPACE 用于分配一片连续的存储单元
- MAP 用于定义一个结构化的内存表首地址
- FIELD 用于定义一个结构化的内存表的数据域
1、 DCB
语法格式:
标号 DCB 表达式
DCB伪指令用于分配一片连续的字节存储单元并用
第5章 应用系统设计与调试
本章主要介绍基于S3C4510B
尽管本章所描述的内容为基于S3C4510B
本章的主要内容包括:
- 嵌入式系统设计的基本方法。
- S3C4510B
- S3C4510B
- 基于S3C4510B
- 硬件系统的调试方法
5.1 系统设计概述
根 据用户需求,设计出特定的嵌入式应用系统,是每一个嵌入式系统设计工程师应该达到的目标。嵌入式应用系统的设计包含硬件系统的设计和软件系统设计两个部 分,并且这两部分的设计是互相关联、密不可分的,嵌入式应用系统的设计经常需要在硬件和软件的设计之间进行权衡与折中。因此,这就要求嵌入式系统设计工程 师具有较深厚的硬件和软件基础,并具有熟练应用的能力。这也是嵌入式应用系统设计与其他的纯粹的软件设计或硬件设计最大的区别。
本章以北京微芯力 科技有限公司(www.winsilicon.com)设计生产的ARM Linux评估开发板为原型,详细分析系统的软、硬件设计步骤、实现细节以及调试技巧等。ARM Linux评估开发板的设计以学习与应用兼顾为出发点,在保证用户完成ARM技术的学习开发的同时,考虑了系统的扩展、电路板的面积、散热、电磁兼容性以 及安装等问题,因此,该板也可作为嵌入式系统主板,直接应用在一些实际系统中。
图5.1.1是ARM Linux评估开发板的结构框图,各部分基本功能描述如下:
- 串行接口电路用于S3C4510B
- 复位电路可完成系统上电复位和在系统工作时用户按键复位;
- 电源电路为5V到3.3V
- 10MHZ
- FLASH
- SDRAM
- 10M/100M以太网接口为系统提供以太网接入的物理通道,通过该接口,系统可以10M或100Mbps的速率接入以太网;
- JTAG接口可对芯片内部的所有部件进行访问,通过该接口可对系统进行调试、编程等;
- IIC存储器可存储少量需要长期保存的用户数据;
- 系统总线扩展引出了数据总线、地址总线和必须的控制总线,便于用户根据自身的特定需求,扩展外围电路。
图5.1.1 ARM Linux评估开发板的结构框图
5.2 S3C4510B
5.2.1 S3C4510B
在进行系统设计之前,有必要对ARM Linux评估开发板上的ARM芯片S3C4510B
SAMSUNG
除了ARM7TDMI核以外,S3C4510B
- 2个带缓冲描述符(Buffer Descriptor)的HDLC通道
- 2个UART通道
- 2个GDMA通道
- 2个32位定时器
- 18个可编程的I/O口。
片内的逻辑控制电路包括:
- 中断控制器
- DRAM/SDRAM
- ROM/SRAM和FLASH
- 系统管理器
- 一个内部32位系统总线仲裁器
- 一个外部存储器控制器。
S3C4510B
图 5.2.1 S3C4510B
S3C4510B
体系结构
- 用于嵌入式以太网应用的集成系统
- 全16/32的RISC架构
- 支持大、小端模式。内部架构为大端模式,外部存储器可为大、小端模式
- 内含效率高、功能强的ARM7TDMI处理器核
- 高性价比、基于JTAG接口的调试方案
- 边界扫描接口
系统管理器
- 支持ROM/SRAM
- 带总线请求/应答引脚的外部总线控制器
- 支持EDO/常规或SDRAM
- 可编程的访问周期(可设定0~7个等待周期)
- 4字的写缓冲
- 高性价比的从存储器到外围的DMA接口
一体化的指令/数据Cache
- 一体化的8K Cache
- 支持LRC(近期最少使用)替换算法
- Cache可配置为内部SRAM
IIC接口
- 仅支持主控模式
- 串行时钟由波特率发生器生成
Ethernet控制器
- 带猝发模式的DMA引擎
- DMA发送/接收缓冲区(256字节发送,256字节接收)
- MAC发送/接收FIFO缓冲区(80字节发送,16字节接收)
- 数据对准逻辑
- 支持端模式变换
- 100M/10Mbps的工作速率
- 与IEEE802.3标准完全兼容
- 提供MII和7线制10Mbps接口
- 站管理信号生成
- 片内CAM(可达21个目的地址)
- 带暂停特性的全双工模式
- 支持长/短包模式
- 包拆装PDA生成
HDLC (High-Level Data LINK
- HDLC协议特征:标志检测与同步;零插入与删除;空闲检测和发送;FCS生成和检测(16位);终止检测与发送
- 地址搜索模式(可扩展到四字节)
- 可选择CRC模式或非CRC模式
- 用于时钟恢复的数字PLL模块
- 波特率生成器
- 发送和接收支持NRZ/NRZI/FM/曼切斯特数据格式
- 回环与自动回波模式
- 8字的发送和接收FIFO
- 可选的1字或4字数据传送方式
- 数据对准逻辑
- 可编程中断
- MODEM
- 高达10Mbps的工作速率
- 基于8位位组的HDLC帧长度
- 每个HDLC有2通道DMA缓冲描述符用于发送和接收
DMA控制器
- 用于存储器到存储器、存储器到UATR、UATR到存储器数据传送的2通道通用DMA控制器,不受CPU干预
- 可由程序或外部DMA请求启动
- 可增减源地址或目的地址,无论8位、16位或32位数据传输
- 4种数据猝发模式
UART
- 2个可工作于DMA方式或中断方式的UART模块
- 支持5、6、7、8位的串行数据发送和接收
- 波特率可编程
- 1位或2位停止位
- 奇/偶校验
- 间隔信号的生成与检测
- 奇偶校验、覆盖和帧错误检测
- ×16时钟模式
- 支持红外发送和接收
定时器
- 2个可编程32位定时器
- 间隔模式或触发模式工作
可编程I/O口
- 18个可编程I/O口
- 可分别配置为输入模式、输出模式或特殊功能模式
中断控制器
- 21个中断源,包括4个外部中断源
- 正常中断或快速中断模式(IRQ、FIQ)
- 基于优先级的中断处理
PLL
- 外部时钟可由片内PLL倍频以提高系统时钟
- 输入频率范围:10~40MHZ
- 输出频率可以是输入时钟的5倍
工作电压
- 3.3V
5.2.2 S3C4510B
图5.2.2是S3C4510B
图5.2.2 S3C4510B
各引脚信号描述如下:
表5-2-1 S3C4510B
信 号 引脚号 类 型 描 述
XCLK 80 I S3C4510B
MCLKO/SDCLK 77 O 系统时钟输出。SDCLK为SDRAM
CLKSEL 83 I 时钟选择。如果CLKSEL为低电平,PLL输出时钟作为S3C4510B
nRESET 82 I 复位信号。nRESET为S3C4510B
CLKOEN 76 I 时钟输出允许/禁止。高电平允许系统时钟信号输出,低电平禁止。
TMODE 63 I 测试模式选择。低电平为正常工作模式,高电平为芯片测试模式。
FILTER
TCK 58 I JTAG测试时钟。JTAG测试时钟信号用于切换状态信息和检测数据的输入输出。该引脚在片内下拉。
TMS 59 I JTAG测试模式选择。该信号控制S3C4510B
TDI 60 I JTAG测试数据输入。在JTAG测试操作的过程中,该信号将指令和数据串行送入S3C4510B
TDO 61 O JTAG测试数据输出。在JTAG测试操作的过程中,该信号将指令和数据串行送出S3C4510B
nTRST 62 I JTAG复位信号,低电平复位。异步复位JTAG逻辑。该引脚在片内上拉。
ADDR[21:0]/
ADDR[10]/AP 117-110
129-120
135-132 O 地址总线。22位的地址总线可寻址每一个ROM/ SRAM
XDATA[31:0] 141-136
154-144
166-159
175-169 I/O 外部数据总线(双向、32位)。S3C4510B
nRAS[3:0]/
nSDCS[3:0] 94,91,
90,89 O DRAM行地址锁存信号。S3C4510B
nCAS[3:0]
nCAS[0]
/nSDRAS
nCAS[1]
/nSDCAS
nCAS[2]/CKE 98,97,
96,95 O DRAM列地址锁存信号。无论访问哪一个DRAM组,4个nCAS输出信号均表示字节选择。nSDRAS作为SDRAM
nDWE 99 O DRAM写使能信号。该引脚为DRAM组提供写操作信号。(nWBE[3:0]用于为ROM/SRAM
nECS[3:0] 70,69,
68,67 O 外部I/O片选信号。可以有4个外部I/O组映射到存储空间,每一个外部I/O组的地址范围最大为16KB。nECS提供每一个外部I/O组的片选信号。
nEWAIT 71 I 外部等待信号。该信号用于在访问外部I/O设备时,由外设插入等待周期。
nRCS[5:0] 88-84,75 O ROM/SRAM
B0SIZE[1:0] 74,73 I ROM/SRAM
nOE 72 O 输出使能。当对存储器进行访问的时候,该信号控制存储器的输出使能。
nWBE[3:0]/
DQM[3:0] 107,
102-100 O 写字节使能。当对存储器进行写操作时,该信号控制存储器(DRAM除外)的写使能。对于DRAM存储器组,由nCAS[3:0]和nDWE控制写操作。DQM用于SDRAM
ExtMREQ 108 I 外部总线控制器请求信号。外部总线控制器通过该引脚请求控制外部总线,当该信号有效时,S3C4510B
ExtMACK 109 O 外部总线应答信号。
MDC 50 O 管理数据时钟。该引脚产生MDIO数据输入输出时所需的时钟信号。
MDIO 48 I/O 管理数据输入/输出。当执行一个读数据的命令时,该引脚输入由物理层产生的数据,当执行一个写数据的命令时,由该引脚输出数据到物理层(PHY)。
LITTLE 49 I 小端模式选择引脚。当该引脚为高电平时,S3C4510B
COL/COL_10M 38 I 冲突检测/10M冲突检测。该引脚显示是否检测到冲突。
TX_CLK/
TXCLK_10M 46 I 发送时钟/10M发送时钟。S3C4510B
TXD[3:0]
LOOP_10M
TXD_10M 44,43,
40,39 O 发送数据/10M发送数据/10M回环测试。TXD[3:0]为发送数据引脚,TXD_10M为10M的PHY的发送数据引脚,LOOP_10M由控制寄存器的回环测试位驱动。
TX_EN/
TXEN_10M 47 O 发送使能/10M发送使能。
TX_ERR/
PCOMP_10M 45 O 发送错误/10M包压缩使能。
CRS/CRS_10M 28 I 载波侦听/10M载波侦听。
RX_CLK/
RXCLK_10M 37 I 接收时钟/10M接收时钟。RX_CLK为连续的时钟信号,当其频率为25MHZ
RXD[3:0]
RXD_10M 35,34,
33,30 I 接收数据/10M接收数据。
RX_DV/
LINK10M 29 I 接收数据有效/10M连接状态。
RX_ERR 36 I 接收错误。
TXDA 9 O HDLC Ch-A发送数据。
RXDA 7 I HDLC Ch-A接收数据。
nDTRA 6 O HDLC Ch-A终端准备就绪。nDTRA引脚指示数据终端设备准备发送或接收。
nRTSA 8 O HDLC Ch-A传送请求。
nCTSA 10 I HDLC Ch-A传送清除。
nDCDA 13 &nb
5.2.4 S3C4510B
概述
S3C4510B
S3C4510B
- 基于固定的优先级,仲裁来自几个主功能模块的系统总线访问请求。
- 为访问外部存储器提供必需的存储器控制信号。例如DMA控制器或CPU要访问DRAM
- 为S3C4510B
- 为外部存储器的数据总线和内部数据总线之间的数据流协调总线宽度的差别。
- 对外部存储器和I/O设备,S3C4510B
通过产生外部总线请求信号,外设可访问S3C4510B
系统管理器寄存器(SYSTEM
系统管理器使用一组专用的特殊功能寄存器来控制外部存储器的读/写操作,通过对该组特殊功能寄存器编程,可以设定:
- 存储器的类型
- 外部数据总线宽度及访问周期
- 定时的控制信号(例如RAS和CAS)
- 存储器组的定位
- 存储器组的大小
在标准系统配置中访问外设必需的控制信号、地址信号和数据信号,系统管理器通过设置特殊功能寄存器的值来控制其产生和处理。特殊功能寄存器也被用于控制对ROM/SRAM/Flash组的访问,同时还能控制对多达四个DRAM
每个存储器组在组内通过基指针(Base Pointer)寻址,其寻址范围是64KB
在进行系统存储器映射时,注意两个相连的存储器组的地址空间决不能重叠。图5.2.4 为S3C4510B
图5.2.4 S3C4510B
系统存储器映射(SYSTEM
关于S3C4510B
- S3C4510B
- 四 个外部I/O组被定义在一个连续的地址空间中。只需要将基指针分配给外部I/O组0,外部I/O组1的起始地址就等于外部I/O组0的起始地 址+16KB,同理,外部I/O组2的起始地址就等于外部I/O组0的起始地址+32KB,外部I/O组3的起始地址就等于外部I/O组0的起始地 址+48KB。因此,四个外部组的总的连续的可寻址范围被定义在外部I/O组0的起始地址+64KB
- 每个组的起始物理地址为“基指针左移16位”, 每组末尾的物理地址为“尾指针左移16位 - 1”。
在 上电或系统复位后,所有组的地址指针寄存器都被初始化到其缺省值。这时,所有的组指针(ROM/SRAM/Flash组0和特殊功能寄存器组除外)都被清 零。这意味着:除ROM/SRAM/Flash组0和特殊功能寄存器组以外,所有其它组在系统启动时都是未被定义的。这一点很重要,用户在进行程序设计 时,一般总是要首先通过配置相应寄存器,定义系统的存储空间。
ROM/SRAM/Flash组0的尾指针和基指针的复位值分别为0x200和0x0。这意味着系统复位后将自动定义ROM/SRAM/Flash组0的地址空间为32MB
特殊功能寄存器组的基址针在系统复位时被初始化为0x3FF0000,一般不再改动。
图5.2.5是在系统启动或复位时的系统存储器映射。
图5.2.5 系统复位时的存储器映射
表5-2-4为系统管理器对应的寄存器,系统的存储器映射可通过对这些寄存器的配置来完成。
表5-2-4 系统管理器对应的寄存器
寄存器 偏移量 操作 描 述 复位值
SYSCFG 0x0000 读/写 系统配置寄存器 0x37FFFF91
CLKCON 0x3000 读/写 时钟控制寄存器 0x00000000
EXTACON0 0x3008 读/写 外部I/O时序寄存器1 0x00000000
EXTACON1 0x300C 读/写 外部I/O时序寄存器2 0x00000000
EXTDBWTH 0x3010 读/写 分组数据总线的宽度设置寄存器 0x00000000
ROMCON0 0x3014 读/写 ROM/ARAM/FLASH组0控制寄存器 0x20000060
ROMCON1 0x3018 读/写 ROM/ARAM/FLASH组1控制寄存器 0x00000060
ROMCON2 0x301C 读/写 ROM/ARAM/FLASH组2控制寄存器 0x00000060
ROMCON3 0x3020 读/写 ROM/ARAM/FLASH组3控制寄存器 0x00000060
ROMCON4 0x3024 读/写 ROM/ARAM/FLASH组4控制寄存器 0x00000060
ROMCON5 0x3028 读/写 ROM/ARAM/FLASH组5控制寄存器 0x00000060
DRAM
DRAM
DRAM
DRAM
REFEXTCON 0x303C 读/写 刷新与外部I/O控制寄存器 0x000083FD
根据外部存储器的宽度决定外部地址译码方法(External Address Translation Method Depends on the Width of External MEMORY
与某些ARM芯片不同,S3C4510B
表5-2-5 地址总线生成
数据总线宽度 外部地址引脚,ADDR[21:0] 可访问的存储空间
8位 A21-A0(内部) 4M字节
16位 A21-A1(内部) 4M半字
32位 &
5.3 系统的硬件选型与单元电路设计
从这一节开始,将详细描述系统的硬件选型与设计,希望通过对这些章节的阅读,能使读者具有初步设计特定系统的能力。
尽管硬件选型与单元电路设计部分的内容是基于S3C4510B
需要说明,以下的应用电路可能不是最佳的,但经验证是可以正常工作的。
5.3.1 S3C4510B
S3C4510B
首 先,电源和接地引脚有近50根,再除去地址总线、数据总线和通用I/O口,以及其他的专用模块如HDLC、UART、IIC、MAC等的接口,真正需要仔 细研究的引脚数就不是很多了,但这些引脚主要是控制信号,需要认真对待,在此先进行简单的分析,其后的单元电路设计里,会有更再详细的说明。
在硬件系统的设计中,应当注意芯片引脚的类型,S3C4510B
输出类型的引脚主要用于S3C4510B
输入/输出类型的引脚主要是S3C4510B
而某些输入类型的引脚,其电平信号的设置是S3C4510B
S3C4510B
LITTLE(Pin49):大、小端模式选择引脚。高电平 = 小端模式;低电平 = 大端模式;该引脚在片内下拉,系统默认为大端模式,但在实际系统中一般使用小端模式,更符合我们的使用习惯,因此该引脚可上拉或接电源。
FILTER
TCK、TMS、TDI、TDO、nTRST(Pin58~Pin62):JTAG接口引脚。根据IEEE标准,TCK应下拉,TMS、TDI和nTRST应上拉。S3C4510B
TMODE(Pin63):测试模式。高电平 = 芯片测试模式;低电平 = 正常工作模式;用户一般不作芯片测试,该引脚下拉或接地,使芯片处于正常工作模式。
nEWAIT(Pin71):外部等待请求信号。该引脚应上拉。
B0SIZE[1:0](Pin74,Pin73):BANK0数据宽度选择。’01’ = 8位;’10’ = 16位;’11’ = 32位;’00’ = 系统保留。
CLKOEN(Pin76):时钟输出允许/禁止。高电平 = 允许;低电平 = 禁止。一些外围器件(如SDRAM
XCLK(Pin80):系统时钟源。接有源晶振的输出。
nRESET(Pin82):系统复位引脚。低电平复位,当系统正常工作时,该引脚应处于高电平状态。
CLKSEL(Pin83):时钟选择。高电平 = XCLK直接作为系统的工作时钟;低电平 = XCLK经过PLL电路倍频后作为系统的工作时钟。
ExtMREQ(Pin108):外部主机总线请求信号。该引脚应下拉。
S3C4510B
5.3.2 电源电路
在该系统中,需要使用5V和3.3V
图5.3.1 系统的电源电路
有很多DC-DC转换器可完成5V到3.3V
LT1083
LT1084
LT1085
LT1086
设计者可根据系统的实际功耗,选择不同的器件。
5.3.3 晶振电路与复位电路
晶振电路用于向CPU及其他电路提供工作时钟。在该系统中,S3C4510B
图5.3.2 系统的晶振电路
根据S3C4510B
有源晶振的1脚接5V电源,2脚悬空,3脚接地,4脚为晶振的输出,可通过一个小电阻(此处为22欧姆)接S3C4510B
在系统中,复位电路主要完成系统的上电复位和系统在运行时用户的按键复位功能。复位电路可由简单的RC电路构成,也可使用其他的相对较复杂,但功能更完善的电路。
本系统采用较简单的RC复位电路,经使用证明,其复位逻辑是可靠的。复位电路如图5.3.3所示:
图5.3.3 系统的复位电路
该复位电路的工作原理如下:在系统上电时,通过电阻R1向电容C1充电,当C1两端的电压未达到高电平的门限电压时,Reset端输出为低电平,系统处于复位状态;当C1两端的电压达到高电平的门限电压时,Reset端输出为高电平,系统进入正常工作状态。
当用户按下按钮S1时,C1两端的电荷被泻放掉,Reset端输出为低电平,系统进入复位状态,再重复以上的充电过程,系统进入正常工作状态。
两级非门电路用于按钮去抖动和波形整形;nReset端的输出状态与Reset端相反,以用于高电平复位的器件;通过调整R1和C1的参数,可调整复位状态的时间。
5.3.4 FLASH
FLASH
以该系统中使用的FLASH
图5.3.4 HY29LV160
HY29LV160
HY29LV160
HY29LV160
图5.3.5 HY29LV160
表5-3-1 HY29LV160
引 脚 类型 描 述
A[19:0] I 地址总线。在字节模式下,DQ[15]/A[-1]用作21位字节地址的最低位。
DQ[15]/A[-1]
DQ[14:0] I/O
三态 数据总线。在读写操作时提供8位或16位的数据宽度。在字节模式下,DQ[15]/A[-1]用作21位字节地址的最低位,而DQ[14:8]处于高阻状态。
BYTE# I 模式选择。低电平选择字节模式,高电平选择字模式
CE# I 片选信号,低电平有效。在对HY29LV160
OE# I 输出使能,低电平有效。在读操作时有效,写操作时无效。
WE# I 写使能,低电平有效。在对HY29LV160
RESET# I 硬件复位,低电平有效。对HY29LV160
RY/BY# O 就绪/忙 状态指示。用于指示写或擦除操作是否完成。当HY29LV160
VCC -- 3.3V
VSS -- 接地
以上为一款常见的FLASH
5.4 硬件系统的调试
通过5.3节对S3C4510B
当 系统设计制作完成时,必须经过仔细的调试,才能保证系统按照设计意图正常工作。尽管系统的调试与个人对电路工作原理的理解和实际的电路调试经验有很大的关 系,但一定的调试方法也是必不可少的。掌握正确的调试方法可使调试工作变得容易,大大缩短系统的开发时间,反之,可能会使整个系统的开发前功尽弃,以失败 告终。
本节以单元电路为单位,并结合笔者自身在系统调试时所遇到的一些具有代表性的问题,循序渐进的介绍整个系统的调试过程。在此,笔者建议:当 用户的印制电路板制作完毕后,不要急于焊接元器件,请首先对照原理图仔细检查印制电路板的连线,确保无误后方可焊接。同时,尽可能的以各单元电路为单位, 一个个焊接调试,以便在调试过程中遇到困难时缩小故障范围,在系统上电后,应先检查电路工作有无异常,芯片在工作时有一定的发热是正常的,但如果有芯片特 别发烫,则一定有故障存在,需断电检查确认无误后方可继续通电调试。
调试工具需要示波器、万用表等,同时需要ARM调试开发软件ADS或SDT及相应的仿真器,本系统在调试时使用ADS1.2及由北京微芯力科技有限公司开发的ARM JTAG仿真器。关于ADS的使用方法在以后的章节有详细的叙述。
5.4.1 电源、晶振及复位电路
电源电路、晶振电路和复位电路相对比较简单,按图5.3.1、图5.3.2和图5.3.3连接后应该就可以正常工作,此时电源电路的输出因为DC 3.3V
用示波器观测,有源晶振的输出应为10MHZ
复位电路的RESET端在未按按钮时输出应为高电平(3.3V),按下按钮后变为低电平,按钮松开后应恢复到高电平。
电源电路、晶振电路和复位电路是整个系统正常工作的基础,应首先保证他们的正常工作。
5.4.2 S3C4510B
在保证电源电路、晶振电路和复位电路正常工作的前提下,可通过JTAG接口调试S3C4510B
给系统上电后,可通过示波器查看S3C4510B
在保证S3C4510B
在此,首先通过对片内控制通用I/O口的特殊功能寄存器的操作,来点亮连接在P3~P0口上的4只LED,用以验证ADS或SDT调试环境是否已正确设置,以及与JTAG接口的连接是否正常。
ADS和SDT均为ARM公司为方便用户在ARM芯片上进行应用开发而推出的一整套集成开发工具,其中,ADS为SDT的升级版本。该系统的调试以ADS为例,同时也适合于SDT开发环境。图5.4.1为调试系统的硬件连接。
图5.4.1 调试系统的硬件连接
按图5.4.1连接好硬件后,打开AXD Debugger,建立与目标板(待调试的系统板)的连接,AXD Debugger有软件仿真方式和带目标系统的调试方式,此时应工作在带目标系统的调试方式。
选择菜单SYSTEM
>setmem 0x3FF5000, 0xFFFF, 32
>setmem 0x3FF5008, 0xFFFF, 32
setmem命令用于对特定的地址设置特定的值,待设定的值可以是8位、16位或32位,在此,对通用I/O口的模式寄存器和数据寄存器设置相应的值,点亮LED。
S3C4510B
在执行完以上两条命令后,连接在通用I/O口的4只LED应被点亮,表示调试系统的软、硬件连接完好,可进行下一步的调试工作,否则,应重新检查调试系统。
用户若使用SDT作为调试工具,操作方法类似。按图5.4.1连接好硬件后,打开ARM Debugger for Windows,建立与目标板(待调试的系统板)的连接,选择菜单View→Command功能,即可显示命令行窗口,在命令行窗口输入:
Debug:let 0x3FF5000 = 0xFFFF
Debug:let 0x3FF5008 = 0xFFFF
执行完以上两条命令后,连接在通用I/O口的4只LED应被点亮。
关于通用I/O口更具体的工作原理和使用方法,可参考S3C4510B
用户系统若能正常完成上述操作并成功点亮连接在P3~P0口上的LED显示器,则表明S3C4510B
5.4.3 SDRAM
在系统的两类存储器中,SDRAM