ARM学习五周通

合集下载

第3章 ARM指令系统

第3章 ARM指令系统
嵌入式技术基础
嵌入式技术基础
陈长顺
第三章 ARM指令系统
嵌入式技术基础
第三章 ARM指令系统
第三章 ARM指令系统
嵌入式技术基础
复习引入
ARM寄存器是如何组织的? ARM程序状态寄存器是如何定义的? ARM储存器采用哪些存储格式?如何定义?
第三章 ARM指令系统
嵌入式技术基础
ARM状态下的寄存器组织
C
31
0 RRX移位操作
第三章 ARM指令系统
嵌入式技术基础
ARM寻址方式_寄存器间接寻址
寄存器间接寻址是指操作数保存在存储器指定地址 的存储单元中,地址通过寄存器给出,寄存器为操 作数的地址指针。ARM的传送指令都是基于寄存 器的间接寻址,即通过Load/Store完成对数据的传 送操作。 实例
1
ARM指令概述
2
ARM指令寻址方式
3
ARM指令集
4 Thumb指令集 5 ARM汇编伪指令 6
ARM 汇编程序设计
第三章 ARM指令系统
嵌入式技术基础
ARM指令集
ARM指令集可以分为分支指令、数据处理指令、寄存 器访问指令、加载/存储指令、协处理器指令、异常产 生指令、伪指令七大类 。
第三章 ARM指令系统
第三章 ARM指令系统
嵌入式技术基础
ARM指令集_分支指令
带链接的跳转指令BL 指令格式
BL{cond} label
指令功能
将下一条指令的地址复制到R14(即LR)链接寄存器中, 然后跳转到指定地址运行程序。
实例
BL DELAY ;跳转到DELAY标号处,同时将 ; PC的值保存到LR寄存器中
ASR:算术右移,移位过程中保持符号位不变,即 若源操作数为正数,则字的高位空出位补0,否则 补1;

第三章 ARM指令系统.ppt

第三章 ARM指令系统.ppt

(6)多寄存器寻址
一条指令可以完成多个寄存器值的传送,这种寻址方式可以用一条 指令完成传送最多16个通用寄存器的值,如:
LDMIA R0!,{R1—R4}
; R1 ; R2 ; R3 ; R4
[R0] [R0+4] [R0+8] [R0+12]
该指令的后缀IA表示在每次执行完加载/存储操作后,R0按字长度 增加,因此,指令可将连续存储单元的值传送到R1~R4。
;入栈 ;出栈
嵌入式技术基础
3.2 ARM指令寻址方式
(8)相对寻址 以程序计数器 PC 的当前值为基地址,指令中的地址标号作为偏移
量,将两者相加之后得到操作数的有效地址。 以下程序段完成子程序调用的返回,跳转指令BL采用了相对寻址
方式,如: BL NEXT …
NEXT MOV R1,#1 … MOV PC,LR
BL{条件} 目标地址
如:
BL DELAY
BL指令执行跳转操作的同时,还将PC的值保存到LR寄存器中, ARM使用BL实现待返回值的跳转功能。
嵌入式技术基础
3.3 ARM指令集
3、BX指令 BX指令是带状态切换的跳转指令,只有当条件完全符合时才执
行。 指令格式如下: BX{条件} 目标地址 跳转到目标地址指定的地址执行程序,若目标地址的位[0]为1,则
[27:20]:指令代 码域
[19:16]:地址基 址Rn域
[15:12]:目标或 源寄存器Rd域
[11:0]:地址偏移 或操作寄存器 、操作数区域
嵌入式技术基础
3.1 ARM指令系统简介
◆ 指令的条件域: 当处理器工作在ARM状态时,几乎所有的指令均根据CPSR中条件
码的状态和指令的条件域有条件的执行。 当指令的执行条件满足时,指令被执行,否则指令被忽略。 每一条ARM指令包含4位的条件码,位于指令的最高4位[31:28]。 每种条件码可用两个字符表示,这两个字符可以添加在指令助记

ARM汇编 -- 嵌入式学习博客(转载)

ARM汇编 -- 嵌入式学习博客(转载)

