ARM系统硬件设计基础课件(PPT 40页)_第1页
ARM系统硬件设计基础课件(PPT 40页)_第2页
ARM系统硬件设计基础课件(PPT 40页)_第3页
ARM系统硬件设计基础课件(PPT 40页)_第4页
ARM系统硬件设计基础课件(PPT 40页)_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、主要内容1435ADS 1.2集成开发环境简介 基于ARM的汇编语言程序设计基于ARM的硬件启动程序基于ARM的C语言与汇编语言混合编程6印制电路板制作简介2RVDS 2.2 集成开发环境简介 第1页,共40页。 4.1 ADS 1.2集成开发环境简介 ADS的英文全称为 ARM Developer Suite,是ARM公司推出的新一代ARM集成开发工具。 ADS由六个部分组成,分别是:代码生成工具集成开发环境调试器指令集模拟器ARM开发包ARM应用库第2页,共40页。 4.1.1 ADS 1.2集成开发环境下工程的创建使用ADS创建工程的步骤 :新建工程 “File|New” 设置目标及其参

2、数 “Edit|Debug Settings” 向工程中添加文件 “Project|Add Files” 第3页,共40页。4.1.2 ADS1.2集成开发环境下进行仿真和调试的方法在Codewarrior中,如果工程编译成功,将产生一个后缀为.axf的映像文件,接下来就可以使用AXD Debugger进行调试。 常用调试按钮 第4页,共40页。主要内容1435ADS 1.2集成开发环境简介 基于ARM的汇编语言程序设计基于ARM的硬件启动程序基于ARM的C语言与汇编语言混合编程6印制电路板制作简介2RVDS 2.2 集成开发环境简介 第5页,共40页。4.2 RVDS 2.2 集成开发环境简

3、介 RealViewDevelopment Suite(RVDS)是ARM公司继SDT与ADS1.2之后主推的新一代开发工具。RVDS集成的RVCT是业内公认的能够支持所有ARM处理器,并提供最好的执行性能的编译器;RVD是ARM系统调试方案的核心部分,支持含嵌入式操作系统的单核和多核处理器软件开发,可以同时提供相关联的系统级模型构建功能和应用级软件开发功能,为不同用户提供最为合适的调试功效。目前全球基于ARM处理器的40亿个产品设备中,大部分的软件开发是基于RealView开发工具。安全、可靠和高性能地设计产品的最好选择就是购买ARM RealView开发工具。RVDS向下兼容以前的版本(A

4、DS v1.2.1、1.1、1.0.1)。第6页,共40页。第7页,共40页。第8页,共40页。主要内容1435ADS 1.2集成开发环境简介 基于ARM的汇编语言程序设计基于ARM的硬件启动程序基于ARM的C语言与汇编语言混合编程6印制电路板制作简介2RVDS 2.2 集成开发环境简介 第9页,共40页。 4.3.1 ARM汇编器支持的伪指令 伪指令是ARM汇编语言程序中的一些特殊指令助记符,这些助记符与指令系统的助记符不同,没有相对应的操作码,它们所完成的操作称为伪操作。伪指令在源程序中的作用是为完成汇编程序做各种准备工作的,这些伪指令仅在汇编过程中起作用,一旦汇编结束,伪指令的使命就完成

5、了。ARM汇编器支持的伪指令包括:符号定义伪指令、数据定义伪指令、汇编控制伪指令、宏指令以及其他伪指令。 第10页,共40页。分类指令举例符号定义伪指令GBLA/GBLL/GBLS/LCLA/LCLL/LCLS/SETA/SETL/SETS/RLISTGBLA Test1;定义一个名为Test1的全局数值字变量数据定义伪指令DCB/DCW/DCD/ DCFD/DCFS/DCQ/ SPACE/MAP/ FIELDstr DCB “This is a test”;分配起始地址为str的一段连续字节存储单元存放字符串汇编控制伪指令IF/ELSE/ENDIF/ WHILE/WEND/IF TestTR

6、UE ;如果条件成立 指令序列1 ;执行指令序列1ELSE ;否则执行指令序列2 指令序列2ENDIF宏指令MACRO/MEND/ MEXITMACRO Seg指令序列MEND;定义一个名为Seg的宏指令其他伪指令AREA/ALIGN/CODE16/CODE32/ENTRY/END/EQU/EXPORT/GLOBAL/IMPORT/EXTERN/GET/INCLUDE/INCBINAREA Init,CODE,READONLY,ALIGN=3;定义了一个代码段,段名为Init,属性为只读,并指定其后的指令为8(23)字节对齐。ARM汇编器支持的常见伪指令 第11页,共40页。 4.3.2 基于

