ARM系统硬件设计基础课件(PPT 40页)

上传人:cl****1 文档编号:567622685 上传时间:2024-07-21 格式:PPT 页数:40 大小:6.20MB
返回 下载 相关 举报
ARM系统硬件设计基础课件(PPT 40页)_第1页
第1页 / 共40页
ARM系统硬件设计基础课件(PPT 40页)_第2页
第2页 / 共40页
ARM系统硬件设计基础课件(PPT 40页)_第3页
第3页 / 共40页
ARM系统硬件设计基础课件(PPT 40页)_第4页
第4页 / 共40页
ARM系统硬件设计基础课件(PPT 40页)_第5页
第5页 / 共40页
点击查看更多>>
资源描述

《ARM系统硬件设计基础课件(PPT 40页)》由会员分享,可在线阅读,更多相关《ARM系统硬件设计基础课件(PPT 40页)(40页珍藏版)》请在金锄头文库上搜索。

1、1第第4 4章章 ARMARM系统硬件设计基础系统硬件设计基础主要内容1 14 43 35 5ADS 1.2集成开发环境简介集成开发环境简介 基于基于ARM的汇编语言程序设计的汇编语言程序设计基于基于ARM的硬件启动程序的硬件启动程序基于基于ARM的的C语言与汇编语言混合编程语言与汇编语言混合编程6 6印制电路板制作简介印制电路板制作简介2 2RVDS 2.2 集成开发环境简介集成开发环境简介 第1页,共40页。2第第4 4章章 ARMARM系统硬件设计基础系统硬件设计基础 4.1 ADS 1.2集成开发环境简介 ADS ADS的英文全称为的英文全称为 ARM Developer SuiteA

2、RM Developer Suite,是是ARMARM公司推出的公司推出的新一代新一代ARMARM集成开发工具。集成开发工具。 ADS ADS由六个部分组成,分别是:由六个部分组成,分别是:代码生成工具代码生成工具集成开发环境集成开发环境调试器调试器指令集模拟器指令集模拟器ARMARM开发包开发包ARMARM应用库应用库第2页,共40页。3第第4 4章章 ARMARM系统硬件设计基础系统硬件设计基础 4.1.1 ADS 1.2集成开发环境下工程的创建使用使用ADSADS创建工程的步骤创建工程的步骤 :新建工程新建工程 “File|NewFile|New” 设置目标及其参数设置目标及其参数 “E

3、dit|Debug SettingsEdit|Debug Settings” 向工程中添加文件向工程中添加文件 “Project|Add FilesProject|Add Files” 第3页,共40页。4第第4 4章章 ARMARM系统硬件设计基础系统硬件设计基础4.1.2ADS1.2集成开发环境下进行仿真和调试的方法集成开发环境下进行仿真和调试的方法在在CodewarriorCodewarrior中,如果中,如果工程编译成功,将产生一工程编译成功,将产生一个后缀为个后缀为. .axfaxf的映像文件,的映像文件,接下来就可以使用接下来就可以使用AXD AXD DebuggerDebugge

4、r进行调试。进行调试。 常用调试按钮常用调试按钮 第4页,共40页。5第第4 4章章 ARMARM系统硬件设计基础系统硬件设计基础主要内容1 14 43 35 5ADS 1.2集成开发环境简介集成开发环境简介 基于基于ARM的汇编语言程序设计的汇编语言程序设计基于基于ARM的硬件启动程序的硬件启动程序基于基于ARM的的C语言与汇编语言混合编程语言与汇编语言混合编程6 6印制电路板制作简介印制电路板制作简介2 2RVDS 2.2 集成开发环境简介集成开发环境简介 第5页,共40页。6第第4 4章章 ARMARM系统硬件设计基础系统硬件设计基础4.2RVDS2.2集成开发环境简介集成开发环境简介R

5、ealViewDevelopmentSuite(RVDS)是)是ARM公司继公司继SDT与与ADS1.2之后主推的新一代开发工具。之后主推的新一代开发工具。RVDS集成的集成的RVCT是业内公认的能够支持所有是业内公认的能够支持所有ARM处理器,并处理器,并提供最好的执行性能的编译器;提供最好的执行性能的编译器;RVD是是ARM系统调试方案的核系统调试方案的核心部分,支持含嵌入式操作系统的单核和多核处理器软件开发,心部分,支持含嵌入式操作系统的单核和多核处理器软件开发,可以同时提供相关联的系统级模型构建功能和应用级软件开发可以同时提供相关联的系统级模型构建功能和应用级软件开发功能,为不同用户提

