嵌入式系统课设_第1页
嵌入式系统课设_第2页
嵌入式系统课设_第3页
嵌入式系统课设_第4页
嵌入式系统课设_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

《嵌入式系统》专题报告嵌入式系统串口通信接口设计专业:通信工程班级:通信1001姓名:学号:嵌入式系统串口通信接口设计一、绪论嵌入式系统(Embeddedsystem),是一种"完全嵌入受控器件内部,为特定应用而设计的专用计算机系统”,根据英国电器工程师协会(U.K.InstitutionofElectricalEngineer)的定义,嵌入式系统为控制、监视或辅助设备、器或用于工厂运作的设备。与个人计算机这样的通用计算机系统不同,嵌入式系统通常执行的是带有特定要求的预先定义的任务。由于嵌入式系统只针对一项特殊的任务,设计人员能够对它进行优化,减小尺寸降低成本。由于嵌入式系统通常进行大量生产。所以单个的成本节约,能够随着产量进行成百上千的放大。嵌入式系统必须根据应用需求对软硬件进行裁剪,满足应用系统的功能、可靠性、成本、体积等要求。所以,如果能建立相对通用的软硬件基础,然后在其上开发出适应各种需要的系统,是一个比较好的发展模式。目前的嵌入式系统的核心往往是一个只有几K到几十K微内核,需要根据实际的使用进行功能扩展或者裁减,但是由于微内核的存在,使得这种扩展能够非常顺利的进行。ARM是微处理器行业的一家知名企业,设计了大量高性能、廉价、耗能低的RISC处理器、相关技术及软件。技术具有性能高、成本低和能耗省的特点。适用于多种领域,比如嵌入控制、消费/教育类多媒体、DSP和移动式应用等。ARM的商业模式主要涉及IP的设计和许可,而非生产和销售实际的半导体芯片°ARM向合作伙伴网络(包括世界领先的半导体公司和系统公司)授予IP许可证。这些合作伙伴可利用ARM的IP设计创造和生产片上系统设计,但需要向ARM支付原始IP的许可费用并为每块生产的芯片或晶片交纳版税。除了处理器IP夕卜,ARM还提供了一系列工具、物理和系统IP来优化片上系统设计。正因为ARM的IP多种多样以及支持基于ARM的解决方案的芯片和软件体系十分庞大,全球领先的原始设备制造商(OEM)都在广泛使用ARM技术,应用领域涉及手机、数字机顶盒以及汽车制动系统和网络路由器。当今,全球95%以上的手机以及超过四分之一的电子设备都在使用ARM技术。1.1嵌入式linux简介嵌入式linux是将日益流行的Linux操作系统进行裁剪修改,使之能在嵌入式计算机系统上运行的一种操作系统。嵌入式linux既继承了Internet上无限的开放源代码资源,又具有嵌入式操作系统的特性。嵌入式Linux的特点是版权费免费;购买费用媒介成本技术支持全世界的自由软件开发者提供支持网络特性免费,而且性能优异,软件移植容易,代码开放,有许多应用软件支持,应用产品开发周期短,新产品上市迅速,因为有许多公开的代码可以参考和移植,实时性能RT_LinuxHardhatLinux等嵌入式Linux支持实时性能稳定性好安全性好。Linux的大小适合嵌入式操作系统——Linux固有的模块性,适应性和可配置性,使得这很容易做到。另外,Linux源码的实用性和成千上万的程序员热切期望它用于无数的嵌入式应用软件中,导致很多嵌入式Linux的出现,包括:Embedix,ETLinux,LEM,LinuxRouterProject,LOAF,uCLinux,muLinux,ThinLinux,FirePlug,Linux和PizzaBoxLinux。二硬件电路设计本设计是基于三星公司的ARM11芯片(S3C6410芯片)作为主处理器。该CPU是基于ARM1176JZF-S核设计,支持SD卡启动,只需将bootloader烧写至SD卡,就可以从SD卡启动。完成程序烧写功能。系统框图如下:该S3C6410通用异步接收和发送器(UART)提供了四个独立的异步串行I/O(SIO)端口。每个异步串行I/O(SIO)端口通过中断或者直接存储器存取(DMA)模式来操作。换句话说,UART是通过产生一个中断或DMA请求,在CPU和UART之间传输数据的。该UART使用系统时钟的时间可以支持的比特率最高为115.2kb/s。如果一外部设备提供ext_uclk0或ext_uclk1,则UART可以以更高的速度运行。每个UART的通道包含了两个64字节收发FIFO存储器。该S3C6410的UART包括可编程波特率,红外线(IR)的传送/接收,一个或两个停止位插入,5位,6位,7位或8位数据的宽度和奇偶校验。串口寄存器,以通道0为例:寄存器ifeJht设f写说明柄始慎oivroo&oco读,写LARTifi道口行控制寄存器0x00ICCK0017F0050C4读.*顽通道。控制寄存器0x0^UFCom0I7FOD50G8淀浦:AR1通道0FIFO控制寄存器0x0功co阿Oi7FOO&OCC读/写二IRT遮道口调制解诚黑<Moden>控制寄存器0x0LTRSTATGDi7FDO5010该二IRT遥道0发送■/接收状态畚存器0x6LERSTATCOI7FDG5014读:ART通道0接收褚误状态寄存秦0x0IFSTMCOk7F00501S读HRT通道0FIFO状恣寄存希0x00IMSr.UDOiVFOOSO1C读LARTiS道。倜制解周器iModen)状恋寄存器0i0ITMID0I7FDO502D写LARTifi道。发送暧冲身存器一IRXHDDxVF005024读M通道。接收锻冲寄存器0x00LBKDIYOLAKT0I7FOO502S诙/■写退*0波恃展分成奇存器OXOODDL.DIV5LOTO017F00503C读,写二认T遍道口升颇为槽奇存器0x0000LINTPOCARTDi7FOG503D读/■写道遭Q中断处理寄存评0x0UNT5P00I7FOO5D34谜/写LAHI通道0中断源姓理容存器QiO11NIY00x7RX)5038淑■写心通道。中断屏蔽新存器0x0三、软件环境搭建及系统移植(1)解压安装U-boot源代码(2)解压安装Linux内核源代码(3)解压安装目标文件系统(4)解压安装嵌入式图形系统qtopia源代码(5)配置和编译U-boot(6)配置和编译内核(Kernel)(7)制作目标板文件系统映象(8)下载U-boot(9)下载linux内核(10)下载qtopia图形界面四、串口通信应用程序设计要进行串口通讯,首先要打开串口设备,使用Linux下的open函数即可打开,打开串口设备后,还需要用tcsetattr来设置波特率等串口属性,代码如下所示:intopenSerialPort(){intfd=-1;constchar*devName="/dev/ttySAC2";fd=::open(devName,O_RDWR|O_NONBLOCK);if(fd<0){return-1;}termiosserialAttr;memset(&serialAttr,0,sizeofserialAttr);serialAttr.c_iflag=IGNPAR;serialAttr.c_cflag=B115200|HUPCL|CS8|CREAD|CLOCAL;serialAttr.c_cc[VMIN]=1;if(tcsetattr(fd,TCSANOW,&serialAttr)!=0){return-1;}returnfd;上述代码中打开的串口设备文件名为/dev/ttySAC2,并设置波特率为115200,然后将Databits改为8。要对串口设备进行读写,使用Linux标准i/o函数read和“abcd”,4)往串口设备写abcd时,PC端的终端上会显示abcd,同理,当在PC端上输入字符时,使用read(fd,buff,sizeofbuff)来读取PC端发送过来的字符。在使用open方法打开串口并设置好属性后,可以使用Qt的类QSocketNotifier来监听串口是否有数据可读,它是事件驱动的,配合Qt的signal/slot机制,当有数据可读时,QSocketNotifier就会发射ativated信号,你只需要创建一个slot连接到该信号即可,代码如下所示:m_fd=openSerialPort();if(m_fd<0){QMessageBox::warning(this,tr("Error"),tr("Failtoopenserialport!"));return;}m_notifier=newQSocketNotifier(m_fd,QSocketNotifier::Read,this);connect(m_notifier,SIGNAL(activated(int)),this,SLOT(remoteDataIncoming()));在上述代码中,我们首先使用上面封装的openSerialPort函数打开串口并配置串口属性,接着我们用m_fd和QSocketNotifier::Read作为参数构造了一个QSocketNotifier的实例,QSocketNotifier::Read参数表示我们需要关U®口3旦洲舜捞、*坝炳QSockeiNoWer聘查saavaied而血席嫡四remoieDaorIncomingsoi、llK4^ffl^®3'remoieDaorIncomingsoi访^sffl。■7101湖remoieDaorIncommgsoi、CK}s^®bss><>亟-B、)D®WMred®B1册口萍ffl、浇训恭萍ffla涕四郁BIFr-voidTMainFormrrremoieDaarIncomingo{charc;if(read(mlfd、p?psizeofC)IT1){QMessageBOX’wamingMhis、ircElror--)、-reReceiveerror--));rerm;)mlrecQveEdrvinseHQsiringscharn)));)宙丑designerH*^id-H患郁@1-QVQiops吨条4designerH*、田^沛丰渊日玛渊揄3|1|患郁@1、肄吉sffl矍MffldesignerH**^id-sez.a-port95可3卅郁@1、H+郁剧炳®4»m命甘mamlformlbase.uisui艮十(KS^HSS艮十fflBffi宜访薄uicBn、*mC++畚)创建三个源代码文件,一个是头文件main_form.h,一个是源代码文件main_form.cpp,一个是main.cpp。Main.cpp,代码如下:#include"main_form.h"#include<qtopia/qpeapplication.h>QTOPIA_ADD_APPLICATION("serialport”,TMainForm)QTOPIA_MAINmain_form.h代码如下:#if!defined(__MAIN_FORM_H__)#define__MAIN_FORM_H__#include"main_form_base.h"#include<qsocketnotifier.h>classTMainForm:publicTMainFormBase{Q_OBJECTpublic:TMainForm(QWidget*parent=0,constchar*name=0,WFlagsf=WType_TopLevel);virtual~TMainForm();private:intopenSerialPort();privateslots:voidsendButtonClicked();voidremoteDataIncoming();private:intm_fd;QSocketNotifier*m_notifier;};#endifMain_form.cpp代码如下:TMainForm::TMainForm(QWidget*parent,constchar*name,WFlf):TMainFormBase(parent,name,f),m_notifier(0){m_fd=openSerialPort();if(m_fd<0){QMessageBox::warning(this,tr("Error"),tr("Failtoopenserialport!"));return;}m_notifier=newQSocketNotifier(m_fd,QSocketNotifier::Read,this);connect(m_notifier,SIGNAL(activated(int)),this,SLOT(remoteDataIncoming()));}TMainForm::~TMainForm(){if(m_notifier){deletem_notifier;m_notifier=0;}if(m_fd>=0){::close(m_fd);m_fd=-1;}}voidTMainForm::sendButtonClicked()QStringtext(m_sendEdit->text())if(text.isEmpty()){return;}::write(m_fd,text.latin1(),text.length());m_sendEdit->setText("");}intTMainForm::openSerialPort(){intfd=-1;constchar*devName="/dev/ttySAC2";fd=::open(devName,O_RDWR|O_NONBLOCK);if(fd<0){return-1;}termiosserialAttr;memset(&serialAttr,0,sizeofserialAttr);serialAttr.c_iflag=IGNPAR;serialAttr.c_cflag=B115200|HUPCL|CS8|CREAD|CLOCAL;serialAttr.c_cc[VMIN]=1;if(tcsetattr(fd,TCSANOW,&serialAttr)!=0){return-1;}returnfd;}voidTMainForm::remoteDataIncoming(){charc;if(read(m_fd,&c,sizeofc)!=1){QMessageBox::warning(this,tr("Error"),tr("Receiveerror!"));return;}m_receiveEdit->insert(QString(QChar(c)));}交叉编译serialport程序编译完成后,在serialport下生成了serialport可执行文件,把它拷贝到SD卡,然后将SD插到6410开发板上,在串口终端上输入以下命令将可执行文件拷贝到开发板上的/opt/Qtopia

温馨提示

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

评论

0/150

提交评论