嵌入式实验手册_jlink.doc_第1页
嵌入式实验手册_jlink.doc_第2页
嵌入式实验手册_jlink.doc_第3页
嵌入式实验手册_jlink.doc_第4页
嵌入式实验手册_jlink.doc_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

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

文档简介

嵌入式系统原理实验指导书(第一版)作者:任彧 邬惠峰杭州电子科技大学计算机学院目录实验一 ADS开发环境实验4一、实验目的4二、实验设备4三、实验内容4四、实验说明44.1 ADS简介44.2 S3C2410工程基本结构和基础内容44.3 ARM JTAG接口电路54.4 J-LINK ARM的主要特征54.5 Multi-ICE Server简介6五、实验步骤65.1 安装ADS65.2 打开现有工程65.3 新建一个工程项目125.4 正确连接硬件155.5 J-LINK连接155.6 串口DNW的设置165.7 程序的仿真17六、参考例程23七、实验结果23实验二 LED跑马灯实验24一、实验目的24二、实验设备24三、实验内容24四、实验说明24五、实验步骤25六、参考例程25七、实验结果27实验三 矩阵键盘驱动实验28一、实验目的28二、实验设备28三、实验内容28四、实验说明284.1 中断的基本概念284.2 S3C2410X中断控制器294.3 扫描按键30五、实验步骤33六、参考例程33七、实验结果35实验四 看门狗实验36一、实验目的36二、实验设备36三、实验内容36四、实验说明364.1 看门狗功能简述364.2 看门狗的工作原理364.3 S3C2410看门狗的控制364.4 控制寄存器(WTCON)374.5 数据寄存器(WTDAT)374.6 计数器寄存器(WTCNT)38五、实验步骤38六、参考例程38七、实验结果40实验五 DMA实验41一、实验目的41二、实验设备41三、实验内容41四、实验说明414.1 DMA基本知识414.2 S3C2410的DMA控制器42五、实验步骤42六、参考例程42七、实验结果45实验六 A/D与D/A实验46一、实验目的46二、实验设备46三、实验内容46四、实验说明464.1 A/D 转换器464.2 S3C2410的A/D控制器474.3 D/A原理494.4 采用IIC通信得D/A芯片MAX538049五、实验步骤50六、参考例程50七、实验结果53实验一 ADS开发环境实验一、实验目的l 熟悉ADS开发环境中CodeWarrior for ARM Developer Suite组件的应用;l 掌握使用ADS开发环境编译工程项目的方法;l 了解S3C2410工程基本结构和基础内容;l 熟悉J-Link V8仿真器的用法;l 熟悉ADS开发环境中“AXD Debugger”组建的使用;l 熟悉掌握ADS调试程序的方法。二、实验设备l 硬件:DM2410实验板;PC机;J-Link V8仿真器;l 软件:PC机操作系统(WINDOWS XP);ARM Developer Suite v1.2;J-Link ARM V4.081;三、实验内容l 熟悉ADS开发环境及其中的CodeWarrior for ARM Developer Suite组件;l 编译原有工程文件;l 新建工程文件;l 正确连接试验系统硬件系统;l 使用J-Link ARM V4.081进行仿真;l 学习下载工程到实验板;l 学习单步调试程序。四、实验说明4.1 ADS简介ADS是一个使用方便的集成开发环境,全称是“ARM Developer Suite v1.2 ”,它是由ARM公司提供的专门用于ARM相关应用开发和调试的综合性软件。在易用性上比上一代的SDT开发环境有较大提高,是一套功能强大又易于使用的开发环境。ADS囊括了一系列的应用,并有相关的文档和实例的支持,使用者可以用它来编写和调试各种基于ARM家族RISC处理器的应用。你可以使用ADS来开发、编译、调试采用包括C、C+和ARM汇编语言编写的程序。ADS主要由以下部分构成:命令行开发工具;图形界面开发工具;各种辅助工具;支持软件。我们在本实验指导书中用到了“CodeWarrior for ARM Developer Suite”和“AXD Debugger”两个部件。其中CodeWarrior for ARM Developer Suite用于生成和编译工程,AXD Debugger用于下载和调试工程项目。4.2 S3C2410工程基本结构和基础内容一个工程中首先包括对芯片的初始化文件,然后是常用接口(如串口)等的相关应用文件,完成功能的主文件和辅助文件以及相关的头文件。因为实验中会在工程目录中自动新建文件夹和文件,所以不要在附录光盘上编译工程。将光盘上“实验工程ADS实验module”文件夹拷贝到本地硬盘。我们假设拷贝到“F: ARM9实验 module”目录中,我们下面的实验中将以此为基础。打开实验目录中“F:arm9实验module源文件”文件夹,可以看到12个文件,这十二个文件是三星公司提供的针对S3C2410的源文件:2410init.s:这个文件是工程的引导文件,是ARM汇编语言文件,打开这个文件(可用记事本工具),可以看到其中主要对S3C2410的端口、存储器、中断向量表等进行了初始化。同时引导到了主函数便于工程运行。其中调用了Memcfg.inc、Option.inc、2410addr.inc三个文件,这三个文件也是ARM汇编语言,主要定义了一些宏,将芯片内的地址,向量表,偏移地址等进行了宏定义。2410slib.s:2410init.s的辅助函数,完成一些基本的功能。2410Main.c:C语言的程序运行的主函数,完成功能。在本套实验系统中主函数主要用来进行端口初始化,打印引导信息等基本功能,主要的功能将在自行编制的文件中完成。其中调用了2410lib.h,2410slib.h,2410addr.h,Def.h,Option.h等头文件,这些头文件也是进行了诸如宏定义,引导等功能。可以自行打开了解其内部功能。2410lib.c:C语言的辅助功能文件。类似于2410slib.s,提供了一系列函数便于主文件与其它文件在完成功能时调用。编译完成一个功能的工程时,程序运行的基本脉络是:运行2410init.s对S3C2410进行初始化引导到2410Main.c,对端口进行初始化调用功能函数,完成功能。这样组织一个工程既可以很好的提高程序的可读性(使用了大量的宏定义),又使得程序脉络清晰。请仔细阅读这些文件,特别是C语言文件(*.c和*.h文件)了解这些文件可以完成的功能,便于在后续的实验和自行开发中调用。4.3 ARM JTAG接口电路JTAG(Joint Test Action Group,联合测试行动小组)是一种国际标准测试协议,主要用于芯片内部测试及对系统进行仿真、调试,JTAG 技术是一种嵌入式调试技术,它在芯片内部封装了专门的测试电路TAP(Test Access Port,测试访问口),通过专用的JTAG 测试工具对内部节点进行测试。目前大多数比较复杂的器件都支持JTAG 协议,如ARM、DSP、FPGA 器件等。标准的JTAG 接口是4 线:TMS、TCK、TDI、TDO,分别为测试模式选择、测试时钟、测试数据输入和测试数据输出。JTAG 测试允许多个器件通过JTAG 接口串联在一起,形成一个JTAG 链,能实现对各个器件分别测试。JTAG 接口还常用于实现ISP(In-System Programmable 在系统编程)功能,如对FLASH器件进行编程等。4.4 J-LINK ARM的主要特征USB接口符合USB2.0规范;标准的20芯JTAG接口;支持ARM9内核,包括Thumb模式;USB接口供电,无需外接电源;J-Link支持对目标板 5V(300mA),3.3V(400mA)供电;带USB连接线和20芯扁平电缆;最高JTAG速度达到12MHz;目标板电压范围1.2V-3.3V;自动速度识别功能;监测所有JTAG信号和目标板电压;完全即查即用;支持多JTAG期间串行连接;下载速度高达 ARM:550KB/s,通过DCC最高可达800KB/s4.5 Multi-ICE Server简介J-Link是SEGGER公司为支持仿真ARM内核芯片推出的JTAG仿真器。配合IAR EWAR,ADS,KEIL,WINARM,Real View等集成开发环境支持所有ARM7/ARM9/ARM11内核芯片的仿真,通过RDI接口和各集成开发环境无缝连接,操作方便、连接方便、简单易学,是学习开发ARM最好最实用的开发工具。五、实验步骤5.1 安装ADS参照实验附录光盘上ADS安装目录中的文档安装ARM Developer Suite v1.2。5.2 打开现有工程5.2.1 打开ADS点击:桌面开始程序ARM Developer Suite v1.2CodeWarrior图1打开后出现以下界面,这就是CodeWarrior for ARM Developer Suite的工作环境。图25.2.2 打开工程文件,并熟悉界面将光盘上“实验工程ADS实验helloworld”文件夹拷贝到本地硬盘。点击CodeWarrior for ARM Developer Suite界面上fileopen找到HELLOWORDLE.mcp文件并打开图3出现以下界面:图4这是工程窗口,其中窗体中的文件是项目中用到的所有源文件。点击图4中圈出的按钮,打开设置窗口:Target Settings 设置:图5ARM Assembler设置: 图6ARM C Compiler设置:图7ARM C+ Compiler设置:图8ARM C Compiler设置:图9Thumb C+ Compiler设置:图10 下面的界面中选用本地目录下的scat.scf编译控制文件,这个文件决定了本系统中的编译地址等信息。图11其它不作修改采用默认值。5.3 新建一个工程项目1、打开CodeWarrior for ARM Developer Suite,点击“FileNew”,出现以下窗口:图12如图新建工程,需要注意的是在选择建立工程的文件夹时只需要制定到F:实验室TEST即可,ADS将自动建立工程文件夹。建立后点击“确定”,出现以下窗口:图132、将“实验说明”中提到的12个文件拷贝到这个新建的文件夹中。我们可以看到这时除了这十二个文件以外文件夹中还有一个TEST.mcp工程项目文件和一个TEST_Data文件夹,用来保存编译好的文件。再从光盘上module的工程文件夹中将reset.ini和scat两个文件拷贝到这个文件夹下,其中scat就是上面讲到的编译控制文件,reset.ini是一段初始化代码,将在“JTAG下载和调试实验”一节中讲解。在CodeWarrior for ARM Developer Suite的工程项目窗口中点击右键,选中“Add files ”图143、找到我们新建的工程文件夹,选中所有的*.C和*.S文件(*.H文件将自动链接)并打开。如下:图15这样一个工程项目就建成了。但是这个项目没有任何功能,我们要给它添加可以完成的功能。4、选择“File-New”新建一个文件HELLOWORLDE.c,并选中Add to project,如图:图16这样我们在工程项目中多出了文件。图17双击打开这个文件,可以加入自己的代码。我们做一个最简单的程序。/=/名称:HELLOWORLDE/功能:打印“HELLOWORLDE”字符串/=void HELLOWORLDE(void) Uart_Printf(HELLOWORLDE!);/在串口终端打印字符串5.4 正确连接硬件如下图连接硬件:图18其中并口线用于连接主机与仿真器,扁平电缆用于连接仿真器与实验板。实验板与仿真器使用5V,+9V直流电源,接口内正外负。连接电源,并打开仿真器和实验板的电源。注意:应该先连接硬件再接通电源。JTAG接口严禁带电热插拔!5.5 J-LINK连接连接好J-LINK与目标板,在PC端运行J-LINK GDB server,正确的显示如下图:图19可以看到目标器件的类型,ID,目标板电压等说明此时GDB server已经与目标板器件建立了联系,等待GDB从端口2331来连接。5.6 串口DNW的设置步骤一:图20步骤二:图21步骤三:图22配置完毕5.7 程序的仿真打开我们5.3中新建的工程HELLOWORLD,打开我们先前配置好的Multi-ICE,需要串口的还需打开DNW;步骤一: 图23出现下面界面:图24发现有一个错误,在第十行。进过检查发现少写了个分号,添上后重新运行,直接跳到如下界面图25步骤二:图26如上图点击OptionsCongfiger Target.出现下面对话窗:图27在弹出的对话框中调入JLinkRDI.dll文件,就可完成对目标处理器的设置。此设置只需在第一次使用时进行。第一次使用时,点击右边的Add按钮,在JLink ARM _V4081 Server的安装目录下(例如:C:Program FilesSEGGERJLink ARM _V4081)找到JLinkRDI.dll文件,并添加到Target Environments中。添加后如下图所示。图28步骤三:AXD下需要加载一个SDRAM初始化文件 启动AXD时自动初始化SDRAM:将初始化SDRAM的命令序列保存为一个name.txt文本文件(名字不取中文即可,我也没试过取中文得不得),写好后存放到Jlink-V8的安装目录JLinkARM_V408k下,文本内容如下: Setmem 0x53000000 0x00000000 32 Setmem 0x4A000008 0xFFFFFFFF 32 Setmem 0x4A00001C 0x000007FF 32 Setmem 0x53000000 0x00000000 32 Setmem 0x56000050 0x000055AA 32 Setmem 0x4C000014 0x00000007 32 Setmem 0x4C000000 0x00FFFFFF 32 Setmem 0x4C000004 0x00061012 32 Setmem 0x4C000008 0x00040042 32 Setmem 0x48000000 0x22111120 32 Setmem 0x48000004 0x00002F50 32 Setmem 0x48000008 0x00000700 32 Setmem 0x4800000C 0x00000700 32 Setmem 0x48000010 0x00000700 32 Setmem 0x48000014 0x00000700 32 Setmem 0x48000018 0x0007FFFC 32 Setmem 0x4800001C 0x00018005 32 Setmem 0x48000020 0x00018005 32 Setmem 0x48000024 0x008E0459 32 Setmem 0x48000028 0x00000032 32 Setmem 0x4800002C 0x00000030 32 Setmem 0x48000030 0x00000030 32 然后在AXD的主窗口下选择菜单OptionsConfigure Interface.,在Session File一页中选择“Run Configuration Script”,将该name.txt文本文件作为一个脚本加进来,确定。这样以后每次启动AXD时,就会自动运行该脚本来完成对SDRAM的初始化。 步骤四:图29点击Load Image后,选中我们建立的工程中的DebugRel目录中的myfirstproject.axf文件。(路径是“F:实验室TESTTEST_DataDebugRel”)并打开。出现下面的调试窗口:图30步骤五:调试我们看到上图中标号1的圆内蓝色箭头表示程序当前即将运行到的位置。在程序某一个行号前的空白除双击,就可以出现标号为2的圆内的红色圆点,这是程序运行的断点,当程序运行到这个位置时会自动停下来等待调试人员调试。再次双击这里就会取消这个断点。标号3的圆内是单步调试相关的按钮。这是运行和暂停按钮。这是STEP IN按钮,表示跳进函数,按这个按钮是真正的“单步调试”,可以一行一行代码的调试。这是STEP按钮,按这个按钮将跳过函数体内部,可以更清晰的理清程序脉络,节约调试时间。这是STEP OUT按钮,按这个按钮将跳出正在运行的程序体。当程序调试中不想继续调试当前函数时,按此按钮将跳出运行主流程中下一个语句。这是STEP URSOR按钮,把光标放到需要暂停的语句,按下这个按钮,程序就停在了这个语句。“ADS开发环境实验”和“JTAG下载和调试实验”是我们进行ADS实验的基础,请认真体会熟悉其中的内容和涉及的方法,为后续实验打下基础。本试验指导正对“DM2410+”试验系统编写,但是应用所有的嵌入式开发板开发嵌入式系统的基本过程都大同小异。学习好这两个实验为以后工作应用其它嵌入式系统开发板也有指导意义。六、参考例程/=/名称:HELLOWORLDE/功能:打印“HELLOWORLDE”字符串/=void HELLOWORLDE(void) Uart_Printf(HELLOWORLDE!);/在串口终端打印字符串七、实验结果当程序运行正常,我们在串口DNW上可以看到以下界面:图31实验二 LED跑马灯实验一、实验目的l 了解S3C2410的I/O及其相关设置;l 继续熟悉ARM开发环境。二、实验设备l 硬件:DM2410实验板;测控与显示扩展板;PC机;J-Link V8仿真器;l 软件:PC机操作系统(WINDOWS XP);ARM Developer Suite v1.2;J-link ARM V4.081;三、实验内容l 了解DM2410实验板I/O接口原理。l 利用ADS编译环境,用C语言编写跑马灯主程序。四、实验说明S3C2410有多达117位的I/O口可以提供方便的扩展。分为8组端口如下: Port A (GPA): 23-output port Port B (GPB): 11-input/output port Port C (GPC): 16-input/output port Port D (GPD): 16-input/output port Port E (GPE): 16-input/output port Port F (GPF): 8-input/output port Port G (GPG): 16-input/output port Port H (GPH): 11-input/output port所有的端口都是复用的,因为是复用的端口所以在应用I/O口之前应该对端口进行设置,使之成为需要的模式,这个模式是由八个I/O控制寄存器GPxCON设置,其中的x就是A-H。我们以本实验中用到的GPB为例,GPB的控制寄存器是GPBCON,地址是0x56000010。GPBCON Bit Description GPB10 21:20 00 = Input 10 = nXDREQ0 01 = Output 11 = reserved GPB9 19:18 00 = Input 10 = nXDACK0 01 = Output 11 = reserved GPB8 17:16 00 = Input 10 = nXDREQ1 01 = Output 11 = reserved GPB7 15:14 00 = Input 10 = nXDACK1 01 = Output 11 = reserved GPB6 13:12 00 = Input 10 = nXBREQ 01 = Output 11 = reserved GPB5 11:10 00 = Input 10 = nXBACK 01 = Output 11 = reserved GPB4 9:8 00 = Input 10 = TCLK0 01 = Output 11 = reserved GPB3 7:6 00 = Input 10 = TOUT3 01 = Output 11 = reserved GPB2 5:4 00 = Input 10 = TOUT2 01 = Output 11 = reservedGPB1 3:2 00 = Input 10 = TOUT1 01 = Output 11 = reserved GPB0 1:0 00 = Input 10 = TOUT0 01 = Output 11 = reserved 每个端口还有数据寄存器GPxDAT,和上拉寄存器GPxUP。还是以GPB为例。GPBDAT:地址为0x56000014,从低位到高位依次存储GPB0GPB10十一个端口在I/O口状态下的数据,1表示输出/输入高电平,0表示输出/输入低电平。GPBUP:地址为0x56000018,从低位到高位依次存储GPB0GPB10十一个端口在I/O口状态下CPU是否提供上拉电阻,0表示提供,1表示不提供。五、实验步骤1、仔细阅读实验说明部分,熟悉S3C2410的I/O口及其控制;2、将实验系统光盘中“实验工程ADS实验LED”目录拷贝到本地硬盘,用ADS组件中的CodeWarrior for ARM Developer Suite工具软件打开打开其中的LED.mcp工程文件。用实验一中的方法选用本机的地址中的scat.scf文件。3、在DebugRel目录下编译源文件,分析并熟悉程序。4、将PC机、仿真器和实验板连接并打开“J-Link ARM V4.081中的J-Link GDB Server”和“AXD Debugger”对CPU进行初始化,导入本地硬盘上“实验工程ADS实验LED”中“LED_DataDebugRelLED.axf”文件或光盘上的实验项目文件。5、调试运行程序观察程序运行。自行修改程序观察各变量、寄存器等的作用。6、程序运行后在扩展板上的LED灯将轮流显示(跑马等)。六、参考例程 实验中当端口输出为0时,相应的LED亮,输出1时,相应的LED灭。用到的端口为GPB7、GPB8、GPB9、GPB10。相应的程序如下:/=/名称:delay/功能:延迟指定时间/参数: x/返回值: void/=void Delay(unsigned int x) unsigned int i,j,k; for(i=0;i=x;i+) for(j=0;j0xff;j+) for(k=0;k0xff;k+);/=/名称:Led_Test/功能:LED循环显示/参数: void/返回值: void/=void Led_Test() unsigned long LED,n; /GPBCON GPB10 21:20 = 01 : Output /GPBCON GPB9 19:18 = 01 : Output /GPBCON GPB8 17:16 = 01 : Output /GPBCON GPB7 15:14 = 01 : Output rGPBCON &= (0x320); rGPBCON |= (0x120); rGPBCON &= (0x318); rGPBCON |= (0x118); rGPBCON &= (0x316); rGPBCON |= (0x116); rGPBCON &= (0x314); rGPBCON |= (0x114); /GPBDAT GPB10:0 10:0 : Output Data rGPBDAT = 0x77f; Delay(100); for( ; ; ) LED = rGPBDAT; LED = (LED1); /下一个灯亮 rGPBDAT = LED; Delay(200); if(!(rGPBDAT & 0x400)/保证第四个LED点亮后重新点亮第一个LED; rGPBDAT=0xf7f; Delay(200); 可以看到对I/O口的操作实际上只需要两个步骤:1) 控制GPxCON将I/O口设置成输入、输出模式,如果需还要设置GPxUP;2) 将相应的数据写入GPxDAT。七、实验结果当程序运行正常l 板子上可以看到:四个LED灯从上往下,不停地循环反复的来回跑,每次只亮一个灯。l 在DNW界面出现如下图:实验三 矩阵键盘驱动实验一、实验目的l 掌握嵌入式系统中断的处理流程;l 学习中断式矩阵键盘的驱动原理;l 掌握通过CPU 的I/O 扩展键盘的方法。二、实验设备l 硬件:DM2410实验板;测控与显示扩展板;PC机;J-Link V8仿真器;l 软件:PC机操作系统(WINDOWS XP);ARM Developer Suite v1.2;J-link ARM V4.081;三、实验内容l 编写中断处理程序,处理外部中断;l 通过ARM 的GPG(4、5、6、7位)和rPDATF(5、6、7、8位)扩展44 的键盘,编程实现键盘的驱动;l 通过按键可以在超级终端上显示相应的键值。四、实验说明4.1 中断的基本概念4.1.1 中断CPU在正常运行程序时,由于内部或外部事件引起CPU暂时中止执行现行程序,转去执行请求CPU为其服务的那个外设或事件的服务程序,待该服务程序执行完后又返回到被中止的程序这样一个过程。4.1.2 中断技术的优点 l 并行操作:指CPU和多个外设并行操作;分时操作:指CPU可分时执行多个用户程序和多道作业; l 实现实时处理; l 故障处理。 l 基本功能调用:在PC机中,通过软件中断可实现DOS功能调用和基本BIOS调用。 4.1.3 中断类型 1) 硬中断:也称为外部中断。它可分为两种: l 一种是由中断电路发生的中断请求信号在CPU的INTR端引起的中断。 可屏蔽中断:凡是微处理器内部能够屏蔽(IF=0)的中断。 l 另一种是CPU的NMI端引起的中断,也称不可屏蔽中断。不可屏蔽中断:凡是微处理器内部不能够屏蔽(不受IF状态影响)的中断。 2)软件中断:也称内部中断,是指程序中使用INT指令引起的中断。4.1.4 中断处理过程 大致可分为:中断请求、中断响应(关中断、保护断点、查找中断源等)、保护现场、开中断、返回五步。 1)中断请求 CPU外部必须设置一个中断请求触发器锁存中断请求信号,以便CPU在现行指令周期结束时采样,还可设置中断屏蔽触发器。2)中断响应 不可屏蔽中断申请:CPU执行完当前指令后就响应; CPU响应中断要自动完成下列几步操作: l 发中断响应信号,同时内部关中断(IF0),以禁止其它可屏蔽中断请求; l 把F以及程序断点处的CS、IP内容压栈,以便中断处理完后能正确地返回主程序; l 中断服务程序入口地址段地址CS ,偏移地址IP。 3)中断处理:程序员需在中断服务程序中,做以下事: l 保护现场; l 开中断; l 中断服务; l 恢复现场; l 返回。 4.2 S3C2410X中断控制器S3C2410的中断控制器包括5个寄存器:中断源状态寄存器、中断模式寄存器、中断屏蔽寄存器、优先级寄存器、中断状态寄存器以及中断偏移寄存器。4.2.1 中断源状态寄存器SRCPND该寄存器的32位中每一位对应一个中断源。如果响应中断源产生中断请求则其对应位置为1。该寄存器中的位将自动由中断请求置位,而不管INTMASK寄存器中的掩码位是否有效。另外,该寄存器不受中断控制器的优先级逻辑影响。在中断服务程序中,该寄存器的相应位必须进行清零处理,清零的方法是将该位写入1。中断状态寄存器4.2.2 中断模式寄存器用于设置相应中断的工作模式,是IRQ模式还是FIQ模式。 中断模式寄存器4.2.3 中断屏蔽寄存器如果中断屏蔽位为1则对应的中断会被禁止,如果中断屏蔽位为0,则对应的中断请求能正常响应。但如果全局中断屏蔽位(位21)为1,则所有的中断都会被禁止。当有中断请求产生时,对应的中断悬挂位会被置为1,在全局中断屏蔽位和对应的中断屏蔽位为0时,中断请求就会被响应。 中断屏蔽寄存器4.2.4 中断优先级寄存器4.2.5 中断状态寄存器中断状态寄存器INTPND 保持每一个中断源的中断悬挂位。该寄存器对应的中断悬挂位应在中断服务程序中首先清除,以避免由于同一个中断悬挂位导致中断服务程序的反复执行。中断状态寄存器4.2.6 中断偏移寄存器该寄存器的值表示在IRQ模式下,INTPND寄存器中哪一个中断请求产生。它将清楚SRCPND和INTPND寄存器后被自动清除。中断偏移寄存器4.3 扫描按键实现键盘有两种方案:一是采用现有的一些芯片实现键盘扫描;再就是用软件实现键盘扫描。作为一个嵌入系统设计人员,总是会关心产品成本。目前有很多芯片可以用来实现键盘扫描,但是键盘扫描的软件实现方法有助于缩减一个系统的重复开发成本,且只需要很少的CPU 开销。嵌入式控制器的功能很强,可以充分利用这一资源,这里就介绍一下软键盘的实现方案。图4-1通常在一个键盘中使用了一个瞬时接触开关,并且用如图4-1 所示的简单电路,微处理器可以容易地检测到闭合。当开关打开时,通过处理器的I/O 口的一个上拉电阻提供逻辑1;当开关闭合时,处理器的I/O 口的输入将被拉低到逻辑0。可遗憾的是,开关并不完善,因为当它们被按下或者被释放时,并不能够产生一个明确的1 或者0。尽管触点可能看起来稳定而且很快地闭合,但与微处理器快速的运行速度相比,这种动作是比较慢的。当触点闭合时,其弹起就像一个球。弹起效果将产生如图4-2 所示的好几个脉冲。弹起的持续时间通常将维持在5ms30ms 之间。如果需要多个键,则可以将每个开关连接到微处理器上它自己的输入端口。然而,当开关的数目增加时,这种方法将很快使用完所有的输入端口。下图是按键的抖动图4-2键盘上排列这些开关最有效的方法(当需要5个以上的键时)就形成了二维矩阵。当行和列的数目一样多时,也就是方型的矩阵,将产生一个最优化的布列方式(I/O端被连接的时候)。一个瞬时接触开关(按钮)放置在每一行与每一列的交叉点。矩阵所需的键的数目显然根据应用程序而不同。每一行由一个输出端口的一位驱动,而每一列由一个电阻器上拉且供给输入端口一位。键盘扫描过程就是让微处理器按有规律的时间间隔查看键盘矩阵,以确定是否有键被按下。一旦处理器判定有一个键按下,键盘扫描软件将过滤掉抖动并且判定哪个键被按下。每个键被分配一个称为扫描码的唯一标识符。应用程序利用该扫描码,根据按下的键来判定应该采取什么行动。换句话说,扫描码将告诉应用程序按下哪个键。某一时刻按下多个键(意外地或者故意地)的情况被称为转滚。能够正确识别一个新键被按下(即使n-1个键已经被按下)的任何算法被称为具有n 键转滚的能力。本章提出的矩阵键盘系统设计,在这种系统中用户输入可能发生相继按键。这些系统通常不需要具有像终端或者计算机系统上的键盘的全部特征那样的键盘。键盘扫描算法:在初始化阶段,所有的行(输出端口)被强行设置为低电平。在没有任何键按下时。所有的列(输入端口)将读到高电平。任何键的闭合将造成其中的一列变为低电平。为了查看是否有一个键已经被按下,微处理器仅仅需要查看任一列的值是否变成低电平。一旦微处理器检测到有键被按下,就需要找出是哪一个键。过程很简单,微处理器只需在其中一列上输出一个低电平。如果它在输入端口上发现一个0 值,该微处理器就知道在所选择行上产生了键的闭合。相反,如果输入端口全是高电平,则被按下的键就不在那一行,微处理器将选择下一行,并重复该过程直到它发现了该行为止。一旦该行被识别出来,则被按下键的具体的列可以通过锁定输入端口上唯一的低电位来确定。微处理器执行这些步骤所需要的时间与最小的状态闭合时间相比是非常短的,因此它假设该键在这个时间间隔中将维持按下的状态。比如:当发现某列变为低电平时,此时微处理器仅在某一行上输出低电平,再查看列的状态,如果此时在输入端口上发现了一个0,则就可以断定就是此行上的键按下了,反之,如果输入端口上全为1,则就不是这一行上按下了键。根据第一步和第二步中得到的值,便可以得到相应的扫描码。比如,第一步中行全为零时列输入B1 为零,当将输出的第二行B2 置为零时,如果此时的列输入B1 仍为零,则可得到扫描码为。为了过滤回弹的问题,微处理器以规定的时间间隔对键盘进行采样,这个间隔通常在20ms100ms 之间(被称为去除回弹周期),它主要取决于所使用开关的回弹特征。另外一个的特点就是所谓的自动重复。自动重复允许一个键的扫描码可以重复地被插入缓冲区,只要按着这个键或者直到缓冲区满为止。自动重复功能非常有用的,当你打算递增或者递减一个参数(也就是一个变量)值时,不必重复按下或者释放该键。如果该键被按住的时间超过自动重复的延迟时间,这个按键将被重复的确认按下。本实验板按键电路如下:图4-3五、实验步骤1、仔细阅读实验说明部分,熟悉扫描键盘的机制;2、将实验系统光盘中“实验工程ADS实验KEY”目录拷贝到本地硬盘,用ADS组件中的CodeWarrior for ARM Developer Suite工具软件打开打开其中的KEY.mcp工程文件。用实验一中的方法选用本机的地址中的scat.scf文件。3、在DebugRel目录下编译源文件,分析并熟悉程序。4、将PC机、仿真器和实验板连接并打开“J-Link ARM V4.081中的J-Link GDB Server”和“AXD Debugger”对CPU进行初始化,导入本地硬盘上“实验工程ADS实验KEY”中“KEY_DataDebugRelkey.axf”文件或光盘上的实验项目文件。5、 调试运行程序观察程序运行。自行修

温馨提示

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

评论

0/150

提交评论