6、供最为合适的调试功效。目前全球基于功能,为不同用户提供最为合适的调试功效。目前全球基于ARM处理器的处理器的40亿个产品设备中,大部分的软件开发是基于亿个产品设备中,大部分的软件开发是基于RealView开发工具。安全、可靠和高性能地设计产品的最好开发工具。安全、可靠和高性能地设计产品的最好选择就是购买选择就是购买ARMRealView开发工具。开发工具。RVDS向下兼容以前的版本(向下兼容以前的版本(ADSv1.2.1、1.1、1.0.1)。)。第6页,共40页。7第第4 4章章 ARMARM系统硬件设计基础系统硬件设计基础第7页,共40页。8第第4 4章章 ARMARM系统硬件设计基础系统

7、硬件设计基础第8页,共40页。9第第4 4章章 ARMARM系统硬件设计基础系统硬件设计基础主要内容1 14 43 35 5ADS 1.2集成开发环境简介集成开发环境简介 基于基于ARM的汇编语言程序设计的汇编语言程序设计基于基于ARM的硬件启动程序的硬件启动程序基于基于ARM的的C语言与汇编语言混合编程语言与汇编语言混合编程6 6印制电路板制作简介印制电路板制作简介2 2RVDS 2.2 集成开发环境简介集成开发环境简介 第9页,共40页。10第第4 4章章 ARMARM系统硬件设计基础系统硬件设计基础 4.3.1 ARM汇编器支持的伪指令 伪伪指指令令是是ARMARM汇汇编编语语言言程程序

8、序中中的的一一些些特特殊殊指指令令助助记记符符,这这些些助助记记符符与与指指令令系系统统的的助助记记符符不不同同,没没有有相相对对应应的的操操作作码码,它它们们所所完完成成的的操作称为伪操作。操作称为伪操作。伪伪指指令令在在源源程程序序中中的的作作用用是是为为完完成成汇汇编编程程序序做做各各种种准准备备工工作作的的,这这些些伪伪指指令令仅仅在在汇汇编编过过程程中中起起作作用用,一一旦旦汇汇编编结结束束,伪伪指指令令的的使使命就完成了。命就完成了。ARMARM汇编器支持的伪指令包括:符号定义伪指令、数据定义伪指汇编器支持的伪指令包括:符号定义伪指令、数据定义伪指令、汇编控制伪指令、宏指令以及其他

9、伪指令。令、汇编控制伪指令、宏指令以及其他伪指令。 第10页,共40页。11第第4 4章章 ARMARM系统硬件设计基础系统硬件设计基础分类分类指令指令举例举例符号定义符号定义伪指令伪指令GBLA/GBLL/GBLS/LCLA/LCLL/LCLS/SETA/SETL/SETS/RLISTGBLATest1;定义一个名为定义一个名为Test1的全局数值字变量的全局数值字变量数据定义数据定义伪指令伪指令DCB/DCW/DCD/DCFD/DCFS/DCQ/SPACE/MAP/FIELDstrDCB“Thisisatest”;分分配配起起始始地地址址为为str的的一一段段连连续续字字节节存存储储单元存

10、放字符串单元存放字符串汇编控制汇编控制伪指令伪指令IF/ELSE/ENDIF/WHILE/WEND/IFTestTRUE;如果条件成立如果条件成立指令序列指令序列1;执行指令序列执行指令序列1ELSE;否则执行指令序列否则执行指令序列2指令序列指令序列2ENDIF宏指令宏指令MACRO/MEND/MEXITMACROSeg指令序列指令序列MEND;定义一个名为定义一个名为Seg的宏指令的宏指令其他其他伪指令伪指令AREA/ALIGN/CODE16/CODE32/ENTRY/END/EQU/EXPORT/GLOBAL/IMPORT/EXTERN/GET/INCLUDE/INCBINAREAIni

11、t,CODE,READONLY,ALIGN=3;定定义义了了一一个个代代码码段段,段段名名为为Init,属属性性为为只只读读,并并指指定定其其后后的的指指令令为为8(23)字字节对齐。节对齐。ARMARM汇编器支持的常见伪指令汇编器支持的常见伪指令 第11页,共40页。12第第4 4章章 ARMARM系统硬件设计基础系统硬件设计基础 4.3.2 基于ARM的汇编语言语句格式 ARMARM汇编语言的语句格式汇编语言的语句格式 标号标号 指令或伪指令指令或伪指令 ; ;注注释释 标标号号是是代代表表地地址址的的符符号号,必必须须在在一一行行的的顶顶格格书书写写,其其后后不不能能添添加加冒冒号号“:

12、”,而所有指令均不能顶格书写。,而所有指令均不能顶格书写。ARMARM汇汇编编语语言言对对标标识识符符的的大大小小写写敏敏感感,书书写写标标号号及及指指令令时时字字母母大大小小写写要要一一致。致。在在ARMARM汇汇编编语语言言中中,ARMARM指指令令、伪伪指指令令、寄寄存存器器名名等等可可以以全全部部大大写写或或者者全全部部小写,但不能大小写混合使用。小写,但不能大小写混合使用。为为了了使使源源文文件件易易读读,可可以以将将一一条条长长的的指指令令通通过过使使用用反反斜斜杠杠字字符符“ ”将将其其分成几行书写。分成几行书写。每每行行从从第第一一个个分分号号开开始始到到本本行行结结束束为为注

