1、嵌入式系统原理与接口技术实验指导书嵌入式系统原理与接口技术实验指导书曲 强 编辽宁科技大学电信学院ASKDQQ目 录实验一 利用跳转表实现程序分支 1实验二 块数据传输程序设计 6实验三 C语言优化实验 8实验四 按键与LED显示原理 11实验五 LCD显示实验 19附录一 ADS开发环境设置过程 33实验一 利用跳转表实现程序分支一、实验目的:1、 熟悉ADS1.2开发环境,掌握基本的调试方法;2、 熟悉ARM9汇编语言的程序设计方法;3、 熟悉ARM9的基本语法。二、实验内容利用跳转表实现具有下述功能的汇编程序:(1)当r0为1时,调用子程序CASE1,完成r1加r2把结果放入r3的计算;
2、(2)当r0为2时,调用子程序CASE2,完成r1减r2把结果放入r3的计算;(3)当r0为3时,调用子程序CASE3,完成r1与r2把结果放入r3的计算;(4)否则,完成r1或r2把结果放入r3的计算。 三、实验步骤:安装完ADS1.2后在其安装目录下存在如下两个文件,即 Codewarrior for ARM Developer Suit 和AXD Debugger,这两个文件分别是代码编辑文件和调试文件,在实验中我们主要使用这两个文件。1、运行ARM Developer Suite v1.2中的Codewarrior for ARM Developer Suit文件,如图1所示。图1 C
3、odewarrior界面2、选择File-New将打开新建文件窗口,如图2所示。选择Project标签新建一个ARM可执行的映像文件(ARM Executable Image),并填入适当的项目名(Project name)及选择合适的存放项目的目录(Location),最后点击确定。也可以通过工具栏中的 按钮实现上述功能。此时,将打开项目管理窗口如图3所示。图2 New窗口 3、新建一个*.s文件用于存放我们的实验程序,其建立步骤如下。点File-New将打开新建文件窗口,在新打开的窗口中选择Flie标签,输入文件名。也可以通过工具栏中的 按钮实现上述功能。值得注意的是由于在这里我们使用汇编
4、语言编制程序因此文件扩展名一定要存为*.s。4、输入所设的汇编语言并保存,注意扩展名必须为*.s。在输入设计文件时需要注意以下几点:(1)标号必须顶格书写,而指令、伪指令和指示符前必须至少空一格空格,为了使程序格式清晰,通常使用Tab键;(2)指令、伪指令和指示符大小写均可;(3)注释为英文状态下的“;”。图3 调试窗口5、接下来开始调试所设计的文件,调试文件主要在项目窗口中进行,项目窗口如图3所示。 (1)添加文件到项目。将鼠标指在项目窗口的空白处,点击右键,选择Add Flie将设计文件添加到项目中。(2)指定调试环境。选择DebugRel Settings 打开调试环境设置窗口,在这里可
5、以进行相应的设置,我们只需将Language Settings中的ARM Assembler 中的Target选为ARM920T即可(系统默认为ARM7TDMI,若只为了实现软件仿真,也可以不改变微处理器,因为ARM920T与ARM7TDMI均使用同一套ARM指令集)。(3)汇编文件。点击Make按钮(参见图3)汇编我们设计的文件,并修正错误。当没有错误时就可以进行调试了。 (4)调试文件。在这里我们使用ADS1.2中的AXD Debugger进行程序调试,可以通过选择Debug按钮(参见图3)调用AXD Debugger,其界面如图4所示(若AXD未能打开所调试的程序,可以选择AXD Deb
6、ugger中的Options|Target配置处理器)。图4 AXD Debugger窗口6、用户可以在AXD Debugger中调试你的程序,其主要菜单的含义如下:(1)用户可以通过Processor Views 和 System Views打开各种观察窗口,具体含义如表1所示。表1 视图菜单含义名称含义Registers观察ARM中的寄存器Watch观察一个表达式的值Variables观察变量值Backtrace观察函数调用情况Memory观察存储器的使用情况Low Level Symbols观察标号的地址Comms Channel打开通信通路Console打开控制台Disassembly
7、反汇编Source查看源文件(2)用户可以通过Execute打开各种调试工具,调试工具的具体含义如表2所示。表2 执行菜单含义名称含义Go连续运行Step In单步运行(跟踪进入函数)Step单步运行(不跟踪进入函数)Step Out单步运行(从函数中返回)Run To Cursor运行到光标Show Execution Context显示可执行的程序Toggle Breakpoint触发断点Delete All Breakpoints删除断点7、打开观察寄存器窗口,并用单步运行方式观察程序的运行状况。若想重新装入该程序,可以选择File中的Reload Current Image重新装载。8
8、、熟悉其它调试功能。四、报告要求 在实验报告中要求包括实验目的、调试步骤、实验的源程序并加注释,以及实验中遇到的问题和解决情况。五、参考程序清单;利用跳转表实现具有下述功能的程序 ;if r0=1 then CALL CASE1 (r3=r1+r2) ;else if r0=2 then CALL CASE2 (r3=r1-r2) ;else if r0=3 then CALL CASE3 (r3=r1&r2) ;else DEFAULT (r3=r1|r2) ; AREA JumpTest,CODE,READONLY ; 定义代码段 CODE32 ; 设置为arm指令集 ENTRY ; 程序
9、入口 start MOV r0, #1 ; 初始化程序中使用的寄存器 MOV r1, #3 MOV r2, #2 ADR r4, JumpTable ; 将跳转表地址送给r4 CMP r0, #1 ; if r0=1 then CALL CASE1 MOVEQ r3, #0 LDREQ pc, r4,r3,LSL #2 CMP r0, #2 ; if r0=2 then CALL CASE2 MOVEQ r3, #1 LDREQ pc, r4,r3,LSL #2 CMP r0, #3 ; if r0=3 then CALL CASE3 MOVEQ r3, #2 LDREQ pc, r4,r3,
10、LSL #2 DEFAULT ; otherwise CALL DEFSULT ORR r0, r1, r2SWITCHEND MOV r0, #0x18 ; 调用软中断 返回操作系统 LDR r1, =0x20026 SWI 0x123456 JumpTable ; 定义跳转表 DCD CASE1 DCD CASE2 DCD CASE3 CASE1 ; 子程序1 ADD r3, r1, r2 B SWITCHEND CASE2 ; 子程序2 SUB r3, r1, r2 B SWITCHEND CASE3 ; 子程序3 AND r3, r1, r2 B SWITCHEND END实验二 块数
11、据传输程序设计一、 实验目的1、 熟悉ADS1.2的操作环境;2、 熟悉汇编语言的编程与调试;3、 熟悉多数据传输指令和单数据传输指令。二、实验内容:利用汇编语言编程实现具有如下功能的程序:将由src单元开始的20个字,转存到由dst开始的单元中。要求:当传输的数据大于8时,采用多数据传输指令一次传递8个数据;对于不足8个单元的数据数据采用单字节传送指令进行传输。 三、实验步骤1、编制实现上述功能的汇编语言程序;2、运行ADS1.2完成调试工作。注意在调试过程中可能用到如下的功能:利用AXD Debugger调试软件的Processor Views菜单中的Low Level Symbols可以
12、查看所有标号的地址;Registers项可以查看ARM内部寄存器的内容;Memory项可以查看存储器中的数据;使用F10可以单步运行程序。四、实验报告要求在实验报告中要求包括实验目的、调试步骤、实验的源程序并加中文注释,以及实验中遇到的问题和解决情况,回答思考题。五、思考题1、你是如何利用汇编语言求取一个数被8整除后的商和余数的?2、指令中的软中断的作用是什么?3、每个数据在存储器中占用几个字节,低位在前还是高位在前。4、你是如何获得源数据和目标数据地址的?六、附加题思考如何改动上面的程序实现将数据按反序存储,即如果源数据为1、2、3、4、20将其存为20、19、18、1。七、参考程序清单:
13、AREA Block, CODE, READONLY ; name this block of codenum EQU 20 ; Set number of words to be copied ENTRY ; mark the first instruction to callstart LDR r0, =src ; r0 = pointer to source block LDR r1, =dst ; r1 = pointer to destination block MOV r2, #num ; r2 = number of words to copy MOV sp, #0x400 ;
14、set up stack pointer (r13)blockcopy MOVS r3,r2, LSR #3 ; number of eight word multiples BEQ copywords ; less than eight words to move ? STMFD sp!, r4-r11 ; save some working registersoctcopy LDMIA r0!, r4-r11 ; load 8 words from the source STMIA r1!, r4-r11 ; and put them at the destination SUBS r3,
15、 r3, #1 ; decrement the counter BNE octcopy ; . copy more LDMFD sp!, r4-r11 ; dont need these now - restore originalscopywords ANDS r2, r2, #7 ; number of odd words to copy BEQ stop ; No words left to copy ?wordcopy LDR r3, r0, #4 ; a word from the source STR r3, r1, #4 ; store a word to the destina
16、tion SUBS r2, r2, #1 ; decrement the counter BNE wordcopy ; . copy morestop MOV r0, #0x18 ; angel_SWIreason_ReportException LDR r1, =0x20026 ; ADP_Stopped_ApplicationExit SWI 0x123456 ; ARM semihosting SWI AREA BlockData, DATA, READWRITEsrc DCD 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20dst D
17、CD 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 END实验三 C语言优化实验一、 实验目的1、 熟悉ADS1.2的调试环境;2、 熟悉C语言的编程、调试方法;3、 熟悉ADS1.2编译C语言的特点,了解一定的C优化编程的知识。二、实验内容与步骤(一)了解ADS1.2是如何处理C语言中char类型Char表示无符号8位整型数据,ADS的C编译器是如何保证汇编后的寄存器具有该特性呢?现在通过下面的实验来研究该问题。 1、运行ADS1.2并输入以下的C程序,注意保存文件的扩展名必须为*.c。int main(void) char i; int sum=0; in
18、t data4; data0=1; data1=2; data2=3; data3=4; for(i=0;i4 goto 80f0 000080dc 0xe79d2101 ldr r2,r13,r1,lsl #2: r2=datai000080e0 0xe0820000 add r0,r2,r0; sum=sum+datai000080e4 0xe2811001 add r1,r1,#1; i+000080e8 0xe20110ff and r1,r1,#0xff; 将i转化为char类型000080ec 0xeafffff8 b 0x80d4 ; (main + 0x2c)000080f0
19、0xe28dd010 add r13,r13,#0x10000080f4 0xe49df004 ldr pc,r13,#4; return(二)熟悉ADS1.2处理short数据类型的方法1、运行ADS1.2并输入如下的C程序,注意扩展名一定为*.c。short checksum_v2(short *data) unsigned int i; short sum=0; for(i=0;i64;i+) sum=(short)(sum+datai); return sum;2、汇编上述源程序,修正错误。在项目窗口中选中所设计的C程序,然后选择Project菜单下的Desassemble查看该程序的
20、汇编代码,阅读程序并回答如下问题。(1)请为获得的反汇编语言加上注释。(2)在ADS中如何实现短整型数据类型的?(3)在ADS中是如何读取短整型数据的?(4)在ADS中LDRH不支持位移地址偏移,那它是如何实现地址指针移动的?(5)若子程序中的中间变量无特殊要求,是选择为短整型还是选择为整型好,为什么?3、参考反汇编程序0x00000000 MOV r2,r0 ; r2=data0x00000004 MOV r0,#0 ; sum=0(短整型16bit)0x00000008 MOV r1,#0 ; i=00x0000000c ADD r3,r2,r1,LSL #1; r3=&0x0000001
21、0 LDRH r3,r3,#0 ; r3=datai0x00000014 ADD r0,r3,r0 ; sum=sum+datai0x00000018 MOV r0,r0,LSL #16 ; 转换r0为短整型0x0000001c MOV r0,r0,ASR #160x00000020 ADD r1,r1,#1 ; i+0x00000024 CMP r1,#0x40 ; compare i, 640x00000028 BCC 0xc ; if (i64) goto 0xc0x0000002c. MOV pc,r14 ; return sum三、实验报告要求在实验报告中要求包括实验目的、调试步骤、
22、实验的源程序并加中文注释,以及实验中遇到的问题和解决情况,回答思考题。四、思考题如何修改第二个实验程序使其效率更高些?五、参考修改short checksum_v2(short *data) unsigned int i; int sum=0; for(i=0;i64;i+) sum=sum+*(data+); return (short) sum;实验四 按键与LED显示原理一、实验目的1、 掌握S3C2440 通用I/O端口寄存器的配置。2、 熟悉S3C2440程序下载及NAND FLASH启动过程。3、 熟悉2440初始化过程。二、实验设备TQ2440开发板、PC 机、USB下载线。三、
23、实验内容1、编程实现对按键的扫描和LED灯的控制。要求当有键按下时读取该键值,并点亮相应的LED灯(两课时)。2、阅读S3C2440初始化2440init.s程序,了解嵌入式系统的初始化过程,明白ARM启动的初始化过程(两课时)。四、实验原理图1 按键及显示电路原理实验中所使用的电路如图1所示。共有四个按键分别与CPU I/O口的GPBF0、GPBF1、 GPBF2 、GPBF4相连。在GPFCON 寄存器中设置相应管脚为输入,管脚经上拉电阻接3.3V电源,当没有键按下时,通过GPFDAT读入的数据为高电平。当按键按下时,按键对应的管脚被拉低,GPFDAT相应位被置0。检测GPFDAT即可知道
24、哪个按键被按下。四个发光二极管LED1、LED2 、LED3、LED4经限流电阻R01、R02、R03、R04与CPU I/O口的GPB5、GPB6、GPB7、GPB8相连。当GPB口输出低电平时,相应的发光二极管就会发光。当GPB口输出高电平时,相应的发光二极管就会熄灭,通过设置高低电平则可以让LED发光二极管亮灭。实验中使用到的相应寄存器如表1-表4所示。表1 端口B 各寄存器(GPBCON, GPBDAT和GPBUP)地址及功能寄存器地 址属性描 述复位时的值GPBCON0x56000010R/WConfigure the pins of port B0x0GPBDAT0x5600001
25、4R/WThe data register for port BUndefinedGPBUP0x56000018R/WPull-up disable register for port B0x0Reserved0x5600001CReservedUndefined表2 端口B控制寄存器各位含义GPBCON 位描 述GPB10 21:2000 = Input 10 = nXDREQ0 01 = Output 11 = reserved GPB9 19:18 00 = Input 10 = nXDACK0 01 = Output 11 = reserved GPB8 17:16 00 = Inpu
26、t 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 1
27、0 = TOUT3 01 = Output 11 = reserved GPB2 5:4 00 = Input 10 = TOUT2 01 = Output 11 = reserved GPB1 3:2 00 = Input 10 = TOUT1 01 = Output 11 = reserved GPB0 1:0 00 = Input 10 = TOUT0 01 = Output 11 = reserved 表3 端口F各寄存器(GPFCON, GPFDAT和GPFUP)地址及功能寄存器地 址属性描 述复位时的值GPFCON 0x56000050 R/W Configure the pins of port F 0
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1