7、ARM的汇编语言语句格式 ARM汇编语言的语句格式 标号 指令或伪指令 ;注释 标号是代表地址的符号,必须在一行的顶格书写,其后不能添加冒号“:”,而所有指令均不能顶格书写。ARM汇编语言对标识符的大小写敏感,书写标号及指令时字母大小写要一致。在ARM汇编语言中,ARM指令、伪指令、寄存器名等可以全部大写或者全部小写,但不能大小写混合使用。为了使源文件易读,可以将一条长的指令通过使用反斜杠字符“”将其分成几行书写。每行从第一个分号开始到本行结束为注释内容,所有的注释内容均被汇编起忽略。第12页,共40页。 4.3.3 ARM汇编语言程序的基本结构 在ARM汇编语言程序中,以程序段为单位来组织代

8、码。段是相对独立的指令或数据序列,具有特定的名称。段可以分为代码段和数据段,代码段的内容为执行代码,数据段存放代码运行时所需的数据。 可执行映像文件通常由以下几部分构成: 一个或多个代码段,代码段为只读属性(RO)。 零个或多个包含初始化数据的数据段,数据段的属性为可读写(RW)。 零个或多个不包含初始化数据的数据段,数据段的属性为可读写(ZI)。第13页,共40页。 一个含有子程序调用的代码段的例子AREA Init,CODE,READONLYENTRYLDR R0, =0 x3FF5000LDR R1, 0 x0fSTR R1, R0LDR R0, =0 x3F50008LDR R1, 0

9、 x1STR R1, R0BL PROC ;子程序调用PROC ;子程序开始MOV PC,LR ;从子程序返回END第14页,共40页。 一个数据段的例子AREA DataArea, DATA, NOINIT, ALIGN=2DISPBUFSPACE200RCVBUFSPACE200其中DATA为数据段的标识。 第15页,共40页。 4.3.4 基于ARM的汇编语言程序举例 举例:连续发送128个ASCII字符的汇编语言的例子 ;呼叫子程序UART b UART ;子程序开始UART ldr r0, =GPHCON ;设置GPIO(RxD0,TxD0引脚) ldr r1, =0 x2afaaa

10、 str r1, r0 ldr r0, =GPHUP ldr r1, =0 x7ff str r1, r0 ; ;GPH10:0禁止上拉 ldr r0, =UFCON0 ;禁用FIFO ldr r1, =0 x0 str r1, r0 ldr r0, =UMCON0 ;禁用AFC ldr r1, =0 x0 str r1, r0 ldr r0, =ULCON0 ;设置线寄存器 ldr r1, =0 x3 ;正常模式,无奇偶校验,一个停止位,8个数据位 str r1, r0 ldr r0, =UCON0 ;设置Uart0控制器 ldr r1, =0 x245 ;RX边沿触发,TX电平触发,禁用延

11、时中断,使用RX 错误中断, ;正常操作模式,中断请求或表决模式 str r1, r0 ldr r0, =UBRDIV0 ;设置波特率为115200 ldr r1, =0 x1a ;int(50700000 / 16 / 115200) - 1 = 26 str r1, r0 mov r1, #100第16页,共40页。Delay sub r1, r1, #0 x1 bne Delay ;/开中断 ldr r0, =INTMSK ldr r1, r0 and r1, r1, #0 xefffffff str r1, r0 MOV R5 , #127 ;设置要打印的字符的个数 MOV R1 ,

12、#0 x0 ;设置要打印的字符LOOP LDR R3 , =UTRSTAT0 LDR R2 , R3 TST R2 ,#0 x04 ;判断发送缓冲区是否为空 BEQ LOOP ;为空则执行下边的语句,不为空则跳转到LOOP LDR R0 , =UTXH0 STR R1 ,R0 ;向数据缓冲区放置要发送的数据 ADD R1, R1, #1 SUB R5 ,R5, #0 x01 ;计数器减1 CMP R5 ,#0 x0 BNE LOOP第17页,共40页。主要内容1435ADS 1.2集成开发环境简介 基于ARM的汇编语言程序设计基于ARM的硬件启动程序基于ARM的C语言与汇编语言混合编程6印制电

13、路板制作简介2RVDS 2.2 集成开发环境简介 第18页,共40页。硬件启动程序的工作一般包括:(1) 分配中断向量表(2) 初始化存储器系统(3) 初始化各工作模式下的堆栈(4) 初始化有特殊要求的硬件模块(5) 初始化用户程序的执行环境(6) 切换处理器的工作模式(7) 呼叫主应用程序 4.4 基于ARM的硬件启动程序第19页,共40页。 (1) 分配中断向量表中断地址复位0 x00未定义0 x04软件中断0 x08预取中止0 x0C数据中止0 x10保留0 x14IRQ0 x18FIQ0 x1CARM要求中断向量表必须放置在从0 x0地址开始的连续32个字节空间内。 AREA Init

