计算机和信息学院《嵌入式系统》实验报告学生姓名:学号:专业班级:2014年6月20日实验一(1):熟悉Linux开发环境一、实验目的熟悉Linux开发环境,学会基于Mini6410的Linux开发环境的配置和使用。使用Linux的arm-linux-gcc编译,minicom串口方式下载调试二、实验内容本次实验使用Fedora9.0操作系统环境,安装ARM-Linux的开发库及编译器。创建一个新目录,并在其中编写hello.c和Makefile文件。学习在Linux下的编程和编译过程,以及ARM开发板的使用和开发环境的设置。下载已经编译好的文件到目标开发板上运行。三、实验设备及工具(包括软件调试工具)硬件:Mini6410嵌入式实验平台、PC机Pentium500以上,硬盘10G以上。软件:PC机操作系统Fedora9+MINICOM+ARM-LINUX开发环境四、实验步骤1、建立工作目录[root@zxtsmile]#mkdirhello[root@zxtsmile]#cdhello2、编写程序源代码在Linux下的文本编辑器有许多,常用的是vi和Xwindow界面下的gedit等,开发过程中推荐使用vi。Kdevelope、anjuta软件的界面和vc6.0类似,使用它们对于熟悉windows环境下开发的用户更容易上手。实际的hello.c源代码较简单,如下:#includestdio.hmain(){printf(“helloworld\n”);}我们可以是用下面的命令来编写hello.c的源代码,进入hello目录使用vi命令来编辑代码:[root@zxthello]#vihello.c按“i”或者“a”进入编辑模式,将上面的代码录入进去,完成后按Esc键进入命令状态,再用命令“:wq”保存并退出。这样我们便在当前目录下建立了一个名为hello.c的文件。3、编写Makefile要使上面的hello.c程序能够运行,我们必须要编写一个Makefile文件,Makefile文件定义了一系列的规则,它指明了哪些文件需要编译,哪些文件需要先编译,哪些文件需要重新编译等等更为复杂的命令。使用它带来的好处就是自动编译,只需要敲一个“make”命令整个工程就可以实现自动编译,本次实验只有一个文件,它还不能体现出使用Makefile的优越性,但当工程比较大文件比较多时,不使用Makefile几乎是不可能的。本次实验用到的Makefile文件如下:CC=armv4l-unknown-linux-gccEXEC=helloOBJS=hello.oCFLAGS+=LDFLAGS+=–staticall:$(EXEC)$(EXEC):$(OBJS)$(CC)$(LDFLAGS)–o$@$(OBJS)clean:-rm-f$(EXEC)*.elf*.gdb*.o4、编译使用程序在上面的步骤完成后,我们就可以在hello目录下运行“make”来编译我们的程序了。如果进行了修改,重新编译则运行:5、下载调试1、进入root终端输入suroot,再输入密码即可。2、终端输入minicom出现上面的界面,点击回车,出现下图此时才能进行正常的下载。3、ctrl+a,再点击s,出现下图选择第一个zmodem,回车。出现下图回车,出现下图输入绝对路径,出现下图回车,出现下图从上图可以看出,文件未被下载,原因是mini6410板子已经有了hello可执行文件(之前下载的),若需要下载,则需要删除之前的hello文件,rmhello即可。删除之后,继续下载,出现下图下载成功。4、运行程序在电脑终端输入./hello,或者在mini6410终端输入hello都可。五、思考题1.Makefile是如何工作的?其中的宏定义分别是什么意思?Makefile定义了一系列规则,指明了哪些文件需要编译,哪些文件需要先编译等复杂命令。终端中只要在工作目录下输入make即可编译,输入makeclean则清除编译。makefile是一个文本文件,用于描述程序源代码之间以及程序可执行代码和源代码之间的依赖关系。关于宏定义,简单点说就是文本替换。为了方便使用不同的编译器或者编译环境以及硬件环境,一些复杂的软件使用了大量的宏定义来代替诸如“gcc”这样的最基本的东西。CC:指明编译器;EXEC:指明编译后生成的可执行文件名称;OBJS:目标文件列表;CFLAGES:编译参数;LDFLAGES:链接参数;All:编译主入口;clean:清除编译。实验一(2):多线程使用程序设计一、实验目的1.了解多线程程序设计的基本原理2.学习pthread库函数的使用。二、实验内容1、读懂pthread.c的源代码,熟悉几个重要的pthread库函数的使用。掌握共享锁和信号量的使用方法。2、运行make产生pthread程序,使用minicom串口方式连接开发主机进行运行实验。三、实验设备及工具硬件:Mini6410嵌入式实验平台、PC机Pentium500以上,硬盘10G以上。软件:PC机操作系统Fedora9+MINICOM+ARM-LINUX开发环境四、实验步骤1.使用vi编辑器或其他编辑器阅读理解源代码。2.运行make产生pthread可执行文件3.切换到minicom终端窗口。可能出现拔插USB数次。4.运行pthread,观察运行结果的正确性。5.修改一些参数,再次运行调试,加深对多线程的理解。实验二(1):A/D接口实验一、实验目的了解在linux环境下对S3C6410芯片的8通道10位A/D的操作和控制。二、实验内容学习A/D接口原理,了解实现A/D系统对于系统的软件和硬件要求。阅读ARM芯片文档,掌握ARM的A/D相关寄存器的功能,熟悉ARM系统硬件的A/D相关接口。利用外部模拟信号编程实现ARM循环采集AIN0通道,并且在超级终端上显示。三、实验步骤1、阅读理解源码使用vi编辑器或其他编辑器阅读理解源代码。2、编译使用程序运行makeclean和make产生ad可执行文件3、下载调试换到minicom终端窗口。我们可以通过调节开发板上的W1可调电阻,可以看到不断变化的转换结果。四、思考题1.逐次逼近型的A/D转换器原理是什么?答:逐次逼近型的A/D转换器逐次逼近型(也称逐位比较式)的A/D转换器,使用比积分型更为广泛,其原理框图如图2.3.1所示,主要由逐次逼近寄存器SAR、D/A转换器、比较器以及时序和控制逻辑等部分组成。它的实质是逐次把设定的SAR寄存器中的数字量经D/A转换后得到电压Vc和待转换模拟电压V。进行比较。2.A/D转换的重要指标包括哪些?答:分辨率、精度(绝对误差,相对误差,转换时间,工作温度范围)3.ARM的A/D功能的相关寄存器有哪几个,对应的地址是什么?2、ARM的A/D功能的相关寄存器有哪几个,对应的地址是什么?答:寄存器名地址ADC控制寄存器(ADCCON)0X58000000ADC触摸屏控制寄存器(ADCTSC)0X58000004ADC启动延时寄存器(ADCDLY)0X58000008ADCDAT00X580000CADC转换数据寄存器(ADCCON)ADCDAT10X580000104.如何启动ARM开始转换A/D,有几种方式?转换开始时ARM是如何知道转换哪路通道的?如何判断转换结束?答:方式一:软件启动1.定义和A/D转换相关的寄存器;2.定义和A/D转换相关的寄存器初始化;3.RADCCON=0X1。方式二:硬件启动1.复位A/D转换器;2.外接用高电平触发ADCCON[0].转换开始时ARM时知道转换哪条通道的方式:通过对ADCCON[5:3]的未赋值来选择通道。实验二(2):LED驱动程序以及测试使用程序一、实验目的1、学习在LINUX下进行驱动设计的原理。2、了解LED驱动程序和使用测试程序的设计。二、实验内容1、读懂LED驱动程序,熟悉驱动程序中调用的几个函数。2、设计LED测试使用程序,控制LED灯的亮或灭。四、实验步骤1、阅读理解源码进入/code/04_leds目录,使用vi编辑器或其他编辑器阅读理解源代码。2、编译使用程序运行make产生ad可执行文件[root@zxt/]#cd/arm6410s/code/04_leds/[root@zxt03_adc]#makeArm-linux-gcc–Wall-02led.c–oled3、下载调试在测试之前请先关闭led-player,即打开mini6410开发板上友善之臂选项中的“LEDs”,在弹出的界面上单击按钮“stoptest-player”,关闭led-player。换到minicom终端窗口,使用NFSmount开发主机的/arm2410s到/host目录。[root@zxtroot]#minicom[/mnt/yaffs]mount-tnfs-onolock192.168.0.56:/arm6410s/host[/mnt/yaffs]cd/host/code/04_leds/[/host/code/04_leds/]./led01[/host/code/04_leds/]./led11[/host/code/04_leds/]./led21[/host/code/04_leds/]./led31[/host/code/04_leds/]./led00五、实验结果如下图:六、实验感想本次实验让我进一步学习到LINUX下进行驱动设计的原理,了解了LED驱动程序和使用测试程序的设计;读懂LED驱动程序,熟悉驱动程序中调用的几个函数,设计LED测试使用程序,控制LED灯的亮或灭;掌握在Linux集成开发环境中编写和调试程序的基本过程,了解ARM芯片的基本结构和Linux内核中关于设备控制的基本原理。联系了课堂内容,加深了对Linux系统和嵌入式课程的兴趣。实验三:I2C-EEPROM编程实验一、实验目的1.了解I2C总线的基本原理2.理解如何通过I2C总线对EEPROM数据的读写。二、实验内容读懂eeprog.c的源代码,熟悉几个重要的函数的使用。三、实验设备及工具(包括软件调试工具)硬件:Mini6410嵌入式实验平台、PC机Pentium500以上,硬盘10G以上。软件:PC机操作系统Fedora9+MINICOM+ARM-LINUX开发环境四、实验步骤1、阅读理解源代码使用vi编辑器或其他编辑器阅读理解源代码。2、编译使用程序运行make产生ad可执行文件3、下载调试换到minicom终端窗口,运行:输入./i2ctest–r则读。输入./i2ctest–w则写。现象如下图所示。五、思考题1、I2C总线的优点是什么?答:a)硬件简单,资源消耗少,只有时钟和数据线。b)时钟同步和仲裁的实现原理也很简单,以开漏/集电极以线路逻辑简单实现。c)协议设计精巧、易用、灵活。数据,地址,指令都可传。d)使用广泛。2、I2C总线的启动信号和结束信号有什么特点、。答:a)启动信号。在时钟线SCL保持高电平期间,数据线SDA上的电平被拉低(即负跳变),定义为I2C总线总线的启动信号,它标志着一次数据传输的开始。启动信号是一种电平跳变时序信号,而不是一个电平信号。启动信号是由主控器主动建立的,在建立该信号之前I2C总线必须处于空闲状态。b)停止信号。在时钟线SCL保持高电平期间,数据线SDA被释放,使得SDA返回高电平(即正跳变),称为I2C总线的停止信号,它标志着一次数据传输的终止。停止信号也是一种电平跳变时序信号,而不是一个电平信号,停止信号也是由主控器主动建立的,建立该信号之后,I2C总线将返回空闲状态。实验四:串行端口程序设计一、实验目的1、了解在linux环境下串行程序设计的基本方法。2、掌握终端的主要属性及设置方法,熟悉终端I/O函数的使用。3、学习使用多线程来完成串口的收发处理。二、实验内容读懂程序源代码,学习终端I/O函数的使用方法,学习将多线程编程使用到串口的接收和发送程序设计中。三、预备知识1、有C语言基础。2、掌握在Linux下常用编辑器的使用。3