ARM汇编ARM汇编学习笔记 2008-06-8 07:01:05大中小标签:IT/科技这两天参加了一个编写操作系统的项目,因为要做很多底层的东西,而且这个操作系统是嵌入式的,所以开始学习ARM汇编,发现ARM汇编和一般PC 平台上的汇编有很多不同,但主要还是关键字和伪码上的,其编程思想还是相同的。

现将一些学习感悟部分列出来,希望能给有问题的人一点帮助。

1、ARM汇编的格式:在ARM汇编里,有些字符是用来标记行号的,这些字符要求顶格写;有些伪码是需要成对出现的,例如ENTRY和END,就需要对齐出现,也就是说他们要么都顶格,要么都空相等的空,否则编译器将报错。

常量定义需要顶格书写,不然,编译器同样会报错。

2、字符串变量的值是一系列的字符,并且使用双引号作为分界符,如果要在字符串中使用双引号,则必须连续使用两个双引号。

3、在使用LDR时,当格式是LDR r0,=0x022248,则第二个参数表示地址,即0x022248,同样的,当src变量代表一个数组时,需要将r0寄存器指向src则需要这样赋值:LDR r0,=src 当格式是LDR r0,[r2],则第二个参数表示寄存器,我的理解是[]符号表示取内容,r2本身表示一个寄存器地址,取内容候将其存取r0这个寄存器中。

4、在语句:CMP r0,#numBHS stop书上意思是:如果r0寄存器中的值比num大的话,程序就跳转到stop标记的行。

但是,实际测试的时候,我发现如果r0和num相等也能跳转到stop标记的行,也就是说只要r0小于num才不会跳转。

下面就两个具体的例子谈谈ARM汇编(这是我昨天好不容易看懂的,呵呵)。

第一个是使用跳转表解决分支转移问题的例程,源代码如下(保存的时候请将文件后缀名改为s):AREA JumpTest,CODE,READONLYCODE32num EQU 4ENTRYstartMOV r0, #4MOV r1, #3MOV r2, #2MOV r3, #0CMP r0, #numBHS stopADR r4, JumpTableCMP r0, #2MOVEQ r3, #0LDREQ pc, [r4,r3,LSL #2]CMP r0, #3MOVEQ r3, #1LDREQ pc, [r4,r3,LSL #2]CMP r0, #4MOVEQ r3, #2LDREQ pc, [r4,r3,LSL #2]CMP r0, #1MOVEQ r3, #3LDREQ pc, [r4,r3,LSL #2]DEFAULTMOVEQ r0, #0 SWITCHENDstopMOV r0, #0x18LDR r1, =0x20026SWI 0x123456JumpTableDCD CASE1DCD CASE2DCD CASE3DCD CASE4DCD DEFAULTCASE1ADD r0, r1, r2B SWITCHENDCASE2SUB r0, r1, r2B SWITCHENDCASE3ORR r0, r1, r2B SWITCHENDCASE4AND r0, r1, r2B SWITCHENDEND程序其实很简单,可见我有多愚笨!还是简要介绍一下这段代码吧。

ARM知识点讲解详解(word文档物超所值)

ARM知识点讲解详解(word文档物超所值)

ARM知识点讲解详解1、ARM处理器工作模式有几种?各种工作模式下分别有什么特点?ARM 处理器有7种工作模式,这7种模式及其特点是:快速断模式(fiq)支持高速数据传输或通道处理,外部断fiq信号有效且CPSR的F=0进入。

断模式(irq)用于通用断处理,外部断irq信号有效CPSR的I=0进入。

管理员模式(svc)- 操作系统的保护模式,复位、软件断进入。

主要用于SWI(软件断)和OS(操作系统)。

这个模式有额外的特权,允许你进一步控制计算机。

止模式(abt)- 支持虚拟内存和/或内存保护预取指令止/数据止进入未定义模式(und)-支持硬件协处理器的软件仿真(浮点、向量运算)未定义指令进入系统模式(sys)- 支持操作系统的特殊用户模式(运行操作系统任务)用户模式(usr)正常的程序执行模式,此模式应用程序不能访问受操作系统保护的资源,不能改变模式,除非异常发生。