13、注释释内内容容,所所有有的的注注释释内内容容均均被被汇编起忽略。汇编起忽略。第12页,共40页。13第第4 4章章 ARMARM系统硬件设计基础系统硬件设计基础 4.3.3 ARM汇编语言程序的基本结构 在在ARMARM汇汇编编语语言言程程序序中中,以以程程序序段段为为单单位位来来组组织织代代码码。段段是是相相对对独独立立的的指指令令或或数数据据序序列列,具具有有特特定定的的名名称称。段段可可以以分分为为代代码码段段和和数数据据段段,代代码码段段的的内内容容为为执执行行代代码码,数数据据段段存存放放代代码码运运行行时所需的数据。时所需的数据。 可执行映像文件通常由以下几部分构成:可执行映像文件

14、通常由以下几部分构成: 一个或多个代码段,代码段为只读属性(一个或多个代码段,代码段为只读属性(RORO)。)。 零零个个或或多多个个包包含含初初始始化化数数据据的的数数据据段段,数数据据段段的的属属性性为为可读写(可读写(RWRW)。)。 零零个个或或多多个个不不包包含含初初始始化化数数据据的的数数据据段段,数数据据段段的的属属性性为可读写(为可读写(ZIZI)。)。第13页,共40页。14第第4 4章章 ARMARM系统硬件设计基础系统硬件设计基础v 一个含有子程序调用的代码段的例子一个含有子程序调用的代码段的例子AREA InitAREA Init,CODECODE,READONLYRE

15、ADONLYENTRYENTRYLDR R0, =0x3FF5000LDR R0, =0x3FF5000LDR R1, 0x0fLDR R1, 0x0fSTR R1, R0STR R1, R0LDR R0, =0x3F50008LDR R0, =0x3F50008LDR R1, 0x1LDR R1, 0x1STR R1, R0STR R1, R0BL PROC BL PROC ;子程序调用子程序调用PROC PROC ;子程序开始子程序开始MOV PC,LR MOV PC,LR ;从子程序返回从子程序返回ENDEND第14页,共40页。15第第4 4章章 ARMARM系统硬件设计基础系统硬件设

16、计基础v 一个数据段的例子一个数据段的例子AREA DataArea, DATA, NOINIT, ALIGN=2AREA DataArea, DATA, NOINIT, ALIGN=2DISPBUFDISPBUFSPACESPACE200200RCVBUFRCVBUFSPACESPACE200200其中其中DATADATA为数据段的标识。为数据段的标识。 第15页,共40页。16第第4 4章章 ARMARM系统硬件设计基础系统硬件设计基础 4.3.4 基于ARM的汇编语言程序举例 举例:连续发送举例:连续发送128128个个ASCIIASCII字符的汇编语言的例子字符的汇编语言的例子 ; ;

17、呼叫子程序呼叫子程序UARTUART b UART b UART ; ;子程序开始子程序开始UARTUART ldr r0, =GPHCON ;ldr r0, =GPHCON ;设置设置GPIO(RxD0,TxD0GPIO(RxD0,TxD0引脚引脚) ) ldr r1, =0x2afaaaldr r1, =0x2afaaa str r1, r0 str r1, r0 ldr r0, =GPHUP ldr r0, =GPHUP ldr r1, =0x7ff ldr r1, =0x7ff str r1, r0 ; ;GPH10:0 str r1, r0 ; ;GPH10:0禁止上拉禁止上拉 ld

18、r r0, =UFCON0 ;ldr r0, =UFCON0 ;禁用禁用FIFOFIFO ldr r1, =0x0 ldr r1, =0x0 str r1, r0 str r1, r0 ldr r0, =UMCON0 ; ldr r0, =UMCON0 ;禁用禁用AFCAFC ldr r1, =0x0 ldr r1, =0x0 str r1, r0 str r1, r0 ldr r0, =ULCON0 ; ldr r0, =ULCON0 ;设置线寄存器设置线寄存器 ldr r1, =0x3 ;ldr r1, =0x3 ;正常模式正常模式, ,无奇偶校验无奇偶校验, ,一个停止位一个停止位,8,

19、8个数据位个数据位 str r1, r0str r1, r0 ldr r0, =UCON0 ; ldr r0, =UCON0 ;设置设置Uart0Uart0控制器控制器 ldr r1, =0x245 ;RXldr r1, =0x245 ;RX边沿触发边沿触发, ,TXTX电平触发电平触发, ,禁用延时中断禁用延时中断, ,使用使用RX RX 错误中断错误中断, , ; ;正常操作模式正常操作模式, ,中断请求或表决模式中断请求或表决模式 str r1, r0str r1, r0 ldr r0, =UBRDIV0 ; ldr r0, =UBRDIV0 ;设置波特率为设置波特率为115200115

