嵌入式实验报告_第1页
嵌入式实验报告_第2页
嵌入式实验报告_第3页
嵌入式实验报告_第4页
嵌入式实验报告_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

南京邮电大学通达学院实验报告实验名称:实验一基于ADS开发环境的程序设计实验二开发板的认知和GPIO实验实验三串行口实验实验四Linux交叉开发环境的建立—实验五Makefile编程实验课程名称 嵌入式系统A班级学号 12000401 姓名 王婷婷 开课时间 20142015学年第2学期实验一基于ADS开发环境的程序设计一、实验目的1、 学习ADS开发环境的使用;2、 学习和掌握ADS环境下的汇编语言及C语言程序设计;3、 学习和掌握汇编语言及C语言的混合编程方法。二、 实验内容1、 编写和调试汇编语言程序;2、 编写和调试C语言程序;3、 编写和调试汇编语言及C语言的混合程序;4、 编写程序测试多寄存器传送指令的用法。三、 实验原理汇编语言的基础知识、C语言编程的基础知识四、 实验过程与关键代码分析例3-5在汇编中使用C定义的全局变量实验程序:C程序:E3cJinc1udestdio.h>intpubvar=5;externas?idat*(void);int )printt("oldglueofpubvsrisfpubvar);print(("newumluu口fpubv*r45:,狗i".叫成瑁r);return0:Asm程序:上■口■M.■旧-rf1■F”lh:C济心仲FiL3削而知戒IAREAgaoyan,CODE,READONLYEXPORTasnd^taIMPORTpubvadasmdataidx=pubvarIdr±1.[rljnulr3Pi-lrr2str¥,,[rO]novpc.irE11D实验结果:

五、实验小结通过本次试验,我基本了解了ADS开发环境的使用方法,掌握了如何在ADS开发环境下建立工程、添加C源程序到工程、编译链接和调试C程序,对之前学过的C语言有了更进一步的理解。实验二 开发板的认知和GPIO实验LED跑马灯一、 实验目的1、 熟悉ADS开发环境。2、 掌握S3C2440A内部相关寄存器的操作方法,最终实现对外部设备的控制。3、 熟悉在ARM裸机环境下的C语言编程。二、 实验设备FL2440开发板、PC机、JTAG调试板。三、 实验内容1、 建立ADS开发环境。2、 编程实现对开发板上发光二极管LED的跑马灯控制。四、 实验原理从电路图上我们可以看到,发光二极管LED的一端连接到了ARM的GPIO,另一端经过一个限流电阻接电源VCC。当GPIO口为低电平时,LED两端产生电压降,这时LED有电流通过并发光。反之当GPIO为高电平时,LED将熄灭。注意亮灭之间要有一定的延时,以便人眼能够区分出来。五、 实验过程实验步骤:准备好实验环境,将JTAG调试板的一端与PC的并口相连,另一端连接到开发板的JTAG接口(在串口0附近)。将串口线的一端插在PC的串口上,另一端插在开发板的‘COM0’上。打开DNW.EXE软件,给开发板上电,使Bootloader停在菜单处(在系统引导时按空格键)。打开软件‘ADSCodeWarrior’,新建工程‘led.mcp’,并添加两个程序文件‘led.c’和‘init.S’(汇编文件)。对工程文件进行相应设置(参考《开发板准备实验》1.7节)编译该工程,成功后将生成映像文件‘led.axf’。打开AXD,装载映像文件‘led.axf’。运行程序,观察结果。实验电路:如上图所示,通过控制4个GPIO口GPB5、GPB6、GPB8来实现对四个发光二极管如上图所示,通过控制4个GPIO口GPB5、GPB6、GPB8来实现对四个发光二极管LED0、LED1、LED2、LED3亮灭的控制。、GPB10,实验程序:/*本实验接口说明GPB5GPB6GPB8GPB10*/LED0LED1LED2LED3/*地址声明*/#defineGPBCON(*(volatileunsigned*)0x56000010)#defineGPBDAT(^(volatileunsigned*)0x56000014)#defineGPBUP(*(volatileunsigned*)0x56000018)#defineucharunsignedchar#defineuintunsignedintTOC\o"1-5"\h\z/* 定义全局变量 *//* 函数声明 */voidDelay(intx);/* /函数名称:Delay功能描述:延时函数传参:intx返回值:无 */voidDelay(intx)(intk,j;while(x)(for(k=0;k<=0xff;k++)for(j=0;j<=0xff;j++);x--;}}/* 函数名称:ledMain功能描述:入口程序初始化后,进入跑马灯死循环传参:无返回值:int0 */intledMain(void)(GPBCON=0x1dd7fc;//GPB5,GPB6,GPB8,GPB10设置为输出GPBDAT=((1<<5)|(1<<6)|(1<<8)|(1<<10));//使LED全灭GPBDAT&=0xffe; 〃关闭蜂鸣器GPBUP=0x00;while(1)while(1)//死循环GPBDAT=~(1<<5);//LED0亮Delay(500);GPBDAT=~(1<<6);//LED1亮Delay(500);GPBDAT=~(1<<8);//LED2亮Delay(500);GPBDAT=~(1<<10);//LED3亮Delay(500);}return0;}AREA|DATA|,CODE,READONLYENTRYldrr13,=0x1000IMPORTledMainbledMainEND实验结果:四个发光二极管LED轮流闪烁,最终实现流水灯效果。修改程序中Delay函数调用的值将改变它们显示的速度,值越大,显示越慢。六、实验小结本次实验是第一次做有关开发板的实验,我对实验器材和实验步骤都不太了解,在实验的过程中遇到很多问题。后来,在老师和同学的帮助下,我连接好开发板,运行程序,观察到实验板上的四个发光二极管轮流闪烁。除此之外,我还掌握了S3C2440A内部相关寄存器的操作方法,实现了对外部设备的控制。实验三串行口实验一、 实验目的1、 掌握ARM处理器的串行通信原理2、 通过编程,实现开发板与PC机之间的串行收发数据二、 实验设备FL2440开发板、ADS1.2开发环境、JTAG调试板、串口连接线。三、 实验内容编写串口程序,使开发板收到数据后再把数据发回。四、 实验原理开始前,线路处于空闲状态,送出连续“1”。传送开始时首先发一个“0”作为起始位,然后出现在通信线桑的时字符的二进制编码数据。每个字符的数据位长可以约定为:5位、6位、7位或8位,一般采用ASCII编码,后面时奇偶校验位,根据约定,用奇偶校验位将所传的字符中为“1”的位数凑成奇数个或偶数个。也可以约定不要奇偶校验,这样就取消奇偶校验位。最后时表示停止位的“1”信号,这个停止位可以约定连续1位、1.5位或2位的时间宽度。至此一个字符传送完毕,线路又进入空闲,持续为“1”。经过一段随机的时间后,下一个字符开始传送。传输速率:每一个数据位的宽度定于发送波特率的倒数。微机异步串行通信中,常用的波特率为110、150、300、600、1200、2400、4800、9600、57600、115200等。波特率发生器每个UART的波特率发生器为传输提供了串行移位时钟。波特率产生器的时钟源可以从S3C2440A的内部系统时钟或UEXTCLK中来选择。波特率由时钟源(PCLK、FCLK或UEXTCLK)16分频和UART波特率除数寄存器(UBRDIVn)指定的16位除数决定。UBRDIVn的置可以按照下式确定:UBRDIVn=(int)(UARTclock/(bps*16))—1(UARTclock:PCLK、FCLK或UEXTCLK)除数的范围为1到(216—1)。例如,如果波特率为115200bps,UART为40MHz,则UBRDIVn为:UBRDIVn=(int)(40000000/(115200X16))—1=(int)(21.7)—1=22—1=21五、 实验过程实验电路:

实验步骤:准备实验环境,将JTAG调试板的25针端与PC的并口相连,另一端(WIGGLER口)通过20P排线与开发板的JTAG接口(在串口0附近)相连。将串口线的一端插在PC的串口上,另一端插在开发板的COM0上。打开DNW.EXE软件,进行相应设置。给开发板上电并在Bootloader启动时停在菜单处。打开‘ADSCodeWarrior’,在ADSCodeWarrior中打开实验工程serial.mcp.对工程文件进行相应设置(参考《开发板准备实验》1.7节),并对工程进行编译。打开ARM的开发环境AXDDebugger,在AXDDebugger中加载可执行映象文件‘serial.Axf’。6.执行映象文件,观察实验结果。实验程序:#defineULCON0(^(volatileunsigned*)0X50000000) //UART线控制寄存器#defineUCON0(^(volatileunsigned*)0X50000004) //UART控制寄存器#defineUFCON0(*(volatileunsigned*)0X50000008) //FIFO控制寄存器#defineUTRSTAT0(*(volatileunsigned*)0X50000010) //UART状态寄存器#defineUBRDIV0(*(volatileunsigned*)0X50000028)//波特率#defineUTXH0(*(volatileunsigned*)0X50000020)#defineURXH0(*(volatileunsigned*)0X50000024)#defineGPBDAT(*(volatileunsigned*)0X58000054)

intTSmain()(charbuf;ULCON0&=0XFFFFFF00;ULCON0|=0X03;UCON0=0X0805;UBRDIV0=0X1A;while(1)(if(UTRSTAT0&0X01)(//1位起始位,8位数据位//串口时钟PCLK,查询方式//波特率115200//接收是否完毕=1结束〃读取数据buf=URXH0;〃读取数据while(!(UTRSTAT0&0X04));//是否允许发送=1允许UTXH0=buf;return}return}0;AREA|DATA|,CODE,READONLYENTRYldrr13,=0x1000IMPORTTSmainbTSmainEND实验结果:六、实验小结通过本次试验,我了解了ARM处理器的串行通信的原理、传输格式和电气特性,掌握了相关寄存器的配置方法。此外,我还通过编写串口程序,实现了开发板接收数据后又发回数据。这为我以后的实验奠定了基础。实验四Linux交叉开发环境的建立一、 实验目的1、 了解什么是交叉编译。2、 了解交叉编译工具。3、 学会安装及使用交叉编译器。二、 实验设备PC机三、 实验内容1、 安装交叉编译器。2、 使用交叉编译器编译程序。四、实验原理什么是交叉编译在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码,我们就称这种编译器支持交叉编译。这个编译过程就叫交叉编译。简单地说,就是在一个平台上生成另一个平台上的可执行代码。如keil软件,在keil上编译,但在单片机上运行,典型的交叉编译。我们在开发板上运行的程序,是在PC机上编译的,所以是交叉编译。安装交叉编译器安装交叉编译器,只需将该编译器的解压缩文件放在指定的目录下边。指定目录为:/usr/local/arm/若local下没有arm文件夹,则需要自己建一个。在使用的时候有两种方式:(以编译hello.c程序为例,生成可执行文件hello)#/usr/local/arm/3.4.1/bin/arm-linux-gcchello.c-ohello编辑/etc/bashrc文件,在最后增加路径:exportPATH=/usr/local/arm/3.4.1/bin:$PATH,这样就把/usr/local/arm/3.4.1/bin添加到命令的默认路径,在编译的时候则可直接用如下的命令#arm-linux-gcchello.c-ohello五、Hello实验程序:五、Hello实验程序:实验过程、World:ttcdmeUERSION-7.2expbusybox-1.00-pre1Ogdbdemosguidocimgkernel-2410srootshtestl实验结果:

ttcdmeUERSION-7.2expbusybox-1.00-pre1Ogdbdemosguidocimgkernel-2410srootshtestl实验结果:Home淳RedHatEnterpriseLinux4X•应用程序动作。漆SC月1511.星期Home淳RedHatEnterpriseLinux4X•应用程序动作。漆SC月1511.星期[root®oca]ho£t]Jrbash:pwdEcominnd[root®]ocaIhuwl/root[root®]oca]hos1annconda-ks.ca.oul[root®ocaIhosi挂载:SDNWvU.^UA UUbps][USB:xJSerialPortUSEPortConfigurationHelpdzpokqtembedded-0qtopia-0 xFjttcdokttIs#cd..ttIsdzpokqtembedded-0qtopia-0 xFjttmkdirmettIsdzpokqtopia-Omeqtembedded-0奸jttpud/tmpttmount-tnFs-onolock192.168.0.23O:/arm2410s/tmp/memount:192.168.0.230:/arm241BsFailed,reasongiuenbyseruer:Permissiondenieditttmount-tnFs-onolock192.168.8.23B:/arm241Bs/tmpmettmount-tnfs-onolock192.168.0.230:/arm2410s/tmp/me

,■root'rgt&loca]ho^i、]#Isanaconda-ka.cf^rI>akiopheIIo.c insm]I.Iog.sy"Dg3.ont he]]c insiall.logminicom.I'root®!oca]haai、]*servicenfare^iari关闭bFSnunntd-关闭bFS守护进程:关I'UbFSquota史关闭WS服务:启动bFS服务:关掉bFS配额:启动bFS守护进程:I」劫bFSnuuntd:'root®!ocalhasi、]*servicenfssi日ri启动bFS服务:关掉bFS配额:启动bFS守护进程:l|!2^JjbFSnunntd:'root®!oca]haai、]*servicenfasiop关闭bFSnunntd-关闭bFS守护进程:关I'UbFSquota史关闭bFS服务:、'root®!oca]haai、]*定定定定定定定定定定定定定定定定确确确确确确确确确确确确确确确确六、实验小结定定定定定定定定定定定定定定定定确确确确确确确确确确确确确确确确通过这次实验,我对Linux系统有了一个初步的了解,对于课堂学习的知识也有了一定的应用,因此,我实现了理论与实践相结合。通过实验操作,我了解了嵌入式基本设置及其读写程序,我对硬件设备的设计也有了一定的了解。在刚开始学习建立Linux交叉开发环境时,我遇到了不少的问题,对于较为复杂的编程以及Linux环境下的很多技巧都知道得很少,花费了很多时间。我深知,这一块儿知识正是我所欠缺的,在以后的学习中要加强。实验五Makefile编程实验一、 实验目的1、 了解make命令。2、 了解Makefile。3、 熟悉Makefile编程。二、 实验设备PC机三、 实验内容使用Makefile编译程序。四、 实验原理Makefile文件包含了五部分内容:显示规则、隐式规则、变量定义、文件指示和注释。Makefile里的变量就像一个环境变量。事实上,环境变量在make中也被解释成make的变量。这些变量对大小写敏感,一般使用大写宇母。几乎可以从任何地方引用定义的变量。Makefile中的变量是用一个文本串在Makefile中定义的,这个文本串就是变量的值。只要在一行的开始写下这个变量的名字,后面跟一个“=”号,以及要设定这个变量的值即可定义变量,下面是定义变量的语法:VARNAME二stringMake工作时的执行步骤:读入所有的makefile文件读入被include包括的其他的makefile文件初始化文件中的变量推到隐式规则,并分析所有规则为所有的目标文件创建依赖关键链根据依赖关系,决定哪些目标要重新生成执行生成命令第(1)~(5)步为第一个阶段,第(6)~(7)步为第二个阶段。第一个阶段中,如果定义的变量被使用了,make会在它使用的位置把它展开。但make并不会马上完全展开,make使用的是拖延战术。如果变量出现在依赖关系的规则中,进当这条依赖关系决定要使用时,变量才会在其内部展开。五、 实验过程实验步骤:在某一目录下编辑上述l六个文件test.c、prog.c、code.c、prog.h、code.h、Makefile运行命令#make,生成可执行文件test运行程序./test实验程序:#include<stdio.h>externarea(float);externcircle(float);main()(printf(〃dgjdkfhgkjfdg\n〃);area(2.5);circle(2.5);return0;}/*******************prog.c****************************************/#include"prog.h”#include"code.h"#include<stdio.h>area(floatr)(printf("r=%f\n",r);printf(format_area,PI*r*r);printf(〃gfhfghfh\n〃);}/*************************code.c**********************************/#include"code.h"#include<stdio.h>voidcircle(floatr)(printf(format_circle,2*PI*r);}/************************code.h**

温馨提示

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

最新文档

评论

0/150

提交评论