2、ARM处理器总共有多少个寄存器,这些寄存器按其在用户编程的功能是如何划分的?这些寄存器在使用各有何特殊之处?答:ARM微处理器共有37个32位寄存器,其31个为通用寄存器,6个为状态寄存器。

31个通用寄存器根据其编程特点可分为如下几种类型:1、不分组寄存器R0-R7 为所有模式共享2、分组寄存器R8-R12R8_fiq-R12_fiq: FIQ模式下的寄存器R8-R12:其它模式共享3、分组寄存器R13-R14分为6组,用户、系统一组,其他每种模式一组。

R13_<mode>通常用作堆栈指针SP,R14_<mode>通常用作子程序链接寄存器,当进入子程序时,常用来保存PC的返回值其,mode为以下几种模式之一:usr、fiq、irq、svc、abt、und。

4、程序寄存器R15(PC)所有模式共享6个状态寄存器:一个CPSR当前程序状态寄存器,保存当前程序状态。

五个程序状态备份寄存器SPSR(svc,abt,und,irq,frq),只有在异常模式下,才能被访问;各异常模式都拥有属于自己的SPSR,当发生异常时, SPSR用来保存CPSR的值,从异常退出时则可由SPSR来恢复CPSR。

ARM指令集详解ppt课件

ARM指令集详解ppt课件
• 移位操作在 ARM 指令集中不作为单独的指令使 用,它是指令格式中是一个字段,在汇编语言 中表示为指令中的选项。
精选ppt课件2021
17
比较指令
• CMP : 比较 • CMP{条件}{P} <op 1>, <op 2>
• status = op_1 - op_2
• CMP 允许把一个寄存器的内容如另一个寄存器的内容 或立即值进行比较,更改状态标志来允许进行条件执行。 它进行一次减法,但不存储结果,而是正确的更改标志。 标志表示的是操作数 1 比操作数 2 如何(大小等)。如果 操作数 1 大于操作操作数 2,则此后的有 GT 后缀的指 令将可以执行。不需要显式的指定 S 后缀来更改状态标 志,如果指定了它则被忽略。
精选ppt课件2021
14
EOR : 逻辑异或
• EOR{条件}{S} <dest>, <op 1>, <op 2> • dest = op_1 EOR op_2 EOR • 将在两个操作数上进行逻辑异或,把结果放置到
目的寄存器中;对反转特定的位有用。操作数 1 是一个寄存器,操作数 2 可以是一个寄存器,被 移位的寄存器,或一个立即值: • EOR R0, R0, #3 ; 反转 R0 中的位 0 和 1
精选ppt课件2021
21
数据传送指令
• MOV{条件}{S} <dest>, <op 1>
• dest = op_1
• MOV 从另一个寄存器、被移位的寄存器、或一个立即 值装载一个值到目的寄存器。可以指定相同的寄存器来 实现 NOP 指令的效果,还可以专门移位一个寄存器:
• MOV R0, R0 ; R0 = R0... NOP 指令

《汇编语言程序设计 —基于ARM体系结构 (第4版)》教学课件—03ARM指令系统

《汇编语言程序设计 —基于ARM体系结构 (第4版)》教学课件—03ARM指令系统