20、200 ldr r1, =0x1a ;int(50700000 / 16 / 115200) - 1 = 26ldr r1, =0x1a ;int(50700000 / 16 / 115200) - 1 = 26 str r1, r0 str r1, r0 mov r1, #100 mov r1, #100第16页,共40页。17第第4 4章章 ARMARM系统硬件设计基础系统硬件设计基础DelayDelay sub r1, r1, #0x1 sub r1, r1, #0x1 bne Delay bne Delay ;/ ;/开中断开中断 ldr r0, =INTMSKldr r0, =INT

21、MSK ldr r1, r0 ldr r1, r0 and r1, r1, #0xefffffff and r1, r1, #0xefffffff str r1, r0 str r1, r0 MOV R5 , #127 ; MOV R5 , #127 ;设置要打印的字符的个数设置要打印的字符的个数 MOV R1 , #0x0 ;MOV R1 , #0x0 ;设置要打印的字符设置要打印的字符LOOP LOOP LDR R3 , =UTRSTAT0 LDR R3 , =UTRSTAT0 LDR R2 , R3 LDR R2 , R3 TST R2 ,#0x04 ; TST R2 ,#0x04 ;判

22、断发送缓冲区是否为空判断发送缓冲区是否为空 BEQ LOOP ;BEQ LOOP ;为空则执行下边的语句,不为空则跳转到为空则执行下边的语句,不为空则跳转到LOOPLOOP LDR R0 , =UTXH0 LDR R0 , =UTXH0 STR R1 ,R0 ; STR R1 ,R0 ;向数据缓冲区放置要发送的数据向数据缓冲区放置要发送的数据 ADD R1, R1, #1ADD R1, R1, #1 SUB R5 ,R5, #0x01 ; SUB R5 ,R5, #0x01 ;计数器减计数器减1 1 CMP R5 ,#0x0CMP R5 ,#0x0 BNE LOOP BNE LOOP第17页,

23、共40页。18第第4 4章章 ARMARM系统硬件设计基础系统硬件设计基础主要内容1 14 43 35 5ADS 1.2集成开发环境简介集成开发环境简介 基于基于ARM的汇编语言程序设计的汇编语言程序设计基于基于ARM的硬件启动程序的硬件启动程序基于基于ARM的的C语言与汇编语言混合编程语言与汇编语言混合编程6 6印制电路板制作简介印制电路板制作简介2 2RVDS 2.2 集成开发环境简介集成开发环境简介 第18页,共40页。19第第4 4章章 ARMARM系统硬件设计基础系统硬件设计基础硬件启动程序的工作一般包括:硬件启动程序的工作一般包括:(1 1) 分配中断向量表分配中断向量表(2 2)

24、 初始化存储器系统初始化存储器系统(3 3) 初始化各工作模式下的堆栈初始化各工作模式下的堆栈(4 4) 初始化有特殊要求的硬件模块初始化有特殊要求的硬件模块(5 5) 初始化用户程序的执行环境初始化用户程序的执行环境(6 6) 切换处理器的工作模式切换处理器的工作模式(7 7) 呼叫主应用程序呼叫主应用程序 4.4 基于ARM的硬件启动程序第19页,共40页。20第第4 4章章 ARMARM系统硬件设计基础系统硬件设计基础v (1 1) 分配中断向量表分配中断向量表中断中断地址地址复位复位0 0x00x00未定义未定义0 0x04x04软件中断软件中断0 0x08x08预取中止预取中止0 0

25、x0Cx0C数据中止数据中止0 0x10x10保留保留0 0x14x14IRQIRQ0 0x18x18FIQFIQ0 0x1Cx1CARMARM要求中断向量表必须放置在从要求中断向量表必须放置在从0 0x0x0地址开始的连续地址开始的连续3232个字节空间内。个字节空间内。 AREA Init ,CODE, READONLYAREA Init ,CODE, READONLYENTRYENTRYB ResetHandlerB ResetHandlerB UndefHandlerB UndefHandlerB SWIHandlerB SWIHandlerB PreAbortHandlerB Pre

26、AbortHandlerB DataAbortHandlerB DataAbortHandlerB BB IRQHandlerB IRQHandlerB FIQHandlerB FIQHandler中断向量表的程序通常如下所示:中断向量表的程序通常如下所示: 第20页,共40页。21第第4 4章章 ARMARM系统硬件设计基础系统硬件设计基础v(2 2) 初始化存储器系统初始化存储器系统 对对存存储储系系统统的的初初始始化化操操作作包包括括对对存存储储器器类类型型、存存储储器器容容量量、时序以及总线宽度等的配置。时序以及总线宽度等的配置。通通常常FlashFlash和和SRAMSRAM同同属属

