收藏 分销(赏)

ARM实验指导书.docx

上传人:可**** 文档编号:4252792 上传时间:2024-08-30 格式:DOCX 页数:55 大小:805.23KB 下载积分:10 金币
下载 相关 举报
ARM实验指导书.docx_第1页
第1页 / 共55页
ARM实验指导书.docx_第2页
第2页 / 共55页


点击查看更多>>
资源描述
西南科技大学计算机科学与技术学院 第一章 ADS集成开发环境 1 ADS集成开发环境简介 1.1 ARM编译器的选择 —— ADS 目前,针对ARM处理器核的C语言编绎器有很多,如SDT、ADS、IAR、TASKING和GCC等。据了解,目前在国内最流行的是SDT、ADS和GCC。SDT和ADS均为ARM公司自己开发,ADS为SDT的升级版,以后ARM公司不再支持SDT,所以不会选择SDT。GCC虽然支持广泛,很多开发套件使用它作为编译器,与ADS比较其编译效率较低,这对充分发挥芯片性能很不得,所以最终使用ADS编译程序和调试。 本实验设备采用ADS编译器,其全称为ARM Developer Suite。ADS由命令行开发工具、ARM时实库、GUI开发环境(Code Warrior和AXD)、实用程序和支持软件组成。有了这些部件,用户就可以为ARM系列的RISC处理器编写和调试自己的开发应用程序了。ADS支持汇编语言和标准C语言和标准C++语言。 1.2 ADS库路径 ADS库路径是在ADS软件安装路径的lib目录下的两个子目录。假设,ADS软件安装在e:\arm\adsv1_2目录,则在e:\arm\adsv1_2\lib目录下的两个子目录armlib和cpplib是ARM的库所在路径。 armlib这个子目录包含了ARM C库,浮点代数运算库,数学库存等各类库函数。与这些库相就的头文件在e:\arm\adsv1_2\include目录中。 Cpplib这个子目录包含了Rogue Wave C++库和C++支持函数库。Rogue Wave C++库和C++支持函数库合在一起被称为ARM C++库。与这些库相应的头文件安装在e:\arm\adsv1_2\include目录下。 读者需特别注意的几点: (1) ARM C库函数是以二进制格式提供的; (2) ARM 库函数禁止修改。如果读者想对库函数创建新的实现的话,可以把这个新 的函数编译成目标文件,然后在链接的时候把它包含进来。这样在链接的时候, 使用的是新的函数实现而不是原来的库函数。 (3) 通常情况下,为了创建依赖于目标的应用程序,在ANSI C库中只有很少的几个函数需要实现重建。 (4) Rogue Wave Standard C++函数库的源代码不是免费发布的,可以从Rogue Wave Software Inc,或ARM公司通过支付许可证费用来获得源文件。 2 ADS集成开发环境的使用 2.1 进入ADS集成开发环境 点击桌面ADS图标,如下图所示,进入ADS集成开发环境。 2.2 建立一个工程 (1) 在CodeWarrior中新建一个工程有两种方法: 方法一:在工具栏中单击“New”按钮,如下图: 方法二:在“File”菜单中选择“New…”,如下图: (2)执行上步骤后,则会弹出“新建工程对话框”,如下图: 在这个对话框中为用户提供了7种可选择的工程类型。 ARM Executabl Image:用于由ARM指令的代码生成一个ELF格式的可执行映像文件; ARM Object Library:用于由ARM指令的代码生成一个armar格式的目标文件库; Empty Prlject:用于创建一个不包含任何库或源文件的工程; Makefile Importer Wizard:用于将Visual C 的nmake 或 GNU make 文件转入到CodeWarrior IDE 工程文件; Thumb ARM Executable Image:用于由ARM指令和Thumb指令的混和代码生成一个可执行的ELF格式的映像文件; Thumb Executable image:用于由Thumb 指令创建一个可执行的ELF格式的映像文件; Thumb Object Library:用于由Thumb指令的代码生成一个armar格式的目标文件库。 在这里选择ARM Executable Image,在“Project name:”中输入工程文件名,本例为“ledcircle”,点击“Location:”文本框的“Set…”按钮,浏览选择想要将该工程保存的路径,将宽大些设置好后,点击“确定”,即可建立一个新的名为ledcircle的工程。 此时会出现ledcircle.mcp的窗口,如下图如示,其中有三个标签页,分别为files,linkorder,target。 2.3 新建原文件 (1)在“File”菜单中选择“New”,在打开的对话框中,选择标签页File,在File name中输入要创建的文件名,若是汇编语言则文件名格式为:***.s,若是C语言则文件名格式为:***.c,然后再点击“确定”关闭窗口。 在这里还有一个细节,希望注意。在建立好一个工程时,默认的target是DebugRel ,还有另外两个可用的target,分别为Realse和Debug,这三个target的含义分别为: DebugRel:使用该目标,在生成目标的时候,会为每一个源文件生成调试信息; Debug:使用该目标为每一个源文件生成最完全的调试信息; Release:使用该目标不会生成任何调试信息。 在本例中,使用默认的 DebugRel 目标。 2.4 向工程添加文件 (1)在ledcircle.mcp窗口的file标签页内右击鼠标右键,选中“Add Files…”可以把要用到的源程序添加到工程中。 (2)选中了要添加的文件后,会出现如下所示的一个对话框,询问用户把文件添加到何类目标中,在这里,我们选择DebugRel目标,再按OK即可把刚才创建的两个文件添加到工程中来。 (3)对于本实验,在建立好每一个工程后都需将stardcode文件夹里的所有文件添加至工程中,且新建的每个文件里都需包含“config.h”头文件才行。原因不多说明,有兴趣可自行阅读文件代码。 2.5 编译和链接工程 在进行编译和链接前,首先讲述一下如何进行生成目标的配置。 点击Edit菜单,选择“DebugRel Settings…”,则出现如下图如示的对话框: 这个对话框中的设置很多,在这里只介绍一些最为常用的设置选项,读者若对其他未涉及到的选项感兴趣,可以查看相应的帮助文件。 (1)target设置选项 A: TargetName 文本框显示了当前的目标设置。 B: Linker 选项供用户选择要使用的链接器。在这里默认选择的是ARM Linker,使用该链接器,将使用armlink链接编译器和汇编器生成的工程中的文件相应的目标文件。 C: Pre-Linker:目前CodeWarrior IDE不支持该选项。 D: Post-Linker:选择在链接完成后,还要对输出文件进行的操作。因为在本例中,希望生成一个可以烧写到Flash中去的二进制代码,所在在这里选择 ARM fromELF,表示在链接生成映像文件后,再调用FromELF命令将含有调试信息的ELF格式的映像文件转换成其化格式的文件。 (2)Linker设置 鼠标选中ARM Linker,出现如下图所示对话框。这里详细介绍该对话框的主要的标签页选项,因为这些选项对最终生成的文件有着直接的影响。 A: 在标签页Output中,Linktype中提供了三种链接方式。Partial方式表示链接器只进行部分链接,经过部分链接生成的目标文件,可以作为以后进一步链接时的输入文件。Simple方式是默认的链接方式,也是最为频繁使用的链接方式,它链接生成简单的ELF格式的目标文件,使用的是链接器选项中指定的地址映射方式。Scattered方式使得链接器要根据scatter格式文件中指定的地址映射,生成复杂的ELF格式的映像文件。这个选项一般情况下,使用不太多。因为我们所举的例子比较简单,选择Simple方式就可以了。在选择Simple方式后,就会出现Simple image。 B: RO Base:这个文本框设置包含有RO段的加载域为同一个地址。默认是0x8000。这里用户要根据自已硬件的实际SDRAM的地址空间来修改这个地址,保证在这里填写的地址,是程序运行时,SDRAM地址空间所能覆盖的地址。针对本实验可以设置地址值为: 0x00000000 。 C: RW Base:这个文本框设置了包含RW和ZI输出段的运行域地址。如果选中split选项,链接器生成的映像文件将包含两个加载域和两个运行域,此时,在RW Base中所输入的地址为包含RW和ZI输出段的域设置了加载域和运行域地址。本实验可设置为:0x40000030 。 D: 在标签页Options中,将Image entry point文本框设置为:0x00000000 。如下图所示: E: 在标签页Layout中,将Object/Symbol设为:startup.o F: 将Section设为:vectors 鼠标选中ARM fromELF,则会出现如下图所示的对话框: A: 在Output format中选择Intel 32 bit Hex B: 在Output file name文本域输入期望生成的输出文件存放的路径,或通过点击Choose…按钮从文件对话框中选择输出文件。如果在这个文本域不输入路径名,则生成的文件存放在工程所在的目录下。 (3)点击CodeWarrior IDE的菜单Project下的make菜单,或按F7键就可以对工程进行编译和链接了。 第二章 基础实验 一 数码管扫描程序 1 实验目的 1.1 理解ARM数码管显示的一般原理,掌握使用数码显示的一般方法。 1.2 学会十六进制字型的显示方法 1.3 学会同时(实际上并不是同时,只是视觉)让多个数码管显示,显示任意字符 1.4 了解74HC595是如何工作的 2 实验内容 2.1 理解数码管显示的字符代码和数字之间的关系。 2.2 理解数码管是如何片选及显示 2.3 依次让多个数码管显示任意字符 2.4 学会使用74HC595 3 实验预习要求 3.1 查找数码管扫描相关资料,了解循环扫描的基本原理, 3.2 复习ARM中对端口的操作步骤,复习数码管模块的是实现方法。 3.3 查找74HC595的芯片资料,了解该芯片的工作原理和在数码管扫描模块中的作用。 4 实验原理 5 端口寄存器介绍 PINSEL是用于选择端口功能选择,IOPIN用于读引脚当前状态,IOSET控制寄存器引脚输出高电平,IOCLR控制寄存器引脚输出低电平,IODIR控制每个IO口的方向。例如:IODIR |= DLED_RCK;(DLED_RCK为宏,是一个 32位无符号整型) 5.1 595原理 数码管扫描涉及到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 参考源代码 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.4~P0.7。P0.4,P0.6,P0.7分别作为74HC595的SCK,SI,RCK,(595原理在前一实验已做介绍) p0.5为返回值端口,也是按键是否按下的判断位。在硬件电路上,只要一个按键按下,并且对应的片选中该位为低电平(任意一位同时满足两条件),那么rekey端口将返回低电平,处理器可以根据该端口的电平来判断是否有键按下。具体是何键值则可以由程序设计判断,因为片选可以通过逐位清0(16个位只能有一位为0)来实现的(本实验才用轮转扫描算法) 4.2 轮转扫描实现 通过595向16位键盘输入片选,其中只有一位为0,为了在同一时刻只判断一位是否按下。通过对片选数据逐位右移,将对每一位判断是否按下,如果同时满足该位片选为0且有键按下,那么返回值为0,说明有键按下,同时可在程序中用一记数变量记录判断是哪一位,同时就解决了是何键按下,因为一旦判断出返回值为0,说明此刻记数变量的值即为按下键盘为的值(或者说相关,看你具体程序如何处理),此刻立即取出变量中的值,就做到了判断是何键位的目的。 5 实验流程图 总体流程图 扫描函数流程图 6 参考源代码 7 思考题 7.1 如果按键与需要的偶尔有差别,为什么? 7.2 当按下键后,是否需要继续扫描,两者如何实现? 7.3 同时按下两个键,什么结果,为什么? 三 点阵屏汉字显示程序 1 实验目的 1.1 了解点阵屏显示基本原理 1.2 熟悉74HC595芯片的原理,以及如何利用74HC595写程序实现串并转换。 1.3 熟悉使用字模软件 1.4 进一步熟悉ARM的端口操作 2 实验内容 2.1 建立汉字字库 2.2 在点阵屏上显示汉字 3 实验预习要求 3.1 预习GPIO(GERERAL PROGRAMABLE INPUT OUTPUT)通用可编程输入输出口的基本操作。 3.2 找相关74HC595芯片的资料,了解起基本原理和使用方法。 4 实验原理 点阵屏涉及到4个引脚,分别是P0.20~P0.17。P0.4,P0.17,P0.18和P0.19,P0.20分别作为74HC595的SCK,SI,RCK。(结合74HC595手册理解)通过SI口接收每位数据,P0.18和P0.19分别对应SI-X,SI-Y,用于控制行和列的显示;SCK的高电平发出移位信号,每位数据都移动到下一个移位寄存器中;遇到同步发送脉冲RCK时,将多位数据一次发送到寄存器中,形成一个相当于16位或多位的并行数据。 点阵显示是这样实现的。利用串并转换将两个16位数据分别发送给P0.18和P0.19所对应的SI-X和SI-Y。它们分别控制片选位和显示数据位。(至于行列哪个作片选位哪个做数据显示位可由自己定,一般便于观察和结合字模软件,将点阵屏相对于实验箱正向的行作为数据显示位,列作为片选位)通过控制片选和数据显示位可以实现固定行显示固定的亮灭信息。再通过扫描算法(与LED灯相似)实现点阵屏显示任意数据信息。 字模软件的使用: 通过字模软件,可以很容易的实现16X16(或者其他大小)的点阵字模数据的提取,而不用手动的去计算。具体的实现方法可以结合软件自己尝试,比较容易。 字库的建立一个重要问题在于如何索引,即通过哪种方式可以方便的调用你的字库,一般建立字库采用二维数组。通过数字索引或者其他方式可以方便调用。如果是ASC码的字符,可以通过以ASK码为桥梁方便的建立索引。 5 实验流程图 图 2点阵总体流程图 图 3 点阵扫描函数流程图 6 参考源代码 7 思考题 7.1 怎样使点阵屏隔一段时间显示另一个字? 7.2 与LED程序相比较,有什么异同? 四 外部中断实验 1 实验目的 1.1 了解外部中断的基本设置方法和原理。 1.2 通过外部中断实验学习ARM中中断的产生机制。 1.3 了解中断的应用。 2 实验内容 2.1 通过实验箱发声器和红外发送-接收对管实现通过外部中断令发生器产生声响。 3 实验预习要求 3.1 预习《ARM嵌入式系统基础教程》中向量中断控制器和外部中断输入的章节,了解相关寄存器的内容和用法。 3.2 了解什么是外部中断,与其他中断有什么联系和区别。 4 实验原理 首先需要介绍向量中断控制器的相关知识: 4.1 向量中断控制器(VECTORED INTERRUPT CONTROLLER,简称VIC) 向量中断寄存器:具有32个中断请求输入,可将其编程分为3类:FIQ,向量IRQ,非向量IRQ。可编程分配机制意味着不同外设的中断优先级可以动态分配及调整。 中断输入可以在VIC被设置成三类 1、FIQ中断 :具有最高优先级 2、向量IRQ中断 :具有中等优先级 VIC最多支持16个向量IRQ中断,这些中断被分为16个优先级,每个优先级有一个中断服务地址 3、非向量IRQ中断 :具有最低优先级 所有的非向量IRQ中断共用一个中断服务地址 4.2 相关寄存器 与中断相关的常用和比较重要的寄存器主要有: VICIntEnable 中断使能寄存器32位,每一位控制一个中断源,向某一位写入1,允许该中断源产生中断 VICIntClr 中断使能清零寄存器,与VICIntEnable相反,写入1,相应位中断源禁止中断 VICIntSelect 中断选择寄存器 向某位写1,对应中断源产生FIQ中断,否则产生IRQ中断,其中断相应延时相应较长 VICVectCntl 中断向量控制寄存器 为中断源分配向量IRQ的优先级 ,VICVectCntl n,n值越小优先级越高,0<=n<=15 VICVectCntl 位 7 6 5 4 3 2 1 0 功能 - - En 【 中断源序号 】 VICVectAddr 向量地址寄存器 为该中断优先级设置服务程序入口地址 VICRawIntr 中断状态寄存器 32寄存器,当某位为1时,对应位中断源产生中断请求 VICFIQStatus FIQ状态寄存器 32寄存器,当某位为1时,对应位中断源产生FIQ中断请求 VICIRQStatus IRQ状态寄存器 32寄存器,当某位为1时,对应位中断源产生IRQ中断请求 VICSoftInt 软件中断寄存器 32寄存器,当某位为1时,对应位中断源产生相应中断请求 VICSoftIntClear 软件中断清零寄存器 当某位为1时,将清零VICSoftInt对应位 软件使能寄存器 VICSoftInt 位 31~1 0 功能 - 该位为1时只有在特权模式下访问VIC寄存器 4.3 初始化基本步骤 以上寄存器并不是全部需要用到,当需要时再进行相应设置即可。这里给出中断初始化的基本步骤: 1、设置中断类型 VICIntSelect 2、设置中断优先级 VICVectCnt 3、将中断服务程序写入相应中断优先级的中断服务程序地址 如:VICVectAddrn = (int)IRQ_Timer0Interrupt 4、使能外部中断 VICIntEnable 4.4 中断源 下表列出了每一个外设功能的中断源。 中断类型号 中断类型号 0 WDT(Watchdog Interrupt) 10 SPI0 1 - 11 SPI1 2 ARM Core 12 PLL 3 ARM Core 13 RTC 4 TIMER0 14 System Control(External Interrupt0(EINT0)) 5 TIMER1 15 System Control(External Interrupt1(EINT1) 6 UART0 16 System Control(External Interrupt2(EINT2) 7 UART1 17 System Control(External Interrupt3(EINT3) 8 PWM0 (Match 0-6(MR0-6)) 18 A/D 4.5 外部中断 LPC2114/2124/2210/2212/2214(包括我们使用的ARM芯片)含有4个外部中断输入(作为可选的引脚功能,即可以通过PINSEL0/1寄存器设置相应引脚为外部中断功能)。外部中断输入可用于将处理器从掉电模式唤醒。 4.5.1 外部中断的相关寄存器有: EXINT 外部中断标志寄存器 包含EINT0、EINT1、EINT2和EINT3的中断标志。 EXTWAKE 外部中断唤醒寄存器 包含3个用于控制外部中断中断是否将处理器从掉电模式唤醒的使能位。 EXTMODE 外部中断方式寄存器 控制由每个引脚的边沿或电平触发中断 EXTPOLAR 外部中断极性寄存器 控制由每个引脚的哪种电平或边沿来触发中断 在对外部中断进行初始化设置时要注意,用EXINT寄存器选择外部中断0,然后利用EXTMODE寄存器选择边沿触发中断。电平触发中断和边沿触发中断的区别在于:电平触发中断是当输入电平为低或高时,将一直触发中断服务程序直到电平变为高或低;而边沿触发则是当电平发生跳变时才触发一次中断服务程序;根据不同需要选择不同触发方式。在我们的实验中要选取边沿触发。根据EXTPOLAR寄存器可以设置每个引脚的哪种电平或边沿来触发中断。 外部中断的初始化设置与一般的终端初始化设置基本一致,只是要多加属于外部中断自己的一些寄存器操作。 4.5.2 脉冲输入模块 脉冲输入模块中的红外线发送-接收对管用作脉冲输入 在正常状态下,发送管发送红外线,接收管接收,信号输出端输出为低电平;若发送管和接收管之间插入一件对红外线有遮挡的物体,接收管不能接收到红外线,此时信号输出端输出高电平。如果遮挡物是循环连续运动的话,该装置就是一个非常好的无触点信号源。 5 实验流程图 图 4 外部中断总体流程图 图 5 外部中断服务程序(结合代码) 6 参考源代码 7 思考题 7.1 如果改用外部中断1可不可以实现该外部中断实验? 7.2 能否实现一个利用外部中断进行计数的程序,相应显示在LED灯中? 五 定时器实验 1 实验目的 1.1 了解定时器工作的基本原理。 1.2 掌握定时器的各个寄存器的功能和设置方法。 1.3 了解ARM中定时器0和定时器1的基本用途。 2 实验内容 2.1 使用定时器0实现1秒定时,让蜂鸣器间隔一秒响一秒。 3 实验预习要求 3.1 预习定时器0和定时器1的章节,了解定时器特性,用途以及引脚。 3.2 对定时器的寄存器进行全面的了解。 4 实验原理 定时器对外设时钟(pclk)周期进行计数,根据4 个匹配寄存器的设定,可设置位匹配(即到达匹配寄存器设定的定时值0 时)产生中断或执行其他动作。他还包括4 个捕获输入,用于在输入信号发生跳变时捕获定时器值,并可选择产生中断。 1.特性 (1)带有可编程32 位预分频器的32 位定时器/计数器; (2)具有多达4 路捕获通道。当输入信号发生跳变时可取得定时器的瞬间值。也可选 择使捕获事件产生中断; (3)4 个32 位匹配寄存器,匹配时的动作有如下3 种 ---匹配时定时器继续工作,可选择产生中断 ---匹配时停止定时器,可选择产生中断 ---匹配时复位定时器,可选择产生中断 (4)4 个对应于匹配寄存器的外部输出,匹配时的输出有如下4 种 ---匹配时设置为低电平 ---匹配时设置为高电平 ---匹配时翻转 ---匹配时无动作 2.相关寄存器描述 (更加详细的寄存器描述参考《ARM嵌入式系统基础教程》P274) TCR 定时控制寄存器,控制定时计数器(禁止或复位,是否启用) 1启用0禁止 TC 定时器计数器 32位计数器,计数频率为pclk经过预分频计数器后频率值。(选择做定时器还是计数器,0定时器,1计数器) PR 预分频控制寄存器 用于设定分频值,32位寄存器,pclk/3相当于3个脉冲时间产生一个上升沿 计数时钟频率=Fpclk/(N+1) PC 预分频计数器 32位计数器,计数频率为pclk,当计数值等于预分频计数器的值时,TC计数器加一 IR 中断标志寄存器 读该寄存器识别中断源,写该寄存器清除中断标志 MCR 匹配控制寄存器 用于控制在匹配时是否产生中断或复位TC 位 功能 0 中断(MR0) 为1时,MR0与TC值的匹配将产生中断 1 复位(MR0) 为1时,MR0与TC值的匹配将使TC复位 2 停止(MR0) 为1时,MR0与TC值的匹配将清零TCR的bit0位,使TC和PC停止 5:3 MR1 8:6 MR2 与上对应相同 9:11 MR3 MR n 匹配寄存器n,通过MCR寄存器可以设置匹配发生时的动作 EMR 外部匹配寄存器 EMR控制外部匹配管脚MATx.0~MATx.3 CCR 捕获控制寄存器,用于设置捕获信号的触发特征(下降沿捕获还是上升沿),以及捕获发生时是否产生中断 CRn(1~3) 捕获寄存器n,在捕获n引脚上产生捕获时间时,CRn装载TC的值 3.定时器初始化步骤: 1、计数定时器计数频率 (设置T0PR) 2、设置匹配值及工作模式 (设置T0MCR) 3、设置捕获方式 (设置T0CCR) 4、设置定时器中断 (设置VIC) 5、启动定时器 (设置TCR) 4.中断函数 ads1.2 规定,在定义中断服务函数时,必须加入关键字__irq,保证函数返回时会切换处理器模式。需要注意的是:注意在退出中断服务程序时,要清零相应外设的中断标志以及VICVectAddr,为响应下一次中断做好准备 。 在中断函数中我们添加需要处理的事件程序。 5 实验流程图 图 6 定时器初始化流程图 图 7 定时器整体流程图(结合代码) 6 参考源代码 7 思考题 7.1 如何设置定时器1? 7.2 怎样将蜂鸣时间改为两秒一间隔? 7.3 结合数码管程序,把数码管扫描放到定时器中。 六 UART串口通信模块 1 实验目的 1.1 了解计算机常用的接口。 1.2 掌握串口通信的原理,能实现实验箱与PC的通信。 2 实验内容 2.1 了解串口通信的数据帧格式及波特率设置。 2.2 实现实验箱与PC的通信,包括从在PC上显示实验箱的键盘按键,在实验箱的数据管显示PC发送的数据。 3 实验预习要求 3.1 查找相关串口资料,了解串口工作的基本流程。 4 实验原理 4.1 串口接口简介 计算机常见的接口包括:并行接口,串行接口,磁盘接口(IDE接口,EIDE接口),SCSI接口,USB接口等。其中串口是计算机上一种常用的设备通信协议,大多数计算机包含两个基于RS 232的串口。串口通讯对嵌入式设备(单片机)而言意义重大,因为它不但可以实现单片机的数据传输到电脑端,而且也能实现电脑对单片机的控制,还能实现设备之间的通信。 4.2 串口数据帧格式及串口通信的控制 串口要实现数据的通信,必须要保证串口发送与接收数据的速率一致和相同的数据帧格式。我们可以通过设置波特率来实现传输数据速率的匹配,所谓波特率是指每秒传送的信息位的数量。如果接收端与发送端的波特率设置不同的话,就会造成数据传输错误。 串口的数据帧格式一般为: 图 1 数据帧格式及相应寄存器设置 我们可以通过串行接口实现数据的发送和接收,一般通过查询方式发送数据,通过中断方式接收数据。 其流程图如下: 图 2 串口发送函数流程图图 图3 串口接收(中断)函数流程图 4.3 实现步骤 图 4 串口连接电路逻辑图 在LPC2292中与串口相关的寄存器(串口0): 图 5 UART0相关的寄存器 其中:(1)U0IER,U0IIR:中断使能与中断标志寄存器。 (2)U0DLM,U0DLL:波特率设置寄存器。    (3)U0THR,U0TSR:发送缓存与发送移位寄存器。 (4)U0RBR,U0RSR:接收缓存与接收移位寄存器。    (5)U0LCR:设置UART0格式(数据帧格式)。    (6)U0FCR:FIFO控制。    (7)U0LSR:UART0当前状态寄存器。 在使用UART0之前需要设置的寄存器:    U0IER:中断的设置(中断优先级,中断服务程序地址等)。 U0DLM,U0DLL:波特率 (每秒传送的信息位的数量,一般设置为9600) 设置。    U0LCR:数据帧格式设置(包括有效数据位数,奇偶校验,结束位数等)。    U0FCR:使能FIFO与触发设置。 一般用默认值。 5 实验流程图 图 5 串口工作流程图  6 参考源代码 7 思考题 7.1 串口与并口有什么不同? 七 I2C存储程序 1 实验目的 1.1 理解并掌握I2C工作原理! 1.2 理解并掌握AT24C02工作方式熟练掌握你存储方式以及读写各状态之间的转换和意义 2 实验内容 2.1 利用实验箱向AT24C02以字节形式写入并读出,用数码管显示 3 实验要求与预习 3.1 参考ARM嵌入式系统基础教程(PPT)了解I2C工作原理。 3.2 读ATC2402数据手册,理解你其操作原理 4 实验原理 4.1 I2C接口介绍 是Philips推出的一种串行总线方式,用于IC器件之间的通信。它通过SDA和SCL两根线连到总线上的器件之间传递信息,并通过软件寻址识别到每个器件,而不是片选线。而对SDA和SCL则是通过器件之间发生应答和非应答信号。而关联应答和非应答信号,则会对器件产生不同状态,并通过状态的不同对器件操作。 4.2 写函数带选择地址字节写的状态(已经发送启示条件)0X08(装入器件地址和读写位)—(接受可器件地址和读写位并已经接受ACK)0X18(将发送数据,即AT24C02的存储地址)---(接收到24C02的写入地址,接受ACK)0X28(将发送写入数据)---(接受到存储数据,接受到ACK)0X28(发送停止条件,STO复位), 每一状态参考课本设置下一次操作的初始状态! 4.3 读函数带选择地址字节读的状态0X08—0X18(发送的要读地址)---(前面跟写一样)0X28(将置位STA将从新发送启始条件)—(已经发送启始条件)0X10(将发送器件地址以及读状态)—(接受到状态信息)0X40(将接收数据,返回非ACK)—(接收到数据)0X58(提取数据) 4.4 启动I2C后,循环等待中断,每到达一状态产生一次中断、直到完成,停止循环! 具体状态转换请仔细读ARM嵌入式系统基础教程(ppt)和ATC2402数据手册 5 实验流程图 总的流程图 写函数流程图 读函数流程图 6 参考源代码 7 思考题 7.1 如何完成字符串写入和带选择地址连续读 八 电机实验 1 实验目的 1.1 了解步进电机、直流电机工作的基本原理。 1.2 学习步进电机、直流电机的控制原理和控制方法。 2 实验内容 2.1 实现直流电机不同转速的转动。 2.2 利用定时器实现步进电机的不同转速的转动,并可以控制步进电机的正转和逆转。 3 实验预习要求 3.1 适当复习端口操作章节。 3.2 在网上查找步进、直流电机相关资料,了解基本原理并结合电机连接引脚熟悉控制原理。 4 实验原理 4.1 步进电机 步进电机是一种将电脉冲转化为角位移的执行机构。当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(称为“步距角”),它的旋转是以固定的角度一步一步运行的。可以通过控制脉冲个数来控制
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 应用文书 > 技术指导

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服