图3-1程序设计语言的层次结构
为了提高程序设计的效率,人们提出了汇编语言的概念。将机器码用指令助记符表示,这样就比机器语言方便得多。不过,在使用汇编语言后,虽然编程的效率和程序的可读性都有所提高,但汇编语言同机器语言非常接近,它的书写风格在很大程度上取决于特定计算机的机器指令,所以它仍然是一种面向机器的语言。 为了更好地进行程序设计,提高程序设计的效率,人们又提出了高级语言程序设计的概念。如C、JAVA等,这类高级语言对问题的描述十分接近人们的习惯,并且还具有较强的通用性。这就给程序员带来极大的方便。当然这类高级语言在执行前必须转换为汇编语言或其它中间语言,最终转换为机器语言。通常有两
3.2 ARM汇编语言
3.2.1指令和指令格式3.2.2指令的可选后缀3.2.3指令的条件执行3.2.4 ARM指令分类
3.2.1指令和指令格式
1.指令和指令系统 指令是指示计算机进行某种操作的命令 指令的集合称为指令系统。指令系统的功能强弱在很大程度上决定了这类计算机智能 的高低,它集中地反映了微处理器的硬件功能和属性。2.指令的表示方法从形式上看,ARM指令在机器中的表示格式是用32位的二进制数表示。计算机根据二 进制代码去完成所需的操作,如ARM中有一条指令为:ADDEQS R0,R1,#8;其二进制代码形式为:
3.1 指令基础
3.1.1程序设计语言的层次结构3.1.2指令周期和时序3.1.3程序的执行过程
3.1.1程序设计语言的层次结构
计算机程序设计语言的层次结构如图3-1所示,分为机器语言级、汇编语言级、高级语言级,机器语言是与计算机硬件最为密切的一种语言,它由微程序解释机器指令统。这一级也是硬件级,是软件系统和硬件系统之间的纽带。
例如:在8MHz的ARM微处理器中,一个 S 周期是125ns,而一个 N 周期 是 250ns。应当注意到这些时序不是 ARM 的属性,而是内存系统 的属性。例如,一个 8MHz的ARM微处理器可以与一个给出125ns 的 N 周期的 RAM 系统相连接。处理器的速率是 8MHz 只是简单 的意味着如果你使任何类型的周期,在长度上小于 125ns 则它不 保证能够工作。图3-2显示一种ARM存储器周期时序。

ARM初学入门

ARM初学入门

经过一段时间对ARM的学习,在这里跟大家说一些前期的学习经验,另外仅以一个例子说明一下ADS的开发过程,因为这也是初学,可能有的地方说的不太好,望大家谅解,另外可以找其它参考资料来学习。

第一部分:ARM前期学习经验个人认为,要想学好ARM应该首先对ARM的整体框架(包括ARM体系结构,ARM开发过程,及ARM程序框架及执行过程等)有一个了解。

这里这就不多说了,这些东西我也只是刚刚开始学习,还没有很好的掌握,就只说一些个人想法吧。

呵呵,因为时间比较紧张,本来说是一个星期搞定ARM,至少拿着书本可以一点点的做着,可是经过上一个星期,到最后,哇,真的快疯了。

刚开始拿到实验箱,以为和NIOS一样,多跑一些DEMO应该就差不多会玩了,没想到一开始就碰到一个大问题,ARM实验箱里边带了几本教材和实验指导书,拿着实验指导书做了几个DEMO就做不下去了,因为前两个DEMO还比较简单,就只是用汇编语言写了几条对ARM寄存器操作的语句,学过汇编语言的很快就可以理解了。

可是往后就不一样了,因为刚开始学,不太了解ARM程序的框架,实在是看不懂了,为什么每个全程里边都有用到44b.h ,44blib.h ,44blib.c还有一个44binit.s文件?前边三个还容易理解,玩过单片机的很容易就能看出来44b.h 里边定义了一些在S3C44B0X内部的寄存器,44blib.h和44blib.c定义了一些有关初始化的函数,而44binit.s呢?看不懂,到这里我的ARM程序就没法往下做了,只有在网上再找资料,看这个函数到底是干什么用的,原来这就是以前经常听说的“bootloader”或着说是“启动代码”,或着说是“ARM的引导程序”,就是处理器在启动的时候执行的一段代码,主要任务是初始化处理器模式,设置堆栈,初始化变量等等.由于以上的操作均与处理器体系结构和系统配置密切相关,所以一般由汇编来编写(关于这方面的内容大家可以查看相关资料)。

ARM快速入门教程

ARM快速入门教程

ARM快速入门教程ARM(Advanced RISC Machines)是一种基于精简指令集计算机(RISC)架构的处理器系列,被广泛应用于嵌入式系统、移动设备和消费类电子产品中。

本文将为您提供一个简单的ARM快速入门教程,帮助您了解ARM的基本概念和使用方法。

第一部分:ARM概述(200字)第二部分:ARM架构(300字)ARM架构采用RISC设计思想,通过简化指令集和优化硬件设计来提高性能和效率。

ARM处理器具有三个基本特征:简洁的指令集、统一的寄存器文件和可变长度的指令长度。

ARM指令集包括数据传输指令(如加载和存储指令)、算术指令(如加法和乘法指令)、控制指令(如分支和跳转指令)等。