27、于于静静态态存存储储器器类类型型,可可以以合合用用同同一个存储器端口;一个存储器端口;而而DRAMDRAM因因为为有有动动态态刷刷新新和和地地址址线线复复用用等等特特性性,通通常常配配有有专专用用的存储器端口;的存储器端口;除除了了存存储储器器外外,与与网网络络芯芯片片相相关关的的存存储储器器配配置置以以及及外外接接大大容容量存储卡的配置也在这里进行。量存储卡的配置也在这里进行。第21页,共40页。22第第4 4章章 ARMARM系统硬件设计基础系统硬件设计基础v(3 3) 初始化各工作模式下的堆栈初始化各工作模式下的堆栈 ARM ARM有有7 7种运行状态,每一种状态的堆栈指针寄存器(种运行

28、状态,每一种状态的堆栈指针寄存器(SPSP)都是独立的。都是独立的。程序需要对用到的每一种模式下的程序需要对用到的每一种模式下的SPSP定义一个堆栈地址。定义的方法是改变状定义一个堆栈地址。定义的方法是改变状态寄存器内的状态位,使处理器切换到不同的状态,然后给态寄存器内的状态位,使处理器切换到不同的状态,然后给SPSP赋值。赋值。 ; ;预定义处理器模式常量预定义处理器模式常量USERMODE EQUUSERMODE EQU0x100x10FIQMODEFIQMODE EQU EQU0x110x11IRQMODEIRQMODE EQU EQU0x120x12SVCMODESVCMODE EQU

29、 EQU 0x130x13ABORTMODE EQU 0x17ABORTMODE EQU 0x17UNDEFMODE EQU 0x1bUNDEFMODE EQU 0x1bSYSMODE EQU 0x1fSYSMODE EQU 0x1fNOINTNOINT EQU EQU0xc00xc0InitStacksInitStacksmrsmrsr0,cpsrr0,cpsrbicbicr0,r0,#MODEMASKr0,r0,#MODEMASKorrorrr1,r0,#UNDEFMODE|NOINTr1,r0,#UNDEFMODE|NOINTmsrmsrcpsr_cxsf,r1cpsr_cxsf,r1;

30、/;/未定义模式堆栈未定义模式堆栈ldrldrsp,=UndefStacksp,=UndefStackorrorrr1,r0,#ABORTMODE|NOINTr1,r0,#ABORTMODE|NOINTmsrmsrcpsr_cxsf,r1cpsr_cxsf,r1;/;/中止模式堆栈中止模式堆栈ldrldrsp,=AbortStacksp,=AbortStackorrorrr1,r0,#IRQMODE|NOINTr1,r0,#IRQMODE|NOINTmsrmsrcpsr_cxsf,r1cpsr_cxsf,r1 ;/;/中断模式堆栈中断模式堆栈ldrldrsp,=IRQStacksp,=IRQS

31、tackorrorrr1,r0,#FIQMODE|NOINTr1,r0,#FIQMODE|NOINTmsrmsrcpsr_cxsf,r1cpsr_cxsf,r1;/;/快速中断模式堆栈快速中断模式堆栈ldrldrsp,=FIQStacksp,=FIQStackbicbicr0,r0,#MODEMASK|NOINTr0,r0,#MODEMASK|NOINTorrorrr1,r0,#SVCMODEr1,r0,#SVCMODEmsrmsrcpsr_cxsf,r1cpsr_cxsf,r1;/;/管理模式堆栈管理模式堆栈ldrldrsp,=SVCStacksp,=SVCStackmovmovpc,lr

32、pc,lr LTORGLTORG第22页,共40页。23第第4 4章章 ARMARM系统硬件设计基础系统硬件设计基础v(4 4) 初始化有特殊要求的硬件模块初始化有特殊要求的硬件模块 这一部分的设置工作根据具体的系统和用户需求而定。这一部分的设置工作根据具体的系统和用户需求而定。一般外设初始化可以在系统初始化之后进行。比较典型的硬件模一般外设初始化可以在系统初始化之后进行。比较典型的硬件模块有块有LEDLED、时钟模块、看门狗模块等。时钟模块、看门狗模块等。 第23页,共40页。24第第4 4章章 ARMARM系统硬件设计基础系统硬件设计基础v(5 5) 初始化用户程序的执行环境初始化用户程序

33、的执行环境可执行程序映像的结构:可执行程序映像的结构: ZI(ZI(初始化为初始化为0 0的可读写数据的可读写数据) )只定义了变量名的全局变量只定义了变量名的全局变量RWRW(可读写数据)可读写数据)定义时带初始值的全局变量定义时带初始值的全局变量RORO(代码和只读数据)代码和只读数据)编译结果编译结果LDR r0,=|Image$RO$Limit| ;LDR r0,=|Image$RO$Limit| ;得到得到RWRW数据源在数据源在ROMROM中的的起始地址中的的起始地址LDR r1,=|Image$RW$Base| ;RWLDR r1,=|Image$RW$Base| ;RW区在区在