14、 ,CODE, READONLYENTRYB ResetHandlerB UndefHandlerB SWIHandlerB PreAbortHandlerB DataAbortHandlerBB IRQHandlerB FIQHandler 中断向量表的程序通常如下所示: 第20页,共40页。(2) 初始化存储器系统 对存储系统的初始化操作包括对存储器类型、存储器容量、时序以及总线宽度等的配置。通常Flash和SRAM同属于静态存储器类型,可以合用同一个存储器端口;而DRAM因为有动态刷新和地址线复用等特性,通常配有专用的存储器端口;除了存储器外,与网络芯片相关的存储器配置以及外接大容量存储

15、卡的配置也在这里进行。第21页,共40页。(3) 初始化各工作模式下的堆栈 ARM有7种运行状态,每一种状态的堆栈指针寄存器(SP)都是独立的。程序需要对用到的每一种模式下的SP定义一个堆栈地址。定义的方法是改变状态寄存器内的状态位,使处理器切换到不同的状态,然后给SP赋值。 ;预定义处理器模式常量USERMODE EQU0 x10FIQMODE EQU0 x11IRQMODE EQU0 x12SVCMODE EQU 0 x13ABORTMODE EQU 0 x17UNDEFMODE EQU 0 x1bSYSMODE EQU 0 x1fNOINT EQU0 xc0InitStacksmrsr0

16、,cpsrbicr0,r0,#MODEMASKorrr1,r0,#UNDEFMODE|NOINTmsrcpsr_cxsf,r1;/未定义模式堆栈ldrsp,=UndefStackorrr1,r0,#ABORTMODE|NOINTmsrcpsr_cxsf,r1;/中止模式堆栈ldrsp,=AbortStackorrr1,r0,#IRQMODE|NOINTmsrcpsr_cxsf,r1;/中断模式堆栈ldrsp,=IRQStackorrr1,r0,#FIQMODE|NOINTmsrcpsr_cxsf,r1;/快速中断模式堆栈ldrsp,=FIQStackbicr0,r0,#MODEMASK|NOI

17、NTorrr1,r0,#SVCMODEmsrcpsr_cxsf,r1;/管理模式堆栈ldrsp,=SVCStackmovpc,lr LTORG第22页,共40页。(4) 初始化有特殊要求的硬件模块 这一部分的设置工作根据具体的系统和用户需求而定。一般外设初始化可以在系统初始化之后进行。比较典型的硬件模块有LED、时钟模块、看门狗模块等。 第23页,共40页。(5) 初始化用户程序的执行环境可执行程序映像的结构: ZI(初始化为0的可读写数据)只定义了变量名的全局变量RW(可读写数据)定义时带初始值的全局变量RO(代码和只读数据)编译结果LDR r0,=|Image$RO$Limit| ;得到R

18、W数据源在ROM中的的起始地址LDR r1,=|Image$RW$Base| ;RW区在RAM里的起始地址LDR r3,=|Image$ZI$Base| ;ZI区在RAM里的起始地址CMP r0,r1 ;比较它们是否相等 BEQ %F10 CMP r1,r3 LDRCC r2,r0,#4 STRCC r2,r1,#4 BCC %B01 LDR r1,=|Image$ZI$Limit| MOV r2,#02 CMP r3,r1 STRCC r2,r3,#4 BCC %B2第24页,共40页。(6) 切换处理器的工作模式需要注意的是,在最后阶段才能把模式转换到最终应用程序运行所需的模式,一般是用户

19、模式。内核级的中断使能也可以考虑在这一步进行。在初始化过程中模式变化过程为:管理模式各种特权模式(堆栈初始化阶段)用户模式。第25页,共40页。(7) 呼叫主应用程序当所有的系统初始化工作完成之后,就需要把程序流程转入主应用程序。最简单的一种情况是:IMPORT MainB Main在ARM ADS环境中,还另外提供了一套系统级的呼叫机制IMPORT _mainB _main_main()是编译系统提供的一个函数,负责完成库函数的初始化和初始化应用程序执行环境,最后自动跳转到main()函数,此时要求用户主函数的名字必须是main。第26页,共40页。主要内容1435ADS 1.2集成开发环境