这些指令被编码为16位或32位二进制代码,以提高指令执行效率。

ARM处理器的寄存器文件使用统一的32位寄存器,这意味着所有的寄存器都可以用于存储数据或表示内存地址。

该设计简化了指令集编码,并提高了程序的灵活性和扩展性。

与其他处理器架构相比,ARM指令的长度是可变的。

ARM处理器支持16位和32位的指令,根据实际需要进行选择。

这种设计也有利于降低功耗和提高代码密度。

第三部分:ARM开发环境(400字)要开始使用ARM进行开发,您需要一个ARM开发板、一台计算机和适当的开发环境。

ARM开发板是一种嵌入式系统,其中包含一块ARM处理器和各种外围设备(如闪存、RAM、串口等)。

您可以使用开发板来加载和运行您的ARM代码,并与外部设备进行交互。

第四部分:ARM编程(300字)ARM编程可以使用汇编语言或高级语言进行。

汇编语言是一种低级编程语言,直接对应于CPU的指令集。

使用汇编语言编程可以更加深入地了解和控制ARM处理器的操作。

高级语言(如C/C++)编程可以提高开发效率和代码可读性。

您可以使用C/C++编程语言编写ARM应用程序,然后通过交叉编译器将其编译成ARM指令。

在ARM编程中,您可以使用各种库函数和驱动程序来访问外部设备(如闪存、串口、显示屏等)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

献给ARM初学者ARM简介与编程1.ARM简介(摘录)ARM(Advanced RISC Machines)是微处理器行业的一家知名企业,设计了大量高性能、廉价、耗能低的RISC处理器、相关技术及软件。

技术具有性能高、成本低和能耗省的特点。

适用于多种领域,比如嵌入控制、消费/教育类多媒体、DSP和移动式应用等。

ARM将其技术授权给世界上许多著名的半导体、软件和OEM厂商,每个厂商得到的都是一套独一无二的ARM相关技术及服务。

利用这种合伙关系,ARM很快成为许多全球性RISC标准的缔造者。

目前,总共有30家半导体公司与ARM签订了硬件技术使用许可协议,其中包括Intel、IBM、LG 半导体、NEC、SONY、菲利浦和国民半导体这样的大公司。

至于软件系统的合伙人,则包括微软、升阳和MRI等一系列知名公司。

ARM架构是面向低预算市场设计的第一款RISC微处理器。

2.产品介绍ARM提供一系列内核、体系扩展、微处理器和系统芯片方案。

由于所有产品均采用一个通用的软件体系,所以相同的软件可在所有产品中运行(理论上如此)。

典型的产品如下。

①CPU内核--ARM7:小型、快速、低能耗、集成式RISC内核,用于移动通信。

-- ARM7TDMI(Thumb):这是公司授权用户最多的一项产品,将ARM7指令集同Thumb扩展组合在一起,以减少内存容量和系统成本。

同时,它还利用嵌入式ICE调试技术来简化系统设计,并用一个DS P增强扩展来改进性能。

该产品的典型用途是数字蜂窝电话和硬盘驱动器。

--ARM9TDMI:采用5阶段管道化ARM9内核,同时配备Thumb扩展、调试和Har var d总线。

在生产工艺相同的情况下,性能可达ARM7TDMI的两倍之多。

常用于连网和顶置盒。

②体系扩展-- Thumb:以16位系统的成本,提供32位RISC性能,特别注意的是它所需的内存容量非常小。

③嵌入式ICE调试由于集成了类似于ICE的CPU内核调试技术,所以原型设计和系统芯片的调试得到了极大的简化。

④微处理器--ARM710系列,包括ARM710、ARM710T、ARM720T和ARM740T:低价、低能耗、封装式常规系统微型处理器,配有高速缓存(Cache)、内存管理、写缓冲和JTAG。

广泛应用于手持式计算、数据通信和消费类多媒体。

--ARM940T、920T系列:低价、低能耗、高性能系统微处理器,配有Cache、内存管理和写缓冲。

应用于高级引擎管理、保安系统、顶置盒、便携计算机和高档打印机。