34、RAMRAM里的起始地址里的起始地址LDR r3,=|Image$ZI$Base| ;ZILDR r3,=|Image$ZI$Base| ;ZI区在区在RAMRAM里的起始地址里的起始地址CMP r0,r1 ;CMP r0,r1 ;比较它们是否相等比较它们是否相等 BEQ %F1BEQ %F10 CMP r1,r30 CMP r1,r3 LDRCC r2,r0,#4LDRCC r2,r0,#4 STRCC r2,r1,#4STRCC r2,r1,#4 BCC %B0BCC %B01 LDR r1,=|Image$ZI$Limit|1 LDR r1,=|Image$ZI$Limit| MOV r

35、2,#0MOV r2,#02 CMP r3,r12 CMP r3,r1 STRCC r2,r3,#4STRCC r2,r3,#4 BCC %B2BCC %B2第24页,共40页。25第第4 4章章 ARMARM系统硬件设计基础系统硬件设计基础v(6 6) 切换处理器的工作模式切换处理器的工作模式需需要要注注意意的的是是,在在最最后后阶阶段段才才能能把把模模式式转转换换到到最最终终应应用用程程序序运运行行所所需需的的模式,一般是用户模式。内核级的中断使能也可以考虑在这一步进行。模式,一般是用户模式。内核级的中断使能也可以考虑在这一步进行。在初始化过程中模式变化过程为:在初始化过程中模式变化过程为

36、:管理模式管理模式 各种特权模式(堆栈初始化阶段)各种特权模式(堆栈初始化阶段) 用户模式用户模式。第25页,共40页。26第第4 4章章 ARMARM系统硬件设计基础系统硬件设计基础v(7 7) 呼叫主应用程序呼叫主应用程序当当所所有有的的系系统统初初始始化化工工作作完完成成之之后后,就就需需要要把把程程序序流流程程转转入主应用程序。入主应用程序。最简单的一种情况是:最简单的一种情况是:IMPORT MainIMPORT MainB MainB Main在在ARM ADSARM ADS环境中,还另外提供了一套系统级的呼叫机制环境中,还另外提供了一套系统级的呼叫机制IMPORT _mainIM

37、PORT _mainB _mainB _main_main()_main()是是编编译译系系统统提提供供的的一一个个函函数数,负负责责完完成成库库函函数数的的初初始始化化和和初初始始化化应应用用程程序序执执行行环环境境,最最后后自自动动跳跳转转到到main()main()函函数数,此此时时要要求求用用户户主主函函数的名字必须是数的名字必须是mainmain。第26页,共40页。27第第4 4章章 ARMARM系统硬件设计基础系统硬件设计基础主要内容1 14 43 35 5ADS 1.2集成开发环境简介集成开发环境简介 基于基于ARM的汇编语言程序设计的汇编语言程序设计基于基于ARM的硬件启动程

38、序的硬件启动程序基于基于ARM的的C语言与汇编语言混合编程语言与汇编语言混合编程6 6印制电路板制作简介印制电路板制作简介2 2RVDS 2.2 集成开发环境简介集成开发环境简介 第27页,共40页。28第第4 4章章 ARMARM系统硬件设计基础系统硬件设计基础 4.5.1 C语言与汇编语言混合编程应遵守的规则 在在C C程序和程序和ARMARM汇编程序之间相互调用时必须遵守汇编程序之间相互调用时必须遵守ATPCSATPCS规则规则。ATPCSATPCS规定了一些子程序间调规定了一些子程序间调用的基本规则,比如:用的基本规则,比如:寄存器的使用规则寄存器的使用规则子程序之间通过寄存器子程序之

39、间通过寄存器r0r0r3r3来传递参数,当参数个数多于来传递参数,当参数个数多于4 4个时,使用堆栈来传递参个时,使用堆栈来传递参数。数。在子程序中,使用寄存器在子程序中,使用寄存器r4r4r11r11保存局部变量。保存局部变量。寄存器寄存器r12r12用于保存堆栈指针用于保存堆栈指针SPSP,当子程序返回时使用该寄存器出栈,记作当子程序返回时使用该寄存器出栈,记作IPIP。寄存器寄存器r13r13用作堆栈指针,记作用作堆栈指针,记作SPSP。寄存器寄存器r14r14称为链接寄存器,记作称为链接寄存器,记作LRLR。该寄存器用于保存子程序的返该寄存器用于保存子程序的返回地址。寄存器回地址。寄存

40、器r15r15称为程序计数器,记作称为程序计数器,记作PCPC。 堆栈的使用规则堆栈的使用规则堆栈采用满递减类型(堆栈采用满递减类型(FDFD,Full DescendingFull Descending),),即堆栈通过减小存储器地址而向下增长,即堆栈通过减小存储器地址而向下增长,堆栈指针指向内含有效数据项的最低地址。堆栈指针指向内含有效数据项的最低地址。 参数的传递规则参数的传递规则整数参数的前整数参数的前4 4个使用个使用r0r0r3r3传递,其他参数使用堆栈传递;浮点参数使用编号最传递,其他参数使用堆栈传递;浮点参数使用编号最小且能够满足需要的一组连续的小且能够满足需要的一组连续的FP

