您好,欢迎访问三七文档
嵌入式实验报告姓名:其他成员;:学院:机械与电子工程学院班级:学号:指导教师:实验一熟悉Linux开发环境一、实验目的熟悉Linux开发环境,学会基于S3C2410的Linux开发环境的配置和使用。使用Linux的armv4l-unknown-linux-gcc编译,使用基于NFS方式的下载调试,了解嵌入式开发的基本过程。二、实验内容本次实验使用RedhatLinux9.0操作系统环境,安装ARM-Linux的开发库及编译器。创建一个新目录,并在其中编写hello.c和Makefile文件。学习在Linux下的编程和编译过程,以及ARM开发板的使用和开发环境的设置。下载已经编译好的文件到目标开发板上运行。三、实验步骤1、编写程序源代码2、编写Makefile文件3、下载调试四、思考题1.Makefile是如何工作的?其中的宏定义分别是什么意思?答:Makefile文件定义了一系列的规则,它指明了哪些文件需要编译,哪些文件需要先编译,哪些文件需要重新编译等等更为复杂的命令。使用它带来的好处就是自动编译,你只需要敲一个“make”命令整个工程就可以实现自动编译,CC指明编译器;EXEC表示编译后生成的执行文件名称;OBJS目标文件列表;CFLAGS编译参数;LDFLAGS连接参数;all:编译主入口;clean:清除编译结果实验二A/D接口实验一、实验目的了解在linux环境下对S3C2410芯片的8通道10位A/D的操作与控制。二、实验内容学习A/D接口原理,了解实现A/D系统对于系统的软件和硬件要求。阅读ARM芯片文档,掌握ARM的A/D相关寄存器的功能,熟悉ARM系统硬件的A/D相关接口。利用外部模拟信号编程实现ARM循环采集全部前4路通道,并且在超级终端上显示。三、实验步骤1、阅读理解源码并编译应用程序2、下载调试程序四、思考题1.逐次逼近型的A/D转换器原理是什么?答:逐次逼近型(也称逐位比较式)的A/D转换器,应用比积分型更为广泛,主要由逐次逼近寄存器SAR、D/A转换器、比较器以及时序和控制逻辑等部分组成。它的实质是逐次把设定的SAR寄存器中的数字量经D/A转换后得到电压Vc与待转换模拟电压V。进行比较。比较时,先从SAR的最高位开始,逐次确定各位的数码应是“1”还是“0”,其工作过程如下:转换前,先将SAR寄存器各位清零。转换开始时,控制逻辑电路先设定SAR寄存器的最高位为“1”,其余位为“0”,此试探值经D/A转换成电压Vc,然后将Vc与模拟输入电压Vx比较。如果Vx≥Vc,说明SAR最高位的“1”应予保留;如果VxVc,说明SAR该位应予清零。然后再对SAR寄存器的次高位置“1”,依上述方法进行D/A转换和比较。如此重复上述过程,直至确定SAR寄存器的最低位为止。过程结束后,状态线改变状态,表明已完成一次转换。2.A/D转换的重要指标包括哪些?答:分辨率、精度有绝对精度和相对精度、转换时间、电源灵敏度、量程、工作温度范围3.ARM的A/D功能的相关寄存器有哪几个,对应的地址是什么?答:寄存器ADCCON,地址:0x58000000。ADCDAT0:转换结果数据寄存器;地址:0x5800000CADC触摸屏控制寄存器ADCTSC,地址:0x58000004;4.如何启动ARM开始转换A/D,有几种方式?转换开始时ARM是如何知道转换哪路通道的?如何判断转换结束答:方式一:软件启动。定义与A/D转换相关的寄存器,初始化寄存器,rADCCON=0x1;启动转换。方式二:硬件启动:复位A/D转换器,外接用高电平触发ADCCON[0].通过对ADCCON[5:3]的赋值来选择通道实验三D/A接口实验一、实验目的1、学习D/A转换原理2、掌握MAX504D/A转换芯片的使用方法3、掌握不带有D/A的CPU扩展D/A功能的主要方法4、了解D/A驱动程序加入内核的方法二、实验内容学习D/A接口原理,了解实现D/A系统对于系统的软件和硬件要求。阅读MAX504芯片文档,掌握其使用方法三、实验步骤1、阅读理解源码并编译应用程序2、下载调试程序四、思考题1.D/A转换器的分类。答:D/A转换器的内部电路构成无太大差异,一般按输出是电流还是电压、能否作乘法运算等进行分类。可分为:电压输出型(如TLC5620)、电流输出型(如THS5661A)、乘算型(如AD7533)、一位D/A转换器2.D/A转换器的主要技术指标。答:分辩率:指最小模拟输出量(对应数字量仅最低位为“1”)与最大量(对应数字量所有有效位为“1”)之比。建立时间:是将一个数字量转换为稳定模拟信号所需的时间,也可以认为是转换时间。其他指标还有线性度(Linearity),转换精度,温度系数/漂移。3.MAX504的特点及使用方法。答:、MAX50410位D/A转换器的特点:由单个5V电源供电,电压输出缓冲,内部2.048V参考电压INL=1/21LSB(MAX)、电压不随温度变化、可变的输出范围:0V~VDD,VSS~VDD上电复位、串行输出实验四CAN总线通讯实验一、实验目的1、掌握CAN总线通讯原理。2、学习MCP2510的CAN总线通讯的驱动开发。3、掌握Linux系统中断在CAN总线通讯程序中使用。二、实验内容学习CAN总线通讯原理,了解CAN总线的结构,阅读CAN控制器MCP2510的芯片文档,掌握MCP2510的相关寄存器的功能和使用方法。编程实现两台CAN总线控制器之间的通讯。ARM接收到CAN总线的数据后会在于终端显示,同时使用CAN控制器发送的数据也会在终端反显。MCP2510设置成自回环的模式,CAN总线数据自发自收。三、实验步骤1、编译CAN总线模块2、编译应用程序3、下载调试四、思考题1.CAN总线通讯最少需要几根线?如果多个节点应该如何连接?答:只有2根线与外部相连。多个节点连接方式如下图所示:2.为什么CAN总线的可靠性高,传输数率却可以速度比串口快(可达到1Mbps)?答:CAN总线使用串行数据传输方式,可以1Mb/s的速率在40m的双绞线上运行,也可以使用光缆连接,而且在这种总线上总线协议支持多主控制器。CAN与I2C总线的许多细节很类似,但也有一些明显的区别。当CAN总线上的一个节点(站)发送数据时,它以报文形式广播给网络中所有节点。对每个节点来说,无论数据是否是发给自己的,都对其进行接收。每组报文开头的11位字符为标识符,定义了报文的优先级,这种报文格式称为面向内容的编址方案。在同一系统中标识符是唯一的,不可能有两个站发送具有相同标识符的报文。当几个站同时竞争总线读取时,这种配置十分重要。实验五串行端口程序设计一、实验目的1、了解在Linux环境下串行程序的基本方法。2、掌握终端的主要属性及设置方法,熟悉终端I/O函数的使用。3、学习使用多线程完成串口的收发处理。二、实验内容读懂程序源代码,学习终端I/O函数的使用方法,学习将多线程编程应用到串口的接受和发送程序设计中。三、预备知识1、C语言的基础2、掌握在Linux下常用编辑器的使用。3、掌握Makefile的编写和使用。4、掌握Linux下的程序编译与交叉编译过程。四、实验原理异步串行I/O方式是将传输数据的每个字符一位接一位(例如先低位、后高位)地传送。数据的各不同位可以分时使用同一传输通道,因此串行I/O可以减少信号连接线,最后用一对线即可进行。接收方对于同一根线上一连串的数字信号,首先要分割成位,再按位组成字符。为了恢复发送的信息,双方必须协调工作。在微型计算机中大量使用异步串行I/O方式,双方使用各自的时钟信号,而且允许时钟频率有一定误差,因此实现较容易。但是由于每个字符都要独立确定起始和结束(即每个字符都要重新同步),字符和字符间还可能有长度不定的空闲时间,因此效率较低。上图给出异步串行通信中一个字符的传送格式。开始前,线路处于空闲状态,送出连续“1”。传送开始时首先发一个“0”作为起始位,然后出现在通信线上的是字符的二进制编码数据。每个字符的数据位长可以约定为5位、6位、7位或8位,一般采用ASCII编码。后面是奇偶校验位,根据约定,用奇偶检验位将所传字符中“1”的位数凑成奇数个数或偶数个数。也可以也可以约定不要奇偶校验位,这样就取消奇偶校验位。最后是表示停止位的“1”信号,这个停止位可以约定持续1位、1.5位或2位的时间宽度。至此一个字符传送完毕,线路又进入空闲,持续为“1”。经过一段随机的时间后,下一个字符开始传送才有发出起始位。每一个数据位的宽度等于传送波特率的倒数。微机异步串行通信中,常用的波特率为50.95,110,150,300,600,1200,2400,4800,9600等。接收方按约定的格式接收数据,并进行检查,可以查出以下三种错误:奇偶错:在约定奇偶检查的情况下,接收到的字符奇偶状态和约定不符。帧格式错:一个字符从起始位到停止位的总尾数不对。溢出错:若先接收的字符尚未被微机读取,后面的字符又传送过来,则产生溢出错。每一种错误都会给出相应的出错信息,提示用户处理。一般串口调试都使用空的MODEM连接电缆,其连接方式如下:五、程序分析本实验的代码如下:#includetermios.h#includestdio.h#includeunistd.h#includefcntl.h#includesys/signal.h#includepthread.h#defineBAUDRATEB115200#defineCOM1“/dev/ttyS0”#defineCOM2“/dev/ttyS1”#defineENDMINITERM27/*ESCtoquitminiterm*/#defineFALSE0#defineTRUE1volatileintSTOP=FALSE;volatileintfd;voidchild_handler(ints){print(“stop!!!\n”);STOP=TRUE;}/*__________________________________________*/Void*keyboard(void*date){Intc;For(;;){c=getchar();if(c=ENDMINITERM){STOP=TURE;Break;}}ReturnNULL;}/*____________________________________________*//*modeminputhandle*/Void*receive(void*date){Intc;Printf(“readmodem\n”);While(STOP==FALSE){Read(fd,&c,1);/*comport*/Write(1,&c,1);/*stdout*/}Printf(“exitformreadingmodem\n”);ReturnNULL;}/*__________________________________________________*/Void*send(void*date){Int=’0’;Printf(“senddate\n”);While(STOP==FALSE)/*modeminputhandler*/{C++;C%=255;Write(fd,&c,1);/*stdout*/Usleep(100000);}ReturnNULL;}/*_______________________________________________________*/Intmain(intargc,char**argv){Structtermiosoldtio,newtio,oldstdio,newstdio;Structsigactionsa;Intok;Pthread_tth_a;th_b,th_c;Void*retval*If(argc1)Fd=open(COM2,O_RDWR);ElseFd=open(COM1,O_RDWR);//|O_NOCTTY|O_NONBLOCK);If(fd0){Error(COM1);Ex
本文标题:嵌入式实验报告
链接地址:https://www.777doc.com/doc-4357841 .html