--StrongARM:性能很高、同时满足常规应用需要的一种微处理器技术,与DEC联合研制,后来授权给Intel。

SA110处理器、SA1100 PDA系统芯片和SA1500多媒体处理器芯片均采用了这一技术。

--ARM7500和ARM7500FE:高度集成的单芯片RISC计算机,基于一个缓存式ARM7 32位内核,拥有内存和I/O控制器、3个DMA通道、片上视频控制器和调色板以及立体声端口;ARM7500FE则增加了一个浮点运算单元以及对EDO DRAM的支持。

特别适合电视顶置盒和网络计算机(NC)。

Windows CE的Pocket PC只支持ARMWindows CE可支持多种嵌入式处理器,但基于Windows CE的Poc ket PC则只支持ARM一种。

微软在对SH3、MIPS、ARM等嵌入式处理器做了评估后认为,ARM是一种性价比较好的选择。

由于目前ARM在手持设备市场占有90%以上的份额,只支持ARM,可以有效地缩短应用程序开发与测试的时间,也降低了研发费用。

由于ARM开放其处理器授权,因此,用户在市场上可以在多家整机厂商中进行选择,从而保证了这一市场的竞争性。

2. ARM芯片CL-PS7111主要特点电平2.7v/3.3v.相对应CPU工作频率13MHz/18MHz. 13MHz位节电模式, 性能相当于33MHz Inter 486 PCARM710A内核ARM7 CPU8K 4向缓存(cache)MMU 带有64入口TLB(Transition Look-aside Buffer)DRAM控制器支持16位和32位DRAMROM/SRAM/Flash Memory 控制可译码4,5或6个独立的256M存储空间段每个存储段支持8位,16位和32位操作,并支持分页模式可编程ROM/SRAM/Flash Memory支持两个低功耗CL-PS6700 PC卡(PCMCIA)控制器2K 片内 SRAM用于程序快速执行片内Boot ROM (128Byte)两个同步串行接口支持SPI,或Microwire2兼容音频解码器(Audio Codec)27位通用接口GPIO(general-purpose I/O port)3个8位和1个3位GPIO port支持键盘阵列扫描(Scanning keyboard matrix)两个异步串口 UARTs支持高达115.2K 波特率内有两个接收发送(TX,RX) 16Bytes FIFOs缓冲支持MODEM控制信号DC-to-DC转换器接口提供两个96KHz时钟输出,通过编程duty ratio(1/16---15/16)操作LCD控制器直接信号扫描板接口,单色LCD面板的大小可编程从16到1024个像素,16个像素为一个单位视频帧大小可编程到128K byte每个像素点的位数可编程1,2,4位计时器和实时时钟两个16位计时器(Timer counter)和一个32位实时时钟(RTC)3. 调试工具及调试方法ARM Project Manager (APM) include ARM Debuger: 这个工具由ARM提供主要是开发程序, 编程调试ARM芯片, 有相当不错的开发环境和远端调试功能, 支持汇编和C. 它带有一个ARM自己的嵌入式操作系统ARM Angel, 用户可以在它的上面开发自己的嵌入式软件, 不过这个操作系统不是实时多任务的.通过计算机串口与处理器UART相连,设置计算机的超级终端 ( Hyper Terminal ), 通过超级终端察看硬件情况(寄存器设置,数据等)和程序运行情况,当然程序重要加入向UART送出数据的指令, 用Beep 报警也是经常用的. 这种调试方法是用于底层调试硬件,找出硬件存在的问题.VxWorks 在Shell 不能正常运行前,也是采取这种方法来调试程序,不过一般不是硬件问题,而是BSP中存在的问题,需要根据硬件,修改BSP.需要说明的是:上述方法是在没有硬件仿真器的情况下采用的,仿真器是底层调试硬件程序最好,最简便直观的办法。