41、FP寄存器传递参数寄存器传递参数子程序的返回结果为一个子程序的返回结果为一个3232位整数时,通过位整数时,通过r0r0返回;返回结果为一个返回;返回结果为一个6464位整数时,位整数时,通过通过r0r0和和r1r1返回;依此类推。结果为浮点数时,通过浮点运算部件的寄存器返回;依此类推。结果为浮点数时,通过浮点运算部件的寄存器F0F0、D0D0或或S0S0返回返回第28页,共40页。29第第4 4章章 ARMARM系统硬件设计基础系统硬件设计基础 4.5.2 汇编程序调用C程序的方法 汇编程序调用汇编程序调用C C程序的方法为:首先在汇编程序中使用程序的方法为:首先在汇编程序中使用IMPORT

42、IMPORT伪指令事先伪指令事先声明将要调用的声明将要调用的C C语言函数;然后通过语言函数;然后通过BLBL指令来调用指令来调用C C函数。函数。 例如在一个例如在一个C C源文件中定义了如下求和函数:源文件中定义了如下求和函数:int add(int x,int y)int add(int x,int y) return(x+y); return(x+y); 调用调用add()add()函数的汇编程序结构如下:函数的汇编程序结构如下: IMPORT add ;IMPORT add ;声明要调用的声明要调用的C C函数函数MOV r0,1MOV r0,1MOV r1,2MOV r1,2BL

43、add ;BL add ;调用调用C C函数函数addadd第29页,共40页。30第第4 4章章 ARMARM系统硬件设计基础系统硬件设计基础 4.5.3 C程序调用汇编程序的方法 C C程序调用汇编子程序的方法为:首先在汇编程序中使用程序调用汇编子程序的方法为:首先在汇编程序中使用EXPORTEXPORT伪指令声明被调用伪指令声明被调用的子程序,表示该子程序将在其他文件中被调用;然后在的子程序,表示该子程序将在其他文件中被调用;然后在C C程序中使用程序中使用externextern关键关键字声明要调用的汇编子程序为外部函数。字声明要调用的汇编子程序为外部函数。 例如在一个汇编源文件中定义

44、了如下求和函数:例如在一个汇编源文件中定义了如下求和函数:EXPORT add ;EXPORT add ;声明声明addadd子程序将被外部函数调用子程序将被外部函数调用add ;add ;求和子程序求和子程序addadd ADD r0,r0,r1 ADD r0,r0,r1 MOV pc,lr MOV pc,lr 在一个在一个C C程序的程序的main()main()函数中对函数中对addadd汇编子程序进行了调用:汇编子程序进行了调用:extern int add(int x,int y); /extern int add(int x,int y); /声明声明addadd为外部函数为外部函

45、数void main()void main() int a=1,b=2,c; int a=1,b=2,c; c=add(a,b); / c=add(a,b); /调用调用addadd子程序子程序 第30页,共40页。31第第4 4章章 ARMARM系统硬件设计基础系统硬件设计基础 4.5.4 C程序中内嵌汇编语句 在在C C语语言言中中内内嵌嵌汇汇编编语语句句可可以以实实现现一一些些高高级级语语言言不不能能实实现现或或者者高高级级语语言言不不容容易易实现的功能以及时间紧迫的功能。实现的功能以及时间紧迫的功能。内内嵌嵌的的汇汇编编器器支支持持大大部部分分ARMARM指指令令和和ThumbThum

46、b指指令令,但但是是不不支支持持诸诸如如直直接接修修改改PCPC实实现跳转的底层功能,也不能直接引用现跳转的底层功能,也不能直接引用C C语言中的变量。语言中的变量。嵌入式汇编语句在形式上表现为独立定义的函数体,其语法格式为:嵌入式汇编语句在形式上表现为独立定义的函数体,其语法格式为:_ _ _asmasm 指令指令;指令指令 指令指令 第31页,共40页。32第第4 4章章 ARMARM系统硬件设计基础系统硬件设计基础C程序中内嵌汇编语句举例使能IRQ中断: inline void enable_IRQ(void) int tmp ; _asm /嵌入汇编代码 MRS tmp,CPSR /读

47、取CPSR的值 BIC tmp,tmp,#0x80 /将IRQ中断禁止位I清零,即允许IRQ中断 MSR CPSR_c,tmp /设置CPSR的值 第32页,共40页。33第第4 4章章 ARMARM系统硬件设计基础系统硬件设计基础一个完整的例子一个完整的例子字符串复制: #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 S

48、TRB ch,dst ADD dst,#1 #endif CMP ch,#0 BNE loop 第33页,共40页。34第第4 4章章 ARMARM系统硬件设计基础系统硬件设计基础一个完整的例子(一个完整的例子(contiuned)int main(void) const char*a=“Hello world!” char 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()函

