您好,欢迎访问三七文档
嵌入式实验报告武汉大学计算机学院嵌入式实验报告题目:UART接口实验专业(班):计算机科学与技术(03班)项目组成员:组长:王威2008301500084成员:张力2008301500084王亚科2008301500081饶雨城2008301500083吴桐2008301500101课程名称:嵌入式系统实验设计任课教师:刘树波2011年11月23日嵌入式实验报告1一、实验目的1.掌握UART0各个控制器的设置,并能使用UART0接收PC发过来的数据,并将数据送回PC进行显示。2.熟悉在Linux环境下用C语言进行编程,实现UP-NETARM2410-S实验台上对串行接口设备(tts0/1/2)的设置和读写操作。二、实验环境ARM2410S嵌入式实验平台:2个RS-232,1个RS-485,1个IrDA。与嵌入式平台连接的PC机:运行红帽子Linux系统,内核版本2.4。三、实验内容在一台PC机和实验台上进行实验,为模仿两台机子串口之间的通信,程序中使用多线程控制方法,一个线程负责往COM口发送数据,另一个线程负责接收。还有一个键盘监控线程负责程序的中断退出。比如写线程往串口写字符串“HelloUP-NetARM2410-S!”,接收线程接收后送回上位机终端的数据接收窗口进行显示。UART0设置为通讯波特率115200,8位数据位,1位停止位,无奇偶校验。嵌入式实验报告2四、实验步骤1.根据实验内容,编写代码予以实现。(注:源代码见附件)2.交叉编译源代码,生成可在嵌入式平台上运行的程序,并把程序考到共享目录下。命令如下:armv4l-unknown-linux-gccserial.c–oserial–lpthreadcpserial/arm2410s/share3.在终端启动minicom,并挂载共享目录:mount-tnfs192.168.0.11:/arm2410s/share/host4.为设备文件建立软链接:ln-sf/dev/tts/0/dev/ttyS05.运行程序:./serial6.观测并记录实验结果。五、实验结果在PC终端输出从COM口读出的字符串,圆满完成了实验要求。结果如下图所示:嵌入式实验报告3六、实验总结通过URAT接口实验,我们掌握了UART0各个控制寄存器的设置。熟悉了在Linux环境下用C语言进行编程,对UP-NETARM2410-S实验台上串行接口设备(tts0/1/2)的设置和读写操作。此次实验,让我们对Linux下嵌入式平台的开发工作有了初步的了解,增强了我们动手编码和通过实践解决实际问题的能力。嵌入式实验报告4附件:#includestdio.h//标准输入/输出定义#includestdlib.h#includefcntl.h//文件控制定义#includepthread.h//线程库#includetermios.h//PPSIX终端控制定义#includeunistd.h//UNIX标准函数定义#defineBAUDERATEB115200#defineCOM1/dev/ttyS0#defineCOM2/dev/ttyS1#defineENDMINITERM27//按ESC键退出#defineFALSE0#defineTRUE1volatileintSTOP=FALSE;volatileintfd;//设备号/*------------------------------------------------*/void*keyboard(void*data)//键盘输入,按ESC退出{intc;for(;;){c=getchar();if(c==ENDMINITERM){STOP=TRUE;break;}}returnNULL;}/*------------------------------------------------*/void*receive(void*data)//接收线程{intc;printf(\nreadmode\n);while(STOP==FALSE){read(fd,&c,1);//COM端口//printf(%c,&c);write(1,&c,1);//stdout}嵌入式实验报告5printf(\nexitfromreadingmodem\n);returnNULL;}/*------------------------------------------------*/void*send(void*data)//发送线程{intc='0';printf(\nsenddata\n);while(STOP==FALSE){c=c+1;c=c%256;write(fd,&c,1);fflush(stdout);usleep(10000);//延迟}returnNULL;//等待子进程消亡}/*------------------------------------------------*/intmain(intargc,char**argv){structtermiosoldtio,newtio,oldstdtio,newstdtio;intok;pthread_tth_a,th_b,th_c;//定义线程a,b,cvoid*retval;//定义错误if(argc1)fd=open(COM2,O_RDWR);//以读写方式打开串口elsefd=open(COM1,O_RDWR);if(fd0){perror(COM1);//提示错误信息exit(-1);//返回}tcgetattr(0,&oldstdtio);//0设备属性值-oldstdiotcgetattr(fd,&oldtio);/*savecurrentmodemsettings*/tcgetattr(fd,&newstdtio);/*getworkingstdtio,准备更改属性*/newtio.c_cflag=BAUDERATE|CRTSCTS|CS8|CLOCAL|CREAD;/*ctrolflag*///B115200速率,8位数据位,本地,接受使能newtio.c_iflag=IGNPAR;/*inputflag*/newtio.c_oflag&=~(ICANON|ECHO|ECHOE|ISIG);/*outputflag*/newtio.c_lflag&=~OPOST;/*localflag*/newtio.c_cc[VMIN]=1;//指定最少读取字符数为1newtio.c_cc[VTIME]=0;//指定读取每个字符等待时间为0嵌入式实验报告6//开始清空modem线,并且设置modem属性tcflush(fd,TCIFLUSH);//丢弃所有输入/输出队列上还没有读取或发送的数据tcsetattr(fd,TCSANOW,&newtio);/*setattrib*/pthread_create(&th_a,NULL,keyboard,0);pthread_create(&th_b,NULL,receive,0);pthread_create(&th_c,NULL,send,0);pthread_join(th_a,&retval);//等待线程a结束pthread_join(th_b,&retval);pthread_join(th_c,&retval);tcsetattr(fd,TCSANOW,&oldtio);//恢复原来设置,立即生效tcsetattr(0,TCSANOW,&oldstdtio);close(fd);exit(0);}
本文标题:嵌入式实验报告
链接地址:https://www.777doc.com/doc-6279293 .html