20、简介 基于ARM的汇编语言程序设计基于ARM的硬件启动程序基于ARM的C语言与汇编语言混合编程6印制电路板制作简介2RVDS 2.2 集成开发环境简介 第27页,共40页。 4.5.1 C语言与汇编语言混合编程应遵守的规则 在C程序和ARM汇编程序之间相互调用时必须遵守ATPCS规则。ATPCS规定了一些子程序间调用的基本规则,比如:寄存器的使用规则子程序之间通过寄存器r0r3来传递参数,当参数个数多于4个时,使用堆栈来传递参数。在子程序中,使用寄存器r4r11保存局部变量。寄存器r12用于保存堆栈指针SP,当子程序返回时使用该寄存器出栈,记作IP。寄存器r13用作堆栈指针,记作SP。寄存器r

21、14称为链接寄存器,记作LR。该寄存器用于保存子程序的返回地址。寄存器r15称为程序计数器,记作PC。 堆栈的使用规则堆栈采用满递减类型(FD,Full Descending),即堆栈通过减小存储器地址而向下增长,堆栈指针指向内含有效数据项的最低地址。 参数的传递规则整数参数的前4个使用r0r3传递,其他参数使用堆栈传递;浮点参数使用编号最小且能够满足需要的一组连续的FP寄存器传递参数子程序的返回结果为一个32位整数时,通过r0返回;返回结果为一个64位整数时,通过r0和r1返回;依此类推。结果为浮点数时,通过浮点运算部件的寄存器F0、D0或S0返回第28页,共40页。 4.5.2 汇编程序调

22、用C程序的方法 汇编程序调用C程序的方法为:首先在汇编程序中使用IMPORT伪指令事先声明将要调用的C语言函数;然后通过BL指令来调用C函数。 例如在一个C源文件中定义了如下求和函数:int add(int x,int y) return(x+y);调用add()函数的汇编程序结构如下: IMPORT add ;声明要调用的C函数MOV r0,1MOV r1,2BL add ;调用C函数add第29页,共40页。 4.5.3 C程序调用汇编程序的方法 C程序调用汇编子程序的方法为:首先在汇编程序中使用EXPORT伪指令声明被调用的子程序,表示该子程序将在其他文件中被调用;然后在C程序中使用ex

23、tern关键字声明要调用的汇编子程序为外部函数。 例如在一个汇编源文件中定义了如下求和函数:EXPORT add ;声明add子程序将被外部函数调用add ;求和子程序add ADD r0,r0,r1 MOV pc,lr 在一个C程序的main()函数中对add汇编子程序进行了调用:extern int add(int x,int y); /声明add为外部函数void main() int a=1,b=2,c; c=add(a,b); /调用add子程序 第30页,共40页。 4.5.4 C程序中内嵌汇编语句 在C语言中内嵌汇编语句可以实现一些高级语言不能实现或者高级语言不容易实现的功能以及

24、时间紧迫的功能。内嵌的汇编器支持大部分ARM指令和Thumb指令,但是不支持诸如直接修改PC实现跳转的底层功能,也不能直接引用C语言中的变量。嵌入式汇编语句在形式上表现为独立定义的函数体,其语法格式为:_ _asm 指令;指令 指令第31页,共40页。C程序中内嵌汇编语句举例使能IRQ中断: inline void enable_IRQ(void) int tmp ; _asm /嵌入汇编代码 MRS tmp,CPSR /读取CPSR的值 BIC tmp,tmp,#0 x80 /将IRQ中断禁止位I清零,即允许IRQ中断 MSR CPSR_c,tmp /设置CPSR的值 第32页,共40页。一

25、个完整的例子字符串复制: #include void my_strcpy(const char*src, char*dst) int ch; _asm loop: #ifndef_thumb /ARM指令版本 LDRB ch,src,#1 STRB ch,dst,#1 #else /Thumb指令版本 LDRB ch,src ADD src,#1 STRB ch,dst ADD dst,#1 #endif CMP ch,#0 BNE loop 第33页,共40页。一个完整的例子(contiuned)int main(void) const char*a=“Hello world!” char

26、b20 /my_strcpy(a,b); _asm MOV R0,a /设置入口参数 MOV R1,b BL my_strcpy,R0,R1 /调用my_strcpy()函数 printf(“Original string:%sn,”a); /显示my_strcpy()函数字符串复制结果 printf(“Copied string:%sn,”b); return(0); 第34页,共40页。 4.5.5 基于ARM的C语言与汇编语言混合编程举例 举例:一个向串口不断发送0 x55的例子。#include .incconfig.h /将有关硬件定义的头文件包含进来unsigned char data; /定义全局变量void Main(void) Target_Init(); /对目标板的硬件初始化 Delay(10); /延时 data =

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论