49、数字符串复制结果 printf(“Copied string:%sn,”b); return(0); 第34页,共40页。35第第4 4章章 ARMARM系统硬件设计基础系统硬件设计基础 4.5.5 基于ARM的C语言与汇编语言混合编程举例 举例:一个向串口不断发送举例:一个向串口不断发送0 0x55x55的例子。的例子。# #include .incconfig.h /include .incconfig.h /将有关硬件定义的头文件包含进来将有关硬件定义的头文件包含进来unsigned char data; /unsigned char data; /定义全局变量定义全局变量void Ma

50、in(void)void Main(void) Target_Init(); / Target_Init(); /对目标板的硬件初始化对目标板的硬件初始化 Delay(10); /Delay(10); /延时延时 data = 0x55; /data = 0x55; /给全局变量赋值给全局变量赋值 while(1) while(1) Uart_Printf(%x,data); / Uart_Printf(%x,data); /向串口送数向串口送数 Delay(10); Delay(10); IMPORT MainIMPORT MainAREA Init ,CODE, READONLY;AREA

51、 Init ,CODE, READONLY;ENTRY ENTRY BL Main BL Main ;跳转到跳转到Main()Main()函数处的函数处的C/C+C/C+程序程序END END ;标识汇编程序结束标识汇编程序结束 启动代码启动代码的整体框的整体框架架 C C语言写的语言写的主函数主函数 第35页,共40页。36第第4 4章章 ARMARM系统硬件设计基础系统硬件设计基础主要内容1 14 43 35 5ADS 1.2集成开发环境简介集成开发环境简介 基于基于ARM的汇编语言程序设计的汇编语言程序设计基于基于ARM的硬件启动程序的硬件启动程序基于基于ARM的的C语言与汇编语言混合编

52、程语言与汇编语言混合编程6 6印制电路板制作简介印制电路板制作简介2 2RVDS 2.2 集成开发环境简介集成开发环境简介 第36页,共40页。37第第4 4章章 ARMARM系统硬件设计基础系统硬件设计基础 4.6.1 印制电路板设计软件ProtelProtelProtel是是流流行行的的PCBPCB设设计计工工具具之之一一,大大多多数数PCBPCB生生产产厂厂家家都都接接受受ProtelProtel设计格式的设计格式的PCBPCB文件。文件。ProtelProtel基本上包括以下基本上包括以下5 5大功能:大功能: 原理图设计原理图设计 PCB PCB设计设计 自动布线自动布线 可编程逻辑

53、器件(可编程逻辑器件(PLDPLD)设计设计 电路仿真器件设计电路仿真器件设计第37页,共40页。38第第4 4章章 ARMARM系统硬件设计基础系统硬件设计基础 4.6.2 单面板与多层板单面板单面板 用一块板子作为基础,在板上规划元件的布局,确定元件的接点,使用接线柱用一块板子作为基础,在板上规划元件的布局,确定元件的接点,使用接线柱做接点,用导线把接点按电路要求进行连接。在板的一面布线,另一面装元件。做接点,用导线把接点按电路要求进行连接。在板的一面布线,另一面装元件。 双面板双面板 在电路板的两面都有布线。为了使用两面的导线,必须要在两面间有适在电路板的两面都有布线。为了使用两面的导线

54、,必须要在两面间有适当的电路连接才行。这种电路间的桥梁叫做过孔。过孔是在当的电路连接才行。这种电路间的桥梁叫做过孔。过孔是在PCBPCB上,充上,充满或涂上金属的小洞,它可以与两面的导线相连接。满或涂上金属的小洞,它可以与两面的导线相连接。 多层板多层板 多层板使用数片双面板,并在每层板间放进一层绝缘层后压合。板子多层板使用数片双面板,并在每层板间放进一层绝缘层后压合。板子的层数就代表了有几层独立的布线层。在多层板的层数就代表了有几层独立的布线层。在多层板PCBPCB中,除了布置信中,除了布置信号线的信号层外,有的层整层都直接连接地线或电源,我们称之为地号线的信号层外,有的层整层都直接连接地线

55、或电源,我们称之为地线层或电源层。线层或电源层。 第38页,共40页。39第第4 4章章 ARMARM系统硬件设计基础系统硬件设计基础 4.6.3 印制电路板设计的注意事项 通常在设计印制电路板时,需要遵循以下设计原则:通常在设计印制电路板时,需要遵循以下设计原则:1. 1. 减少电源带来的噪声减少电源带来的噪声 2 2元器件布置要合理分区元器件布置要合理分区 3 3元器件布局及走线方向尽可能合理元器件布局及走线方向尽可能合理 4 4注意印刷线路板与元器件的高频特性注意印刷线路板与元器件的高频特性 第39页,共40页。40第第4 4章章 ARMARM系统硬件设计基础系统硬件设计基础练习练习一个典型的可执行映像由哪几部分组成?汇编和C语言的相互调用方法第40页,共40页。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学/培训

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号