4. ARM7 编程要点及示例ARM编程可参考程序示例 ARM_Boot Flash ROM驱动VxWorks image 装入ARM的过程:ARM7 有两种运行模式, Boot 模式和 Normal 模式, Boot模式主要是把程序装入(down load 或load ) Flash ROM中用的, Normal模式是一般运行程序用的.ARM7 Boot 模式时, Flash 的地址是0x70000000片选型号是CS0 (Normal模式下,Flash地址为0x000 00000)ARM7内部有128byte的BootROM和2K的SRAM,当需要Download VxWorks image时,ARM启动采用Boo t方式启动运行存在128byte BootROM中的程序初始化ARM内部的COM口,从COM口接受数据到2K的SRAM,这2K程序是用来真正Load VxWorks的,2K程序Load完毕后系统自动跳转到这2K程序执行,它的作用是再次初始化内部的COM口,通过COM口接受VxWorks到DRAM,然后由DRAM写入FLASH。

在主板2K SRAM运行的Boot Load程序执行过程,可参看程序示例中ARM Boot Load程序写入完毕后,切换到Normal模式重新启动系统,系统自动跳到FLASH 0X00000000开始运行VXWORKS。

用PC机上的COM1与ARM内部的UART1(COM)通信来Download VxWorks。

主要管脚定义32条数据线: D0-------D3128条地址线: A0-------A27 little endian 定义, 相对应数据排列 0 1 2 3 4 5 6--------276条片选信号脚: CS0-------CS5, 其实作用相当于地址线 A28------A314个8位的PORT口: PORT A, PORT B , PORT D主要用于外围芯片信号的控制. PORT E有双作用.例如 PORT A 控制键盘的行信号, PORT B 用于RS232, PORT D 用于控制MODEM, FPGA..外部中断信号EINT, EXTFIQ.编程时要根据主板原理图和硬件手册进行.看硬件图纸, 该芯片和CPU的那些管脚连结. 特别是 PORT 口和片选线.查CPU手册, 得到PORT 口和该片选的硬件地址.编程: 用PORT口直接对芯片操作,如开,关,RESET等, 用片选地址和芯片内地址结合对该外围芯片操作.Exception vectors, 中断向量表及中断分配Vector 地址 ExceptionException Mode Priority(1=High)0x0 ResetSvc 10x4 Undefined InstructionUndef 60x8 Software InterruptSvc 60xC Prefetch AbortAbort 50x10 Data AbortAbort 20x14 ReservedNot applicable Not applicable0x18 Interrupt (IRQ)irq 40x1C Fast Interrupt (FIQ)Fiq 3这个向量表必须要放置在系统地址0x00000000 (一般是逻辑地址, 即经过MMU映射后的地址)处. 一般是在这些地址上放跳转指令 BL, 跳到相应的地址空间执行相应的程序.如系统执行从0x00000000 Reset开始, Reset 跳转到某一地址开始运行操作系统.程序示例,中断向量表 (ARM asm):__VectorStart ; Start of ARM processor vectorsLDR pc,ResetV ; 00 - ResetLDR pc,UndefV ; 04 - Undefined instructionsLDR pc,SWIV ; 08 - SWI instructionsLDR pc,PAbortV ; 0C - Instruction fetch abortsLDR pc,DAbortV ; 10 - Data access abortsLDR pc,UnusedV ; 14 - Reserved (was address exception)LDR pc,IRQV ; 18 - IRQ interruptsLDR pc,FIQV ; 1C - FIQ interrupts中断号分配 (FIQ, IRQ)中断类型中断号 Name说明FIQ 0 外部中断 EXTFIQ 管脚 NEXT FIQ…… … …IRQ 5 外部中断 EINT1 管脚 NEINT1IRQ 6 外部中断 EINT2 管脚 NEINT2IRQ 7 外部中断 EINT3 管脚 NEINT3…… … …IRQ 12 内部中断 UTXINT1 UART1 TX FIFO 为空…… … …中断号也是寄存器INTMR和INTSR的位,所以在ARM中中断的编程要点是看硬件图纸, 该外设和CPU的那一个管脚连结.查CPU手册, 得到中断号及INTMR,INTSR的地址.编程注: 如果不是写底层driver, 只是在系统上层编程(如VxWorks, Linux) 知道中断号即可.程序示例(VxWorks)://登记中断号 5, 和相应的中断例程 ComISR.intConnect ( ( VOIDFUNCPTR * ) 5, ComISR, 0 ) ;//使能这中断intEnable ( ( VOIDFUNCPTR * ) 5 );……ARM Interrupts: ARM processors implement fast and normal level of interrupt,signalled ex ternally, synchronise interrupts before an exception is raised. A fast interrupt requst (FIQ) will desable subsequent normal and fast interrupt by setting the I and F bit in CP SR,and a normal interrup request(IRQ) will disable subsequent normal interrupt by settin g I bit in CPSR.计时器中断编程过程ARM7一般内部有两个16位计时器(Timer counter)和一个32位实时时钟(RTC),计时器中断属于IRQ中断,这里以计时器1为例叙述一下中断的编程过程设置interrup mask INTMR1寄存器 0x80000240 第8位TC1OI计时器1为使能. 在0x800000300 计时器 1 的数据寄存器TC1D写入指定数据,这样数据开始从这个给定的数开始递减计数,计数递减至 0 后,会产生一个溢出underflow IRQ中断请求,中断状态寄存器INTSR1 0x80000240 第8位TC1OI置位.系统会跳到中断向量表地址 0x00000018 处,执行相应的中断程序,中断程序通过判断中断的类型(判断中断状态寄存器的位),来执行相应的中断服务程序ISR. 中断状态寄存器标志位复位,计时器开始重新开始计时.存储空间管理单元(MMU)物理地址映射重点在于片选地址CS的选取,另外MMU映射需要参考这个物理地址ARM7 物理地址映射表地址内容大小备注0xF000.0000 Unused 256Mbytes0xE000.0000 Unused 256Mbytes0xD000.0000 DRAM Bank 1 256Mbytes0xC000.0000 DRAM Bank 0 256Mbytes 外接DRAM0x8000.2000 Unused --1Gbytes0x8000.0000 内部寄存器地址 8Kbytes 主要的I/O和控制0x7000.0000 Boot ROM 128 bytes 片内,封有Boot程序0x6000.0000 On-chip SRAM 2 Kbytes 片内,存放Load程序0x5000.0000 PCMCIA-1(NCS[5]) 4*64 Mbytes0x4000.0000 PCMCIA-0(NCS[4]) 4*64 Mbytes0x3000.0000 外部扩展(NCS[3]) 256Mbytes0x2000.0000 外部扩展(NCS[2]) 256Mbytes0x1000.0000 ROM Bank 1(NCS[1]) 256Mbytes0x0000.0000 ROM Bank 0(NCS[0]) 256Mbytes 外接Flash ROMMMU 虚拟(逻辑)地址和物理地址的映射实例Vxworks支持的ARM架构的处理器,一般是RAM的起始位置为0x0,而实际上ARM的物理地址0x0是ROM 的起始地址,RAM在高位地址.这就需要系统在Boot过程中,执行MMU程序,重新映射RAM和ROM的地址.即RAM起始地址为0x0.MMU主要有ARM7中协处理器coprocessor 15控制,coporocessor主要控制:片内的MMU指令和数据缓存(IDC)Write Buffer(WB)MMU有两层页表(two-level page table)用来进行虚拟地址向物理地址转换,CP15定义16个寄存器,只有MRC和MCR指令才能对它们操作.在VxWorks系统中,MMU表分成两部分:boot up table和final table.在文件ramAtHigh.h中定义.该表在文件romInit.s中初始化,语句为:BL _ramAtHigh_1(2)MMU映射实例虚拟(逻辑)地址(VxWorks系统) 硬件物理地址RAM 首地址 0x0000.0000Low Address 0x0000.1000High Address 0x0060.0000ROM 0x0100.0000其他的地址逻辑地址和物理地址映射地址不变0x8000.0000 内部寄存器...................................相同的颜色映射对应的地址ROM 0x0000.0000 VxWorks image和文件系统RAM 首地址 0xC000.0000 存放LCD,MMU表等0xC004.0000 中断向量表等0xC004.1000 VxWorks运行位置0xC064.0000 VxWorks从ROM解压后Copy的位置其他的地址映射地址不变0x8000.0000 内部寄存器............................ARM简介及编程1.ARM简介(摘录)ARM(Advanced RISC Machines)是微处理器行业的一家知名企业,设计了大量高性能、廉价、耗能低的RISC处理器、相关技术及软件。

相关文档
最新文档