(OK)嵌入式系统体系结构实验指导书(只含ADS).doc_第1页
(OK)嵌入式系统体系结构实验指导书(只含ADS).doc_第2页
(OK)嵌入式系统体系结构实验指导书(只含ADS).doc_第3页
(OK)嵌入式系统体系结构实验指导书(只含ADS).doc_第4页
(OK)嵌入式系统体系结构实验指导书(只含ADS).doc_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

1 嵌入式系统体系结构 实验指导书 华东交通大学信息工程学院计算机系 2 目 录 实验一实验一 ARM ADS 集成开发环境练习集成开发环境练习.3 实验二实验二 ARM 汇编指令实验汇编指令实验.18 实验三实验三 ARM 汇编语言程序设计实验汇编语言程序设计实验(一一).20 实验四实验四 ARM 汇编语言程序设计实验汇编语言程序设计实验(二二).22 实验五实验五 ARM 汇编与汇编与 C 语言混合程序设计实验语言混合程序设计实验.26 实验六实验六 ARM 的串行口实验的串行口实验.29 实验七实验七 键盘及键盘及 LED 驱动实验驱动实验.32 实验八实验八 LCD 与触摸屏程序设计与触摸屏程序设计.35 特别说明:所有目录都应是英文字符,如出现中文字符会报错。特别说明:所有目录都应是英文字符,如出现中文字符会报错。 3 实验一 ARM ADS 集成开发环境练习 一、实验目的 熟悉 ARM ADS1.2 开发环境,并学会 ADS1.2 环境下工程的仿真、调试及配置方法。使用 ADS 编译、 下载、调试并跟踪一段已有的程序,了解嵌入式开发的基本思想和过程。 二、实验内容 本次实验使用 ARM ADS 1.2 集成开发环境。新建一个基于简单的工程文件,并编译这个工程文件。 学习 ADS1.2 环境下工程的仿真、调试及配置方法。学会在程序中设置断点,观察系统内存和变量,为调 试应用程序打下基础。 三、预备知识 C 语言的基础知识、程序调试的基础知识和方法。 四、实验设备及工具(包括软件调试工具) 硬件硬件:PC 机 Pentium100 以上。 软件软件:PC 机 Windows 操作系统、ARM ADS 1.2 集成开发环境、AXD 五、实验步骤 (一)(一)ADS1.2 集成开发环境的使用集成开发环境的使用 1.新建工程 现在可以通过“开始”“程序”“ ARM Developer Suite v1.2”“ CodeWarrior for ARM Developer Suite”来打开开发软件了,如图 1-14 所示。 图 1-14 启动 Metrowerks CodeWarrior for ARM Developer Suite v1.2 后界面如图 1-15 所示。 4 图 1-15 在 CodeWarrior 中新建一个工程的方法有两种,可以在工具栏中单击“New”按钮,如图 1-16 所示。也 可以在“File”菜单中选择“New。 。 。 ”菜单,如图 1-17 所示。 图 1-16 图 1-17 这样打开一个如图 1-18 所示的窗口。该窗口有 Project、File 和 Objict 三个选项卡,现在我们新建工 程,故选 Project 选项卡。这个对话框中为用户提供了 7 种可选择的工程类型。此 7 种工程类型已经在图 中标出,大家熟悉一下。 这里我们选择第一种 ARM Executable Image 工程类型,在“Project name:”下输入工程名,如 test, 点击“Location:”文本框的“Set.”按钮,浏览选择想要将该工程保存的路径。如存放在 E 盘的 armtest 文件 夹中,进入 E 盘后按照图 1-19,图 1-20 的步骤完成。 5 图 1-18 图 1-19 图 1-20 6 改完名后,双击 armtest 文件夹再点击“保存”按钮,就会出现图 1-21 所示界面,此时点击“确定”按钮即可 建立一个新的名为 test 的工程,这时会出现 test.mcp 的窗口,如图 1-22 所示。 图 1-21 图 1-22 此时点击“最大化”按钮可以将 test.mcp 窗口扩大,如图 1-23 所示。 图 1-23 2.设置目标及其参数 开发环境要经过设置才能与试验箱配套使用。在工具栏中有一个用于选择目标的下拉列表框,如图 7 1-24 圈中所示。新建工程的默认目标是 DebugRel,另外还有两个可选择的目标,分别是 Debug 和 Release,他们的含义如下: DebugRel:生成目标时,为每一个源文件生成调试信息; Release: 生成目标时,不生成调试信息; Debug: 生成目标时,为每一个源文件生成最完全的调试信息。 图 1-24 这里选择 Debug,接下来对 Debug 目标进行参数设置。单击工具栏上的设置按钮或使用 Edit Debug Settings 菜单命令打开设置对话框,如图 1-25 所示,设置框如图 1-26 所示。 图 1-25 图 1-26 在 Debug Setting 对话框中需要设置的内容比较多。设置方法是首先在左侧的树形目录中选中需要设 8 置的对象,然后在右侧面板中进行相应的设置。下面对经常使用的设置选项进行介绍。 (1)目标设置(Target Setting) 在树形目录中选中 TargetTarget Setting 项,在右侧面版的 Post-linker 下拉表框中选择 ARM fromElF,使得工程连接后通过 fromElF 产生二进制代码,使其可以烧写到 ROM 中。方法如图 1-27 所示。 图 1-27 (2)语言设置(Language Settings) 开发语言有汇编、C、C+及其混合语言等。我们在开发前要对其设置,这里主要是对其硬件(架 构或处理器)的支持设置,如我们实验是在采用 S3C2410 处理器的试验箱中开发的,所以在右侧面板 Architecture or Processer(架构或处理器)下拉列表框中选择 ARM920T。 具体设置方法是先选中树形目录中 Language Settings 下的开发语言,然后在本语言对应的右侧面板 的 Architecture or Processer 下拉列表框中选择 ARM920T,其他选项保持默认。注意,在开发中用到的语 言都要进行这样设置。汇编语言的设置过程如图 1-28 所示,其他语言设置方法与此一样。 图 1-28 (3)链接器设置(Linker) 在左侧的树形目录中选中 LinkerARM Linker,出现链接器的设置对话框,如图 1-29 所示。此处设 置很重要,详细介绍一下各个选项卡的设置方法。 1) Output 选项卡:如图 1-29 所示。 其中 Linktype 选项中为链接器提供 3 种链接类型: Partial:表示链接器只进行部分链接,链接后的目标文件可以作为以后进一步链接的输入文件; 9 Simple: 表示链接器将生成简单的 ELF 格式的映像文件,地址映射关系在 Simple image 选项区域中 设置; Scattered:表示链接器将生成复杂的 ELF 格式的映像文件,地址映射关系在 Scatter 格式的文件中指 定。 这里我们选择常用的 Simple 类型,选择 Simple 后,在其右侧 Simple image 选项区域中包含 RO Base 和 RW Base 两个文本框。 RO Base:用来设置程序代码存放的起始地址。 RW Base:用来设置程序数据存放的起始地址。 这两项的地址均由硬件决定,并应该在 SDRAM 的地址范围内。本实验箱使用的是 64M SDRAM,其 地址范围是 0 x3000 00000 x33FF FFFF,故采用首地址作为程序代码的存放的首地址,即在 RO Base 文 本框中输入 0 x3000 0000, RW Base 文本框用户自定义,只要保证在 SDRAM 地址空间内,并且是字对齐 即可,这里我们可以输入 0 x3100 0000。 此处的设置也就是说在地址为 0 x30000000-0 x31000000 之间是只读区域,用来存放程序代码,从 0 x31000000 开始用来存放程序数据。 图 1-29 2)Option 选项卡:如图 1-30 所示。 本选项卡只对 Image entry point 进行设置,该项是程序代码的入口地址。如果程序在 SDERAM 中 运行,针对本试验箱可选择的地址范围 0 x30000000-0 x31000000。通常程序代码的入口地址与 RO Base 中程序代码的首地址相同,这里为 0 x30000000。其他默认即可。 10 图 1-30 3)Layout 选项卡:如图 1-31 所示。 该选项卡在链接方式为 Simple 时有效,他用来安排一些输入段在映像文件中的位置。即在 Place at beginning of image 区域中 Object/Symbol 文本框中填写启动程序的目标文件名 init.o 和 Section 文本框中填 写程序入口起始段的标号 Init。其作用是通知编译器,整个项目从该段开始执行。 图 1-31 如果希望将编译后生成的二进制文件放到指定文件夹,可以在左侧的树形目录中选中 LinkerARM frpmELF 进行设置,如图 1-32 所示。此框如为空,将默认在工程目录下生成二进制文件。该二进制文件 可用于以后下载到 Flash(试验箱等硬件)中执行。 11 图 1-32 至此,对 Debug Settings 的设置基本完成,单击 Apply-OK 按钮,保存设置。 为了避免以后每次新建工程再这样设置,我们可以将该新建的空工程作为模板保存起来。 方法是:在 ADS1.2 的安装目录的 Stationary 文件夹下新建一个适合模板的目录名,如 S3C2410 ARM Executable Image ;然后将刚设置好的工程文件以一个适合的名字如 S3C2410 ARM .mcp 另存到该模板目 录中即可。以后使用 File-New。 。 。菜单命令新建工程时就可以在弹出的 New 对话框中看到 S3C2410 ARM Executable Image 工程模板,如图 1-33 所示。选用该模板创建工程就可以免去设置过程,直接向工 程中添加文件、进行编码就可以了。 图 1-32 3.向工程中添加源文件 工程创建、设置好以后就会出现 test.mcp 的窗口,该窗口包含 File、Link Order 和 Targets 三个选项卡, 如图 1-33 所示。默认情况下显示的是 File 选项卡,此时可以通过执行 ProjectAdd File.菜单命令把与工 程有关的所有源文件加入到该工程,如图 1-34。或者通过鼠标右击空白处弹出的快捷菜单 Add File.来完 成,如图 1-25 所示。 12 图 1-33 图 1-34 图 1-35 对于本次试验,没有源文件可用,首先需要新建源文件。这里以新建文件类型为 C 语言文件,文件 名为 led.c 为例向大家说明一下过程。选择 File-New。 。 。菜单命令,如图 1-36 所示。在弹出的窗口中选 择 File 选项卡;在 File name 文本框中输入新建文件的文件名 led.c,注意:文件名后缀与要使用的开发语 言种类有关,如用C语言开发时文件名后缀为.c,汇编语言开发时文件名后缀为.s;在 Location 文本框中 输入文件的保存位置 E:armtestest;选中 Add to Project 复选框;在 Project 下拉列表框中选择将文件添加 到的工程 test。mcp;在 Targets 复选框中选中文件要添加的目标 Debug,过程如图 1-37 所示。单击确定 即可将新建的文件添加到工程中,文件添加到工程后的窗口如图 1-38 所示。接下来只需在新建文件中进 行编码、保存即可,如图 1-39 所示。注意:此时Metrowerks CodeWarrior for ARM Developer Suite v1.2窗 口中包含工程和文件两个窗口,如图1-40所示。我们需要点击相应的最小化或向下还原按钮来进行切换。 如图1-38和图1-39中圈中所示。 13 图 1-36 图 1-37 图 1-38 14 图 1-39 图 1-40 工程创建好以后,接下来就是对其进行编译和链接。选择 Metrowerks CodeWarrior for ARM Developer Suite v1.2 窗口的“Project”“Make”菜单命令或点击按钮来完成编译和链接。如果有错误或 警告,窗口如图 1-41 所示,用户可根据提示更改程序。 图 1-41 如果没有语法错误,将在工程所在目录下生成一个名为“工程名_data”的文件夹。如本例的工程名为 test.mcp,生成的文件夹名为 test_data。在该文件夹下,针对不同类型的目标将生成多个文件夹。本例中由 于使用的是 Debug 目标,因此生成的最终文件都在 Debug 文件夹下。进入 Debug 文件夹会看到编译、链 接后生成的映像文件(xxx.axf)和二进制文件(xxx.bin) 。映像文件用于调试,二进制文件用于烧写到 Flash 中运行。 (二)(二) 、ADS1.2 环境下工程的仿真、调试环境下工程的仿真、调试及配置方法及配置方法 15 通过“开始菜单”“ ARM Developer Suite v1.2”“ AXD Debugger”来打开调试软件,如图 1-42 所示。 图 1-42 如果程序代码没有错误或警告,也可以点击 Metrowerks CodeWarrior for ARM Developer Suite v1.2 窗口的 ProjectDebug 菜单命令或点击按钮或点击工程窗口的按钮来直接调出 AXD 调试窗口, 方法如图 1-43 和图 1-44 所示。 图 1-43 图 1-44 AXD 调试窗口如图 1-45 所示。 16 图 1-45 第一次使用需要对 AXD 进行配置,具体方法如下:初次运行 AXD,左侧的目标平台为 ARM7TDMI。试 验箱采用的 CPU 为 ARM920,所以需要配置 AXD 使之匹配。方法为点击 AXD 窗口的 Options Configure Target 菜单命令,如图 1-46。 图 1-46 Configure Target 窗口如图 1-47 所示。在图 1-47 中,Target 栏代表不同的目标 CPU。 “ADP”和 “ARMUL”是缺省的设置。选择 ARMUL,表示使用软件仿真,此时 PC 机可以不连接任何目标板,ARM 系统中 CPU 的行为完全由软件模拟。我们使用软件仿真,故选择 ARMUL。 图 1-47 要设置 CPU 类型需双击 ARMUL,然后在出现的设置对话框中点 Processor 区域中的 Variant 下拉菜 单,找到 ARM920T 并选中,然后点击 Ok-Ok 即可。设置过程如图 1-48 所示。 17 图 1-48 设置好的 AXD 界面左侧就会显示 ARM920T 了。现在可以向 AXD 调试软件中添加工程的映像文件 了。方法为点击 AXD 窗口的 FileLoad Image 菜单命令选择要加载的映像文件(后缀为.axf) ,如图 1-49 所示。 图 1-49 加载完映像文件就可以对程序代码进行调试了。下面介绍一下 AXD 界面的一些常用的工具和窗口。 AXD 界面如图 1-50 所示。 图 1-50 18 实验二 ARM 汇编指令实验 一、实验目的 1 掌握 ARM 数据处理指令的用法 2 了解 ARM 汇编指令灵活的第二操作数,编写简单的汇编程序 二、实验内容 1 用 MOV 和 MVN 指令访问 ARM 通用寄存器 2 使用 ADD、SUB、AND、ORR、CMP 和 TST 指令完成数据的加减运算及逻辑运算。 3 用 ADS1.2 软件仿真,单步、全速运行程序,设置断点,打开寄存器窗口(ProcessorRegister) 监视运算值,打开存储器观察窗口(Memory)监视 0 x40003100 地址处的值。 三、预备知识 1、用 ARM ADS 集成开发环境,编写和调试程序的基本过程。 2、ARM 指令的使用 四、实验设备及工具(包括软件调试工具) 硬件硬件:PC 机 Pentium100 以上。 软件软件:PC 机 Windows 操作系统、ARM ADS 1.2 集成开发环境、AXD 五、实验步骤 1 启动 ADS1.2,使用 ARM Executable Image 工程模板建立一个工程。如 SY2 2 建立汇编源文件 Test2.s,然后加入工程中。 3 编译、连接工程,选择 ProjectDebug ,启动 AXD 软件仿真调试。 4 打开寄存器窗口,监视寄存器的值。 5 可以单步运行程序,可以设置、取消断点,或者全速运行,停止运行,调试时观察寄存器的值, 运行结果见图 2-1。 19 图 2-1 ARM 实验 2 的运行结果 六、实验参考程序 XEQU11 YEQU8 BIT23EQU(1 2*X ? R5=R5TST,BIC:BIT23 =1?BIT6 = 0:1 TSTR5,#BIT23 BICNER5,R5,#0 x00000040 BSTART END 20 实验三 ARM 汇编语言程序设计实验(一) 一、实验目的 1 掌握 ADS1.2 集成开发环境 2 了解 ARM 汇编指令用法,并能够编写简单的汇编程序 3 掌握指令的条件执行,掌握 LDR/STR 指令,完成存储器的访问 二、实验内容 1 用 LDR 指令读取 0 x40003100 地址上的数据,将该数据加 1,若结果大于 10,则使用 STR 指令将 结果写入原地址,否则,将把 0 写入原地址。 2 用 ADS1.2 软件仿真,单步、全速运行程序,设置断点,打开寄存器窗口(ProcessorRegister)监视 R0、R1 的值,打开存储器观察窗口(Memory)监视 0 x40003100 地址处的值。 三、预备知识 1、用 ARM ADS 集成开发环境,编写和调试程序的基本过程。 2、ARM 指令的使用 四、实验设备及工具(包括软件调试工具) 硬件硬件:PC 机 Pentium100 以上。 软件软件:PC 机 Windows 操作系统、ARM ADS 1.2 集成开发环境、AXD 五、实验步骤 1 启动 ADS1.2,使用 ARM Executable Image 工程模板建立一个工程。如 SY3 2 建立汇编源文件 Test3.s,加入工程中。 3 设置工程连接地址 R0 Base 0 x40000000,RW Base 0 x40003000。 4 编译、连接工程,选择 ProjectDebug ,启动 AXD 软件仿真调试。 5 打开寄存器窗口,监视 R0、R1 的值,设置观察地址 0 x40003100,显示方式为 32bit,监测 0 x40003100 上的值。 6 可以单步运行程序,可以设置、取消断点,或者全速运行,停止运行,调试时观察寄存器 0 x40003100 上的值,运行结果见图 3-1。 21 图 3-1 ARM 实验 3 的运行结果 六、实验参考程序 COUNT EQU0X40003100 AREATEST3, CODE,READONLY ENTRY CODE32 START LDRR1,=COUNT MOVR0,#0 STRR0,R1 LOOP LDRR1,=COUNT LDRR0,R1 ADDR0,R0,#1 CMPR0,#10 MOVHSR0,#0 STRR0,R1 B LOOP END 22 实验四 ARM 汇编语言程序设计实验(二) 一、实验目的 1 掌握 ADS1.2 集成开发环境 2 掌握如何使用 ARM 的 MRS/MSR 指令实现工作模式切换 二、实验内容 1使用 ARM 的 MRS/MSR 指令实现工作模式切换,并初始化堆栈指针 2观察 ARM 控制器在工作模式下的寄存器的区别。 三、预备知识 1、用 ARM ADS 集成开发环境,编写和调试程序的基本过程。 2、ARM 指令的使用 四、实验设备及工具(包括软件调试工具) 硬件硬件:PC 机 Pentium100 以上。 软件软件:PC 机 Windows 操作系统、ARM ADS 1.2 集成开发环境、AXD 五、实验步骤 1 启动 ADS1.2,使用 ARM Executable Image 工程模板建立一个工程。如 SY4 2 建立汇编源文件 Test4.s,然后加入工程中。 3 设置工程连接地址 R0 Base 0 x40000000,RW Base 0 x40003000。设置调试入口地址 Image Entry point 为 0 x40000000。 4 编译、连接工程,选择 ProjectDebug ,启动 AXD 软件仿真调试。 5 打开寄存器窗口,监视寄存器的值,选择 current 项监视各个寄存器上的值。 6 可以单步运行程序,可以设置、取消断点,或者全速运行,停止运行,调试时观察寄存器 CPSR、SPSR、R13、R14 和 R15 的值,运行观察见图 4-1。 23 图 4-1 ARM 实验 4 的运行观察结果 注意:CPSR 寄存器的显示方式如图 4-1 所示,显示分两个部分,一是各个运算标志位,二是工作模 式显示。 (1)运算标志位 NZCV:显示为大写字母,表示结果为 1,否则为 0。 (2)中断标志位 IF:I 为 IRQ 中断禁止位,F 为 FIQ 中断禁止位。 (3)工作模式位:包括 User、Fiq、Irq、SVC、Abort、Undef 和 SYS。 六、实验参考程序 ;the stack length is being defined USR_STACK_LENGTHEQU64 SVC_STACK_LENGTHEQU0 FIQ_STACK_LENGTHEQU16 IRQ_STACK_LENGTHEQU64 ABT_STACK_LENGTHEQU0 UND_STACK_LENGTHEQU0 AREAMODE1,CODE,READONLY ENTRY CODE32 STARTMOVR0,#0 MOVR1,#1 MOVR2,#2 MOVR3,#3 MOVR4,#4 MOVR5,#5 MOVR6,#6 MOVR7,#7 MOVR8,#8 MOVR9,#9 24 MOVR10,#10 MOVR11,#11 MOVR12,#12 BLinit_stack;init stack pointer in every mode ;enable the IRQ MRSR0,CPSR;R0-CPSR BICR0,R0,#0X80 MSRCPSR_cxsf,R0;CPSR-R0 ;switch to usr mode MSRCPSR_c,#0 xd0 MRSR0,CPSR ;swicth to svc mode MSRCPSR_c,#0 xdf MRSR0,CPSR HALTBHALT ; INIT STACK init_stack MOVR0,LR ;Setup the svc stack MSRCPSR_c,#0 xd3 LDRSP,StackSvc ;Setup the Irq stack MSRCPSR_c,#0 xd2 LDRSP,StackIrq ;Setup the Fiq stack MSRCPSR_c,#0 xd1 LDRSP,StackFiq ;Setup the Abt stack MSRCPSR_c,#0 xd7 LDRSP,StackAbt ;Setup the Und stack MSRCPSR_c,#0 xdb LDRSP,StackUnd ;Setup the Usr stack MSRCPSR_c,#0 xdf LDRSP,StackUsr MOVPC,R0 ;define the stack pointer StackUsr DCDUsrStackSpace + (USR_STACK_LENGTH - 1) * 4 StackSvcDCDSvcStackSpace + (SVC_STACK_LENGTH - 1) * 4 StackIrqDCDIrqStackSpace + (IRQ_STACK_LENGTH - 1) * 4 StackFiqDCDFiqStackSpace + (FIQ_STACK_LENGTH - 1) * 4 StackAbtDCDAbtStackSpace + (ABT_STACK_LENGTH - 1) * 4 StackUndDCDUndStackSpace + (UND_STACK_LENGTH - 1) * 4 25 ;ALLOCATED THE STACK SPACE UsrStackSpaceSPACEUSR_STACK_LENGTH * 4 SvcStackSpaceSPACESVC_STACK_LENGTH * 4 IrqStackSpaceSPACEIRQ_STACK_LENGTH * 4 FiqStackSpaceSPACEFIQ_STACK_LENGTH * 4 AbtStackSpaceSPACEABT_STACK_LENGTH * 4 UndStackSpaceSPACEUND_STACK_LENGTH * 4 END 26 实验五实验五 ARM 汇编与汇编与 C 语言混合程序设计实验语言混合程序设计实验 一、实验目的 掌握如何使用 ADS 1.2 编写混合语言程序 二、实验内容 1掌握 C 语言中调用汇编程序技术 2汇编程序完成加法运算,计算 z = x + y 值 三、预备知识 1、用 ARM ADS 1.2 集成开发环境,编写和调试程序的基本过程。 2、ARM 应用程序的框架结构。 四、实验设备及工具(包括软件调试工具) 硬件硬件:PC 机 Pentium100 以上。 软件软件:PC 机 Windows 操作系统、ARM ADS 1.2 集成开发环境、AXD 五、实验步骤 1 启动 ADS1.2,使用 ARM Executable Image 工程模板建立一个工程。如 SY5 2 建立 C 语言源文件 test5_c.c,和汇编语言文件 test5_s.s,然后加入工程中。. 3 设置工程连接地址 R0 Base 0 x40000000,RW Base 0 x40003000。设置调试入口地址 Image Entry point 为 0 x40000000。 4 设置位于开始位置的起始代码段,如图 5-1。 5 编译、连接工程,选择 ProjectDebug ,启动 AXD 软件仿真调试。 6 在 Test5_C.c 文件中的 Add() 函数处设置断点,然后,全速运行程序。 7 程序在断点处停止,可以单步运行程序,判断程序是否跳入汇编程序中运行。 8 选择 Processor ViewsVariables 打开变量观察窗口,观察全局变量的值,单步、全速运行程序,判断 程序的运算结果是否正确。如图 5-2 所示。 27 图 5-1 设置开始位置的起始代码段 图 5-2 ARM 实验 5 的运行观察结果 图 5-3 实验 5 源代码组织见 28 六、实验参考程序 /文件一文件一 startup file startup.s IMPORT|Image$RO$Limit| IMPORT|Image$RW$Base| IMPORT|Image$ZI$Base| IMPORT|Image$ZI$Limit| IMPORTMAIN;declare the main() in the C Prog AREAstart,CODE,READONLY ENTRY CODE32 Reset LDRSP,=0 x40003f00 ;initial the C case LDRR0,=|Image$RO$Limit| LDRR1,=|Image$RW$Base| LDRR3,=|Image$ZI$Base| CMPR0,R1 BEQLOOP1 LOOP0 CMPR1,R3 LDRCCR2,R0,#4 STRCCR2,R1,#4 BCCLOOP0 LOOP1 LDRR1,=|Image$ZI$Limit| MOVR2,#0 LOOP2 CMPR3,R1 STRCCR2,R3,#4 BCCLOOP2 BMAIN END /文件二文件二 test5_c.c #define uint8 unsigned char #define uint32unsigned int extern uint32 Add(uint32 x,uint32 y); uint32 sum; void MAIN(void) sum = Add(5,4); while(1); /文件三文件三 test5_s.s EXPORTAdd AREAAddc,CODE,READONLY ENTRY CODE32 Add ADDR0,R0,R1 MOVPC,LR END 29 实验六 ARM 的串行口实验 一、实验目的 掌握 ARM 的串行口工作原理。 学习编程实现 ARM 的 UART 通讯。 掌握 CPU 利用串口通讯的方法。 二、实验内容 学习串行通讯原理,了解串行通讯控制器,阅读 ARM 芯片文档,掌握 ARM 的 UART 相关寄存器的 功能,熟悉 ARM 系统硬件的 UART 相关接口。 编程实现 ARM 和计算机实现串行通讯:ARM 监视串行口,将接收到的字符再发送给串口(计算机 与开发板是通过超级终端通讯的) ,即按 PC 键盘通过超级终端发送数据,开发板将接收到的数据再返送 给 PC,在超级终端上显示。 三、预备知识 1、用 ARM ADS 1.2 集成开发环境,编写和调试程序的基本过程。 2、ARM 应用程序的框架结构。 3、了解串行总线 四、实验设备及工具 硬件硬件:ARM 嵌入式开发板、用于 ARM7TDMI 的 JTAG 仿真器、PC 机 Pentium100 以 上、串口线 软件软件:PC 机操作系统 win98、Win2000 或 WinXP、ARM ADS 1.2 集成开发环境、仿真器驱动程序、 超级终端通讯程序 五、实验步骤 1新建工程,将光盘中“串行口实验startup”目录下的文件添加到工程中,这些是启动时所需要的 文件。 2定义与 UART 有关的各个寄存器地址和一些特殊的位命令。主要有以下各寄存器(44b.h): /* UART 的全部功能寄存器 */ #define rULCON0(*(volatile unsigned *)0 x1d00000) #define rULCON1(*(volatile unsigned *)0 x1d04000) #define rUCON0(*(volatile unsigned *)0 x1d00004) #define rUCON1(*(volatile unsigned *)0 x1d04004) #define rUFCON0(*(volatile unsigned *)0 x1d00008) #define rUFCON1(*(volatile unsigned *)0 x1d04008) #define rUMCON0(*(volatile unsigned *)0 x1d0000c) #define rUMCON1(*(volatile unsigned *)0 x1d0400c) #define rUTRSTAT0(*(volatile unsigned *)0 x1d00010) 30 #define rUTRSTAT1(*(volatile unsigned *)0 x1d04010) #define rUERSTAT0(*(volatile unsigned *)0 x1d00014) #define rUERSTAT1(*(volatile unsigned *)0 x1d04014) #define rUFSTAT0(*(volatile unsigned *)0 x1d00018) #define rUFSTAT1(*(volatile unsigned *)0 x1d04018) #define rUMSTAT0(*(volatile unsigned *)0 x1d0001c) #define rUMSTAT1(*(volatile unsigned *)0 x1d0401c) #define rUBRDIV0(*(volatile unsigned *)0 x1d00028) #define rUBRDIV1(*(volatile unsigned *)0 x1d04028) #ifdef _BIG_ENDIAN/大端摸式 #define rUTXH0(*(volatile unsigned char *)0 x1d00023) #define rUTXH1(*(volatile unsigned char *)0 x1d04023) #define rURXH0(*(volatile unsigned char *)0 x1d00027) #define rURXH1(*(volatile unsigned char *)0 x1d04027) #define WrUTXH0(ch) (*(volatile unsigned char *)(0 x1d00023)=(unsigned char)(ch) #define WrUTXH1(ch) (*(volatile unsigned char *)(0 x1d04023)=(unsigned char)(ch) #define RdURXH0()(*(volatile unsigned char *)(0 x1d00027) #define RdURXH1()(*(volatile unsigned char *)(0 x1d04027) #define UTXH0(0 x1d00020+3) /byte_access address by BDMA #define UTXH1(0 x1d04020+3) #define URXH0(0 x1d00024+3) #define URXH1(0 x1d04024+3) #else /小端摸式 #define rUTXH0(*(volatile unsigned char *)0 x1d00020) #define rUTXH1(*(volatile unsigned char *)0 x1d04020) #define rURXH0(*(volatile unsigned char *)0 x1d00024) #define rURXH1(*(volatile unsigned char *)0 x1d04024) #define WrUTXH0(ch) (*(volatile unsigned char *)0 x1d00020)=(unsigned char)(ch) #define WrUTXH1(ch) (*(volatile unsigned char *)0 x1d04020)=(unsigned char)(ch) #define RdURXH0()(*(volatile unsigned char *)0 x1d00024) #define RdURXH1()(*(volatile unsigned char *)0 x1d04024) #define UTXH0(0 x1d00020) /byte_access address by BDMA #define UTXH1(0 x1d04020) #define URXH0(0 x1d00024) #define URXH1(0 x1d04024) #endif 3编写串口驱动函数(MyUart.c): 将寄存器ULCONn、UCONn置零 设置寄存器ULCONn、UCONn、 UBRDIV 延时 开始 发送队列是否 为空? 延时 是 否 发送数据 WrUTXH0(data) 开始 接收队列是否 为满? 是 否 接收数据 RdURXHn() 图 6-1 串口初始化 图 6-2 发送数据 图 6-3 接收数据 31 4在主函数中实现将从串口 0 接收到的数据发送到串口 0(Main.c): 开发板初始化 ARMTargetInit() (uhal.h) 从串口读取数据 向串口发送数据 图 6-4 主函数 六、思考题 RS232 串行通讯的数据格式是什么? 串行通讯最少需要几根线,分别如何连接? ARM 的串行口有几个,相应的寄存器是什么? 4用中断方式实现串口驱动。 32 实验七 键盘及 LED 驱动实验 一、实验目的 1学习键盘及 LED 驱动原理。 2掌握 zlg7289 芯片的使用方法。 二、实验内容 通过 zlg7289 芯片驱动 17 键的键盘和 8 个共阴极 LED,将按键值在 LED 上显示出来。 三、预备知识 1掌握在 ARM ADS 1.2 集成开发环境中编写和调试程序的基本过程。 2了解 ARM 应用程序的框架结构。 3了解 UC/OS-II 多任务的原理。 四、实验设备及工具 硬件硬件:ARM 嵌入式开发板、用于 ARM7TDMI 的 JTAG 仿真器、PC 机 P

温馨提示

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

最新文档

评论

0/150

提交评论