1西南科技大学计算机科学与技术学院第一章ADS集成开发环境1ADS集成开发环境简介1.1ARM编译器的选择——ADS目前,针对ARM处理器核的C语言编绎器有很多,如SDT、ADS、IAR、TASKING和GCC等。据了解,目前在国内最流行的是SDT、ADS和GCC。SDT和ADS均为ARM公司自己开发,ADS为SDT的升级版,以后ARM公司不再支持SDT,所以不会选择SDT。GCC虽然支持广泛,很多开发套件使用它作为编译器,与ADS比较其编译效率较低,这对充分发挥芯片性能很不得,所以最终使用ADS编译程序和调试。本实验设备采用ADS编译器,其全称为ARMDeveloperSuite。ADS由命令行开发工具、ARM时实库、GUI开发环境(CodeWarrior和AXD)、实用程序和支持软件组成。有了这些部件,用户就可以为ARM系列的RISC处理器编写和调试自己的开发应用程序了。ADS支持汇编语言和标准C语言和标准C++语言。1.2ADS库路径ADS库路径是在ADS软件安装路径的lib目录下的两个子目录。假设,ADS软件安装在e:\arm\adsv1_2目录,则在e:\arm\adsv1_2\lib目录下的两个子目录armlib和cpplib是ARM的库所在路径。armlib这个子目录包含了ARMC库,浮点代数运算库,数学库存等各类库函数。与这些库相就的头文件在e:\arm\adsv1_2\include目录中。Cpplib这个子目录包含了RogueWaveC++库和C++支持函数库。RogueWaveC++库和C++支持函数库合在一起被称为ARMC++库。与这些库相应的头文件安装在e:\arm\adsv1_2\include目录下。读者需特别注意的几点:(1)ARMC库函数是以二进制格式提供的;(2)ARM库函数禁止修改。如果读者想对库函数创建新的实现的话,可以把这个新的函数编译成目标文件,然后在链接的时候把它包含进来。这样在链接的时候,使用的是新的函数实现而不是原来的库函数。(3)通常情况下,为了创建依赖于目标的应用程序,在ANSIC库中只有很少的几个函数需要实现重建。(4)RogueWaveStandardC++函数库的源代码不是免费发布的,可以从RogueWaveSoftwareInc,或ARM公司通过支付许可证费用来获得源文件。2ADS集成开发环境的使用2.1进入ADS集成开发环境点击桌面ADS图标,如下图所示,进入ADS集成开发环境。2.2建立一个工程(1)在CodeWarrior中新建一个工程有两种方法:方法一:在工具栏中单击“New”按钮,如下图:方法二:在“File”菜单中选择“New…”,如下图:(2)执行上步骤后,则会弹出“新建工程对话框”,如下图:在这个对话框中为用户提供了7种可选择的工程类型。ARMExecutablImage:用于由ARM指令的代码生成一个ELF格式的可执行映像文件;ARMObjectLibrary:用于由ARM指令的代码生成一个armar格式的目标文件库;EmptyPrlject:用于创建一个不包含任何库或源文件的工程;MakefileImporterWizard:用于将VisualC的nmake或GNUmake文件转入到CodeWarriorIDE工程文件;ThumbARMExecutableImage:用于由ARM指令和Thumb指令的混和代码生成一个可执行的ELF格式的映像文件;ThumbExecutableimage:用于由Thumb指令创建一个可执行的ELF格式的映像文件;ThumbObjectLibrary:用于由Thumb指令的代码生成一个armar格式的目标文件库。在这里选择ARMExecutableImage,在“Projectname:”中输入工程文件名,本例为“ledcircle”,点击“Location:”文本框的“Set…”按钮,浏览选择想要将该工程保存的路径,将宽大些设置好后,点击“确定”,即可建立一个新的名为ledcircle的工程。此时会出现ledcircle.mcp的窗口,如下图如示,其中有三个标签页,分别为files,linkorder,target。3西南科技大学计算机科学与技术学院2.3新建原文件(1)在“File”菜单中选择“New”,在打开的对话框中,选择标签页File,在Filename中输入要创建的文件名,若是汇编语言则文件名格式为:***.s,若是C语言则文件名格式为:***.c,然后再点击“确定”关闭窗口。在这里还有一个细节,希望注意。在建立好一个工程时,默认的target是DebugRel,还有另外两个可用的target,分别为Realse和Debug,这三个target的含义分别为:DebugRel:使用该目标,在生成目标的时候,会为每一个源文件生成调试信息;Debug:使用该目标为每一个源文件生成最完全的调试信息;Release:使用该目标不会生成任何调试信息。在本例中,使用默认的DebugRel目标。2.4向工程添加文件(1)在ledcircle.mcp窗口的file标签页内右击鼠标右键,选中“AddFiles…”可以把要用到的源程序添加到工程中。(2)选中了要添加的文件后,会出现如下所示的一个对话框,询问用户把文件添加到何类目标中,在这里,我们选择DebugRel目标,再按OK即可把刚才创建的两个文件添加到工程中来。(3)对于本实验,在建立好每一个工程后都需将stardcode文件夹里的所有文件添加至工程中,且新建的每个文件里都需包含“config.h”头文件才行。原因不多说明,有兴趣可自行阅读文件代码。2.5编译和链接工程在进行编译和链接前,首先讲述一下如何进行生成目标的配置。点击Edit菜单,选择“DebugRelSettings…”,则出现如下图如示的对话框:这个对话框中的设置很多,在这里只介绍一些最为常用的设置选项,读者若对其他未涉及到的选项感兴趣,可以查看相应的帮助文件。(1)target设置选项A:TargetName文本框显示了当前的目标设置。B:Linker选项供用户选择要使用的链接器。在这里默认选择的是ARMLinker,使用该链接器,将使用armlink链接编译器和汇编器生成的工程中的文件相应的目标文件。C:Pre-Linker:目前CodeWarriorIDE不支持该选项。D:Post-Linker:选择在链接完成后,还要对输出文件进行的操作。因为在本例中,希望生成一个可以烧写到Flash中去的二进制代码,所在在这里选择ARMfromELF,表示在链接生成映像文件后,再调用FromELF命令将含有调试信息的ELF格式的映像文件转换成其化格式的文件。(2)Linker设置鼠标选中ARMLinker,出现如下图所示对话框。这里详细介绍该对话框的主要的标签页选项,因为这些选项对最终生成的文件有着直接的影响。A:在标签页Output中,Linktype中提供了三种链接方式。Partial方式表示链接器只进行部分链接,经过部分链接生成的目标文件,可以作为以后进一步链接时的输入文件。Simple方式是默认的链接方式,也是最为频繁使用的链接方式,它链接生成简单的ELF格5西南科技大学计算机科学与技术学院式的目标文件,使用的是链接器选项中指定的地址映射方式。Scattered方式使得链接器要根据scatter格式文件中指定的地址映射,生成复杂的ELF格式的映像文件。这个选项一般情况下,使用不太多。因为我们所举的例子比较简单,选择Simple方式就可以了。在选择Simple方式后,就会出现Simpleimage。B:ROBase:这个文本框设置包含有RO段的加载域为同一个地址。默认是0x8000。这里用户要根据自已硬件的实际SDRAM的地址空间来修改这个地址,保证在这里填写的地址,是程序运行时,SDRAM地址空间所能覆盖的地址。针对本实验可以设置地址值为:0x00000000。C:RWBase:这个文本框设置了包含RW和ZI输出段的运行域地址。如果选中split选项,链接器生成的映像文件将包含两个加载域和两个运行域,此时,在RWBase中所输入的地址为包含RW和ZI输出段的域设置了加载域和运行域地址。本实验可设置为:0x40000030。D:在标签页Options中,将Imageentrypoint文本框设置为:0x00000000。如下图所示:E:在标签页Layout中,将Object/Symbol设为:startup.oF:将Section设为:vectors鼠标选中ARMfromELF,则会出现如下图所示的对话框:A:在Outputformat中选择Intel32bitHexB:在Outputfilename文本域输入期望生成的输出文件存放的路径,或通过点击Choose…按钮从文件对话框中选择输出文件。如果在这个文本域不输入路径名,则生成的文件存放在工程所在的目录下。(3)点击CodeWarriorIDE的菜单Project下的make菜单,或按F7键就可以对工程进行编译和链接了。7西南科技大学计算机科学与技术学院第二章基础实验一数码管扫描程序1实验目的1.1理解ARM数码管显示的一般原理,掌握使用数码显示的一般方法。1.2学会十六进制字型的显示方法1.3学会同时(实际上并不是同时,只是视觉)让多个数码管显示,显示任意字符1.4了解74HC595是如何工作的2实验内容2.1理解数码管显示的字符代码和数字之间的关系。2.2理解数码管是如何片选及显示2.3依次让多个数码管显示任意字符2.4学会使用74HC5953实验预习要求3.1查找数码管扫描相关资料,了解循环扫描的基本原理,3.2复习ARM中对端口的操作步骤,复习数码管模块的是实现方法。3.3查找74HC595的芯片资料,了解该芯片的工作原理和在数码管扫描模块中的作用。4实验原理5端口寄存器介绍PINSEL是用于选择端口功能选择,IOPIN用于读引脚当前状态,IOSET控制寄存器引脚输出高电平,IOCLR控制寄存器引脚输出低电平,IODIR控制每个IO口的方向。例如:IODIR|=DLED_RCK;(DLED_RCK为宏,是一个32位无符号整型)5.1595原理数码管扫描涉及到4个引脚,分别是P0.17~P0.20。P0.17,P0.18,P0.20分别作为74HC595的SCK,SI,RCK。(结合74HC595手册理解)通过SI口接收每位数据;SCK的高电平发出移位信号,每位数据都移动到下一个移位寄存器中;遇到同步发送脉冲RCK时,将多位数据一次发送到寄存器中,形成一个相当于8位或多位的并行数据;从而通过595给数码管给予片选和数据5.2数码管原理数码管内部为8个发光二极管,并排列为8字形,同时加一个位表示小数点,通过这8个发光二极管的合理组合,可以构成不同的数字字型和简单的字母字型,同时数码管还有一个位选信号。即8个数码管的公共端,用于电平选中。原理图中的A~H的0,1组合就可以组成不同的字符。6实验流程图数码管原理图图1数码管总体流程图7参考源代码9西南科技大学计算机科学与技术学院8思考题8.1如何使你写的程序高效8.2如何使你写的程序可广泛移植到其他程序中8.3是否有其他的方法让数码管显示二键盘扫描程序1实验目的1.1了解键盘电路的布局,理解键盘扫描的基本原理1.2熟练掌握键盘轮转扫描的方法1.3熟悉74HC595芯片的原理,以及如何利用74HC595写程序实现串并转换。2实验内容2.1了解实验箱键盘模块的工作原理,引脚连接。2.2写程序实现轮转扫描算法,实现键盘的扫描。能够判断是否有键按下,结合数码管显示模块,实现按下某键显示相应内容。3实验预习要求3.1查找键盘相关资料,了解轮转扫描的基本原理,对比其与行扫描、全扫描的区别。3.2复习ARM中对端口的操作步骤,复习数码管模块的是实现方法。3.3查找74HC595的芯片资料,了解该芯片的工作原理和在键盘扫描模块中的作用。4实验原理4.1键盘扫描引脚设置键盘扫描涉及到4个引脚,分别是P0.