【文档说明】ARM系统硬件设计基础课件.pptx,共(40)页,395.345 KB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-2042.html
以下为本文档部分文字说明:
1第4章ARM系统硬件设计基础主要内容1435ADS1.2集成开发环境简介基于ARM的汇编语言程序设计基于ARM的硬件启动程序基于ARM的C语言与汇编语言混合编程6印制电路板制作简介2RVDS2.2集成开发环境简介2第4
章ARM系统硬件设计基础4.1ADS1.2集成开发环境简介ADS的英文全称为ARMDeveloperSuite,是ARM公司推出的新一代ARM集成开发工具。ADS由六个部分组成,分别是:▪代码生成工具▪集成开发环境▪调试器▪指令集模拟器▪ARM开发包▪ARM应
用库3第4章ARM系统硬件设计基础4.1.1ADS1.2集成开发环境下工程的创建使用ADS创建工程的步骤:▪新建工程“File|New…”▪设置目标及其参数“Edit|DebugSettings…”▪向
工程中添加文件“Project|AddFiles”4第4章ARM系统硬件设计基础4.1.2ADS1.2集成开发环境下进行仿真和调试的方法在Codewarrior中,如果工程编译成功,将产生一个后缀为.axf的映像文件,接下来就可以使用AXDDebugger进行
调试。常用调试按钮5第4章ARM系统硬件设计基础主要内容1435ADS1.2集成开发环境简介基于ARM的汇编语言程序设计基于ARM的硬件启动程序基于ARM的C语言与汇编语言混合编程6印制电路板制作简介2RVDS2.2集成开发环境简介6第4章ARM系统
硬件设计基础4.2RVDS2.2集成开发环境简介•RealView®DevelopmentSuite(RVDS)是ARM公司继SDT与ADS1.2之后主推的新一代开发工具。•RVDS集成的RVCT是业内公认的能够支持所有ARM处理
器,并提供最好的执行性能的编译器;RVD是ARM系统调试方案的核心部分,支持含嵌入式操作系统的单核和多核处理器软件开发,可以同时提供相关联的系统级模型构建功能和应用级软件开发功能,为不同用户提供最为合适的调试功效
。目前全球基于ARM处理器的40亿个产品设备中,大部分的软件开发是基于RealView开发工具。安全、可靠和高性能地设计产品的最好选择就是购买ARMRealView开发工具。•RVDS向下兼容以前的版本(ADSv1.2.1、1.1、1.0.1)。7第4章ARM系统硬件设计基础8第4章ARM系统
硬件设计基础9第4章ARM系统硬件设计基础主要内容1435ADS1.2集成开发环境简介基于ARM的汇编语言程序设计基于ARM的硬件启动程序基于ARM的C语言与汇编语言混合编程6印制电路板制作简介2RVDS2.2集成开发环境简介10第4章ARM
系统硬件设计基础4.3.1ARM汇编器支持的伪指令伪指令是ARM汇编语言程序中的一些特殊指令助记符,这些助记符与指令系统的助记符不同,没有相对应的操作码,它们所完成的操作称为伪操作。伪指令在源程序中的作用是
为完成汇编程序做各种准备工作的,这些伪指令仅在汇编过程中起作用,一旦汇编结束,伪指令的使命就完成了。ARM汇编器支持的伪指令包括:符号定义伪指令、数据定义伪指令、汇编控制伪指令、宏指令以及其他伪指令。11第4章ARM
系统硬件设计基础分类指令举例符号定义伪指令GBLA/GBLL/GBLS/LCLA/LCLL/LCLS/SETA/SETL/SETS/RLISTGBLATest1;定义一个名为Test1的全局数值字变量数据定义伪指令DCB/DCW/DCD/DCFD/
DCFS/DCQ/SPACE/MAP/FIELDstrDCB“Thisisatest”;分配起始地址为str的一段连续字节存储单元存放字符串汇编控制伪指令IF/ELSE/ENDIF/WHILE/WEND/IFTest=TRUE;如果条件成立指令序列1;执行指令序列1ELSE;否则执行指
令序列2指令序列2ENDIF宏指令MACRO/MEND/MEXITMACROSeg指令序列MEND;定义一个名为Seg的宏指令其他伪指令AREA/ALIGN/CODE16/CODE32/ENTRY/END
/EQU/EXPORT/GLOBAL/IMPORT/EXTERN/GET/INCLUDE/INCBINAREAInit,CODE,READONLY,ALIGN=3;定义了一个代码段,段名为Init,属性为只读,并指定其
后的指令为8(23)字节对齐。ARM汇编器支持的常见伪指令12第4章ARM系统硬件设计基础4.3.2基于ARM的汇编语言语句格式ARM汇编语言的语句格式[标号][指令或伪指令][;注释]▪标号是代表地址的符号,必须在一行的顶
格书写,其后不能添加冒号“:”,而所有指令均不能顶格书写。▪ARM汇编语言对标识符的大小写敏感,书写标号及指令时字母大小写要一致。▪在ARM汇编语言中,ARM指令、伪指令、寄存器名等可以全部大写或者全部小写,但不能大小写混合使用。▪为了使源文件易读,可以将一条长的指令通过使
用反斜杠字符“\”将其分成几行书写。▪每行从第一个分号开始到本行结束为注释内容,所有的注释内容均被汇编起忽略。13第4章ARM系统硬件设计基础4.3.3ARM汇编语言程序的基本结构在ARM汇编语言程序中,以程序段为单位来组织代码。段是相对独立的指令或数据序列,具有特定的名称。段可以分为
代码段和数据段,代码段的内容为执行代码,数据段存放代码运行时所需的数据。可执行映像文件通常由以下几部分构成:▪一个或多个代码段,代码段为只读属性(RO)。▪零个或多个包含初始化数据的数据段,数据段的属性为可读写(RW)。▪零个或多个不包含初始化数据的数据段,数据段的属性为可读写(ZI)。14第4章
ARM系统硬件设计基础❖一个含有子程序调用的代码段的例子AREAInit,CODE,READONLYENTRYLDRR0,=0x3FF5000LDRR1,0x0fSTRR1,[R0]LDRR0,=0x3F50008LDRR1,0x1STRR1,[R0]BLPROC;子程序调用…
PROC;子程序开始…MOVPC,LR;从子程序返回…END15第4章ARM系统硬件设计基础❖一个数据段的例子AREADataArea,DATA,NOINIT,ALIGN=2DISPBUFSPACE200RCVBUFSPACE200…其中DATA为数据段的标识。16第4章ARM系统硬件
设计基础4.3.4基于ARM的汇编语言程序举例举例:连续发送128个ASCII字符的汇编语言的例子…;呼叫子程序UARTbUART;子程序开始UARTldrr0,=GPHCON;设置GPIO(RxD0,TxD0引脚)ldrr1,=0x2afaaastrr1,[
r0]ldrr0,=GPHUPldrr1,=0x7ffstrr1,[r0];;GPH[10:0]禁止上拉ldrr0,=UFCON0;禁用FIFOldrr1,=0x0strr1,[r0]ldrr0,=UMCON0;禁用AFCldrr1,=
0x0strr1,[r0]ldrr0,=ULCON0;设置线寄存器ldrr1,=0x3;正常模式,无奇偶校验,一个停止位,8个数据位strr1,[r0]ldrr0,=UCON0;设置Uart0控制器ldrr1,=0x2
45;RX边沿触发,TX电平触发,禁用延时中断,使用RX错误中断,;正常操作模式,中断请求或表决模式strr1,[r0]ldrr0,=UBRDIV0;设置波特率为115200ldrr1,=0x1a;int(50700000/16/115200)-1=26strr1,[r0]movr1
,#10017第4章ARM系统硬件设计基础Delaysubr1,r1,#0x1bneDelay;//开中断ldrr0,=INTMSKldrr1,[r0]andr1,r1,#0xefffffffstrr1,[r0]M
OVR5,#127;设置要打印的字符的个数MOVR1,#0x0;设置要打印的字符LOOPLDRR3,=UTRSTAT0LDRR2,[R3]TSTR2,#0x04;判断发送缓冲区是否为空BEQLOOP;为空则执行下边的语句,不为空则跳转到L
OOPLDRR0,=UTXH0STRR1,[R0];向数据缓冲区放置要发送的数据ADDR1,R1,#1SUBR5,R5,#0x01;计数器减1CMPR5,#0x0BNELOOP18第4章ARM系统硬件设计基础主要内容1435ADS1.2集成开发环境简介基于
ARM的汇编语言程序设计基于ARM的硬件启动程序基于ARM的C语言与汇编语言混合编程6印制电路板制作简介2RVDS2.2集成开发环境简介19第4章ARM系统硬件设计基础硬件启动程序的工作一般包括:(1)分配中断向量
表(2)初始化存储器系统(3)初始化各工作模式下的堆栈(4)初始化有特殊要求的硬件模块(5)初始化用户程序的执行环境(6)切换处理器的工作模式(7)呼叫主应用程序4.4基于ARM的硬件启动程序20第4章ARM系统硬件设计
基础❖(1)分配中断向量表中断地址复位0x00未定义0x04软件中断0x08预取中止0x0C数据中止0x10保留0x14IRQ0x18FIQ0x1CARM要求中断向量表必须放置在从0x0地址开始的连续32个字节空间内。AREAInit,CODE,READONLYE
NTRYBResetHandlerBUndefHandlerBSWIHandlerBPreAbortHandlerBDataAbortHandlerB.BIRQHandlerBFIQHandler中断向量表的程序通常如下所示:21第4章ARM系统硬件设计基础❖(2)初始化存储器系统对存
储系统的初始化操作包括对存储器类型、存储器容量、时序以及总线宽度等的配置。▪通常Flash和SRAM同属于静态存储器类型,可以合用同一个存储器端口;▪而DRAM因为有动态刷新和地址线复用等特性,通常配有专用的存储器端口;▪除了存储器外,与网络芯片相关的存储器配置以及外接大容量存储卡的配置也在这里进
行。22第4章ARM系统硬件设计基础❖(3)初始化各工作模式下的堆栈ARM有7种运行状态,每一种状态的堆栈指针寄存器(SP)都是独立的。程序需要对用到的每一种模式下的SP定义一个堆栈地址。定义的方法是改变状态寄存器内的状态位,使处理器切换到不同的状态,然后给SP赋值。;预定义处
理器模式常量USERMODEEQU0x10FIQMODEEQU0x11IRQMODEEQU0x12SVCMODEEQU0x13ABORTMODEEQU0x17UNDEFMODEEQU0x1bSYSMODEE
QU0x1fNOINTEQU0xc0InitStacksmrsr0,cpsrbicr0,r0,#MODEMASKorrr1,r0,#UNDEFMODE|NOINTmsrcpsr_cxsf,r1;//未定义模式堆栈ldrsp,=Un
defStackorrr1,r0,#ABORTMODE|NOINTmsrcpsr_cxsf,r1;//中止模式堆栈ldrsp,=AbortStackorrr1,r0,#IRQMODE|NOINTmsrcpsr_cxsf,r1;//中断模式堆栈ldrsp,=IRQ
Stackorrr1,r0,#FIQMODE|NOINTmsrcpsr_cxsf,r1;//快速中断模式堆栈ldrsp,=FIQStackbicr0,r0,#MODEMASK|NOINTorrr1,r0,#SVCMODEmsrcpsr_cxsf
,r1;//管理模式堆栈ldrsp,=SVCStackmovpc,lrLTORG23第4章ARM系统硬件设计基础❖(4)初始化有特殊要求的硬件模块这一部分的设置工作根据具体的系统和用户需求而定。一般外设初始化可以在系统初始化之后进行。比较典型的硬件模块有LED、时钟模块、看门狗模块等。24第4
章ARM系统硬件设计基础❖(5)初始化用户程序的执行环境可执行程序映像的结构:ZI(初始化为0的可读写数据)只定义了变量名的全局变量RW(可读写数据)定义时带初始值的全局变量RO(代码和只读数据)编译结果LDRr0,=|Image$$RO$$
Limit|;得到RW数据源在ROM中的的起始地址LDRr1,=|Image$$RW$$Base|;RW区在RAM里的起始地址LDRr3,=|Image$$ZI$$Base|;ZI区在RAM里的起始地址CMPr0,r1;比较它们是否相等BEQ%F10CMPr1,r3LDRCCr
2,[r0],#4STRCCr2,[r1],#4BCC%B01LDRr1,=|Image$$ZI$$Limit|MOVr2,#02CMPr3,r1STRCCr2,[r3],#4BCC%B225第4章ARM系统硬件设计基础❖(6)切换处理器的工作模
式需要注意的是,在最后阶段才能把模式转换到最终应用程序运行所需的模式,一般是用户模式。内核级的中断使能也可以考虑在这一步进行。在初始化过程中模式变化过程为:管理模式->各种特权模式(堆栈初始化阶段)->用户模式。26第4章ARM系统硬件设计基础❖(7)呼叫主应用程序当所有的系统
初始化工作完成之后,就需要把程序流程转入主应用程序。▪最简单的一种情况是:IMPORTMainBMain▪在ARMADS环境中,还另外提供了一套系统级的呼叫机制IMPORT__mainB__main__main()是编译系统提供的
一个函数,负责完成库函数的初始化和初始化应用程序执行环境,最后自动跳转到main()函数,此时要求用户主函数的名字必须是main。27第4章ARM系统硬件设计基础主要内容1435ADS1.2集成开发环境简介基于ARM的汇编语言程序设计基于
ARM的硬件启动程序基于ARM的C语言与汇编语言混合编程6印制电路板制作简介2RVDS2.2集成开发环境简介28第4章ARM系统硬件设计基础4.5.1C语言与汇编语言混合编程应遵守的规则在C程序和ARM汇编程序之间相互调用时必须遵守ATPCS规则。ATPCS规定了一些子程序间调用的基本规则,比如:
▪寄存器的使用规则✓子程序之间通过寄存器r0~r3来传递参数,当参数个数多于4个时,使用堆栈来传递参数。✓在子程序中,使用寄存器r4~r11保存局部变量。✓寄存器r12用于保存堆栈指针SP,当子程序返
回时使用该寄存器出栈,记作IP。寄存器r13用作堆栈指针,记作SP。寄存器r14称为链接寄存器,记作LR。该寄存器用于保存子程序的返回地址。寄存器r15称为程序计数器,记作PC。▪堆栈的使用规则堆栈采用满
递减类型(FD,FullDescending),即堆栈通过减小存储器地址而向下增长,堆栈指针指向内含有效数据项的最低地址。▪参数的传递规则✓整数参数的前4个使用r0~r3传递,其他参数使用堆栈传递;浮点参数使用编号最小且能够满足
需要的一组连续的FP寄存器传递参数✓子程序的返回结果为一个32位整数时,通过r0返回;返回结果为一个64位整数时,通过r0和r1返回;依此类推。结果为浮点数时,通过浮点运算部件的寄存器F0、D0或S0返
回29第4章ARM系统硬件设计基础4.5.2汇编程序调用C程序的方法汇编程序调用C程序的方法为:首先在汇编程序中使用IMPORT伪指令事先声明将要调用的C语言函数;然后通过BL指令来调用C函数。例如在一个C源文件中定义了如下求和函数:intadd(intx,inty){retur
n(x+y);}调用add()函数的汇编程序结构如下:IMPORTadd;声明要调用的C函数…MOVr0,1MOVr1,2BLadd;调用C函数add30第4章ARM系统硬件设计基础4.5.3C程序调用汇编程序的方法C程序调用汇编子程序的方法为:首先在汇编程序中使用EXPORT伪指令声明被调用的子
程序,表示该子程序将在其他文件中被调用;然后在C程序中使用extern关键字声明要调用的汇编子程序为外部函数。例如在一个汇编源文件中定义了如下求和函数:EXPORTadd;声明add子程序将被外部函数调用…add;求和子程
序addADDr0,r0,r1MOVpc,lr…在一个C程序的main()函数中对add汇编子程序进行了调用:externintadd(intx,inty);//声明add为外部函数voidmain(){inta=1,
b=2,c;c=add(a,b);//调用add子程序…}31第4章ARM系统硬件设计基础4.5.4C程序中内嵌汇编语句在C语言中内嵌汇编语句可以实现一些高级语言不能实现或者高级语言不容易实现的功能以及时间紧迫的功能。内嵌的汇编器支持大部分ARM指令和Thumb指令,但是不支持诸如直接修改PC实
现跳转的底层功能,也不能直接引用C语言中的变量。嵌入式汇编语句在形式上表现为独立定义的函数体,其语法格式为:__asm{指令[;指令]…[指令]}32第4章ARM系统硬件设计基础C程序中内嵌汇编语句举例•使能IRQ
中断:inlinevoidenable_IRQ(void){inttmp;_asm//嵌入汇编代码{MRStmp,CPSR//读取CPSR的值BICtmp,tmp,#0x80//将IRQ中断禁止位I清零,即允许IRQ中断MSRCPSR_c,tmp//设置CPSR的值}
}33第4章ARM系统硬件设计基础一个完整的例子•字符串复制:•#include<stdio.h>•voidmy_strcpy(constchar*src,char*dst)•{•intch;•_asm•{•loop:•#ifndef_thumb•/
/ARM指令版本•LDRBch,[src],#1•STRBch,[dst],#1•#else•//Thumb指令版本•LDRBch,[src]•ADDsrc,#1•STRBch,[dst]•ADDdst,#1•#endif•CMPch,#0•BNEloop•}•}34第4章ARM系
统硬件设计基础一个完整的例子(contiuned)•intmain(void)•{•constchar*a=“Helloworld!”•charb[20]•//my_strcpy(a,b);•_asm•{•MOVR0,a//设置入口参数•MOVR1,b•BLmy_
strcpy,{R0,R1}//调用my_strcpy()函数•}•printf(“Originalstring:’%s’\n,”a);//显示my_strcpy()函数字符串复制结果•printf(“Copiedstring:’%s’\n,”b);•return(0);•}35
第4章ARM系统硬件设计基础4.5.5基于ARM的C语言与汇编语言混合编程举例举例:一个向串口不断发送0x55的例子。#include"..\inc\config.h"//将有关硬件定义的头文件包含进来unsignedchardata;//定义全局
变量voidMain(void){Target_Init();//对目标板的硬件初始化Delay(10);//延时data=0x55;//给全局变量赋值while(1){Uart_Printf("%x",data);//向串口
送数Delay(10);}}…IMPORTMainAREAInit,CODE,READONLY;ENTRY…BLMain;跳转到Main()函数处的C/C++程序…END;标识汇编程序结束启动代码的整体框架C语言写的主函数36第4章ARM系统硬
件设计基础主要内容1435ADS1.2集成开发环境简介基于ARM的汇编语言程序设计基于ARM的硬件启动程序基于ARM的C语言与汇编语言混合编程6印制电路板制作简介2RVDS2.2集成开发环境简介37第4章ARM系统硬件设计基
础4.6.1印制电路板设计软件——ProtelProtel是流行的PCB设计工具之一,大多数PCB生产厂家都接受Protel设计格式的PCB文件。Protel基本上包括以下5大功能:▪原理图设计▪PCB设计▪自动布线▪可编程逻辑器件(PLD)设计▪电路仿真器件设计38第4章ARM系统硬件设计基础4
.6.2单面板与多层板单面板用一块板子作为基础,在板上规划元件的布局,确定元件的接点,使用接线柱做接点,用导线把接点按电路要求进行连接。在板的一面布线,另一面装元件。双面板在电路板的两面都有布线。为了使用两面的导线,必须要在两面间有适
当的电路连接才行。这种电路间的桥梁叫做过孔。过孔是在PCB上,充满或涂上金属的小洞,它可以与两面的导线相连接。多层板多层板使用数片双面板,并在每层板间放进一层绝缘层后压合。板子的层数就代表了有几层独立的布线层。在多层板PCB中,除了布置信号
线的信号层外,有的层整层都直接连接地线或电源,我们称之为地线层或电源层。39第4章ARM系统硬件设计基础4.6.3印制电路板设计的注意事项通常在设计印制电路板时,需要遵循以下设计原则:1.减少电源带来的噪声2.元器件布置要合理分区3
.元器件布局及走线方向尽可能合理4.注意印刷线路板与元器件的高频特性40第4章ARM系统硬件设计基础练习•一个典型的可执行映像由哪几部分组成?•汇编和C语言的相互调用方法