嵌入式系统设计实例完全.ppt
《嵌入式系统设计实例完全.ppt》由会员分享,可在线阅读,更多相关《嵌入式系统设计实例完全.ppt(73页珍藏版)》请在咨信网上搜索。
1、第15章 嵌入式系统设计实例本章重点嵌入式Linux下IC卡接口设计与驱动开发。嵌入式GPS导航系统的设计。嵌入式Linux系统中触摸屏控制的研究与实现。智能家居系统分析。数字视频监控终端在linux环境下的设计与实现。本章内容15.1 嵌入式Linux IC卡接口设计与驱动开发 15.2 嵌入式Linux GPS导航系统的设计15.3 嵌入式Linux触摸屏控制的研究与实现 15.4 嵌入式智能家居系统分析15.5 数字视频监控终端的设计与实现15.1 嵌入式Linux IC卡接口设计与驱动开发 Linux系统中,设备驱动程序提供了设备和上层应用空间的标准抽象接口,使得硬件响应这个标准的内部
2、编程接口;而用户则可以通过一组标准化的系统调用对硬件设备进行打开、关闭、读写参数、控制设置等特定的操作。本节首先介绍Linux下设备模块的概念和基本分类,然后介绍IC卡设备的硬件接口设计以及在Linux系统下如何应用字符设备开发I C卡设备驱动模块。15.1 嵌入式Linux IC卡接口设计与驱动开发引言随着现代工业社会逐步向信息社会的过渡,信息将扮演愈来愈重要的角色,成为现代经济生活中的成功要素。IC卡作为卡基应用系统中的一种卡型,是利用安装在卡中的集成电路(IC)来记录和传递信息的;具有存储量大、数据保密性好、抗干扰能力强、存储可靠、读写设备简单、操作速度快、脱机工作能力强等优点,其应用范
3、围极为广泛。我们基于公用电话IC卡的应用,开发了多媒体信息终端产品,在传统公用I C卡电话功能的基础上增加了上网、邮件、电子支付、信息浏览等各种多媒体功能,统一采用公用电话IC卡进行收费,目前设计的IC卡读写器和驱动软件,已经应用于多媒体终端产品中。15.1 嵌入式Linux IC卡接口设计与驱动开发1、嵌入式Linux下设备驱动模块简介Linux系统将设备分成三种类型,字符设备、块设备和网络接口。三种类型设备定义如下:字符设备 字符设备是指能够像字节流(比如文件)一样被访问的设备,如字符终端(/dev/console)和串口(/dev/ttyS0)以及类似设备。字符设备对应文件系统中的节点,
4、用户则通过此文件节点访问和控制设备。块设备 块设备和字符设备一样,可以通过文件系统节点来进行访问Linux,允许应用程序像字符设备那样读、写块设备。网络接口 任何网络设备都要经过一个网络接口,即一个能够和其它主机交换数据的设备。通常接口是个硬件设备,但也可能是个纯软件设备,比如回环(loopback)接口。Linux访问网络接口的方法是分配一个唯一的名字。15.1 嵌入式Linux IC卡接口设计与驱动开发Module是Linux内核的一大创新,其正规的叫法应该是Loadable Kernel Module,即可安装模块。可安装模块实现了Linux操作系统的可扩展性。模块运行在内核空间环境中,
5、它的程序运行函数库都是在内核空间定义,而不是在用户函数库空间。Linux模块的最方便之处为可加载和卸载,Linux操作系统提供了系统调用insmod和rmmod,可随时将自己开发的模块进行加载和卸载。根据Linux设备分类,设备驱动模块也可大致分为字符模块(char module)、块模块(block module)和网络模块(network module)三种。15.1 嵌入式Linux IC卡接口设计与驱动开发2、IC卡设备触点硬件电路介绍I C卡硬件触点接口及信号如图15.1所示。15.1 嵌入式Linux IC卡接口设计与驱动开发C1:VCC电源电压。C2:RST复位信号。C3:CLK
6、时钟信号。C4:未用。C5:GND。C6:VPP编程电压。C7:I/O数据输入/输出口线。C8:未用。以上触点中,V P P编程电压触点是厂家生产卡时编程所用,用户卡读写时没有应用,所以准确地说,只有五个触点分别连接来自外部主控制器的五个控制信号,设备复位后的后续操作可包括卡的地址设定操作、读写操作、擦除操作。针对以上卡的各种操作,皆有严格的信号控制时序,详情可参照各种应用卡的DATASHEET。15.1 嵌入式Linux IC卡接口设计与驱动开发IC卡作为卡基应用系统中的一种卡型,是利用安装在卡中的集成电路(IC)来记录和传递信息的,所以IC卡皆有特定的存储位图。具体存储位图针对应用领域的不
7、同和标准的不同,具有不同的位图定义,详细情况请参见自己开发应用卡的DATASHEET资料。在驱动的开发过程中,也只有完全清楚这些位图定义后才能将所读取的数据按照位图定义协议进行译码而得到自己最终需要的各种数据。3、IC卡读卡电路简介IC卡读卡接口电路框图如图15.2所示,采用MPC823E作为主处理器,因为IC触点工作电压为5V,而主控制器的工作电压为3.3V,所以在读卡器中设计了中间电平转化驱动电路。同时增加了控制信号的驱动能力,为了实时检测插卡操作在插卡器电路中设置一开关电路,接主控制器的控制口线,用于检测是否插卡。15.1 嵌入式Linux IC卡接口设计与驱动开发4、IC卡设备驱动模块
8、的实现详解下面以采用的公用电话机通用的IC卡为例,通过已实现代码来说明整个IC卡设备驱动模块。(1)数据结构的确定编辑头文件ICDATA.H,确定在驱动模块程序中应用的公用数据结构。驱动模块的最终目的是读取和写入卡数据处理,所以规范整齐的数据结构是必须的。可以定义一个数据结构体来实现卡数据的存储区域、数据地址、索引控制标志位等如:struct ICDATAchar*readbuffstart;/读入数据缓冲区首指针char*readbuffend;/读入数据缓冲区末指针char*writebuffstart;/写入数据缓冲区首指针char*writebuffend;/写入数据缓冲区末指针int
9、 readcount;/读入数据量int writecount;/写入数据量15.1 嵌入式Linux IC卡接口设计与驱动开发char*readp;/读入数据当前指针int readnum;/已经读入量char*writep;/当前写入数据指针int writenum;/当前写入量int newstate;/卡当前状态0为无卡1为有卡int oldstate;/卡的旧状态int statechange;/卡状态变化标志;struct=open:icopenread:icreadwrite:icwritepoll:icpoll;15.1 嵌入式Linux IC卡接口设计与驱动开发这样在驱动模块
10、中,只需要struct ICDATA iccdata;一条语句便可定义全部的卡处理数据结构定义;而ic_fops则定义了设备操作映射函数结构,从这个数据结构看,我们实现了IC卡设备的打开、读、写和监控函数。(2)硬件接口控制线控制子函数这些函数用作进行卡复位、时钟等信号的控制。staticvoidsetclkout(void)#define PB_DR26(ushort)0 x0020)volatile immap_t*immap=(immap_t*)IMAP_ADDR;(void)immap;immap-im_cpm.cp_pbpar&=(PB_DR26);immap-im_cpm.cp_p
11、bdir|=PB_DR26;以上是以我们开发的硬件系统平台为例的硬件控制接口操作函数之一,用于控制I C卡的复位信号置 15.1 嵌入式Linux IC卡接口设计与驱动开发针对不同硬件平台函数,内部操作方法不尽相同。类似的其它操作函数还有:staticvoidsetrstout(void)staticvoidclearrst(void)staticvoidsetclk(void)staticvoidsetrst(void)staticvoidclearclk(void)staticvoidsetsda(void)staticvoidclearsda(void)staticvoidsetsdai
12、n(void)staticvoidsetsdaout(void)(3)模块初始化函数的实现static int _init init_ic(void)initicdata(&icdata);init_waitqueue_head(&icdev.readq);15.1 嵌入式Linux IC卡接口设计与驱动开发init_waitqueue_head(&icdev.writeq);timer_task.routine=(void(*)(void*)timer_do_tasklet;timer_task.data=(void*)&icdata;m8xx_timer_setup();m8xx_time
13、r_start();result=register_chrdev(major1 IC&ic_fops);return0;模块初始化函数是模块开发过程中必不可少的处理函数,用于实现设备的初始化、中断初始化及处理、设备注册等,在上面函数中首先应用initicdata(&icdata)实现了卡数据的初始化,然后定义了队列数据,再进行了中断处理函数的绑定、中断申请以及中断初始化。最后实现了IC卡字符设备的申请,设备名为IC。15.1 嵌入式Linux IC卡接口设计与驱动开发(4)中断处理模块采用了MPC823E的定时器中断,在每个定时器中断发生时对插卡状况进行检测。如果检测到插卡则进行读卡操作,如果
14、检测到拔卡操作则进行卡数据的清零和卡状态数据的更新。程序中的中断处理采用了timer_task任务队列来实现中断的后续处理,其处理函数为timer_do_tasklet。M8xx_timer_setup()函数首先进行MPC823E定时器的初始化和参数设定。然后应用语句cpm_install_handler(CPMVEC_TIMER4 m8xx_timer_interrupt(void*)0)实现了中断处理的资源申请和中断处理函数m8xx_timer_interrupt()的绑定,中断处理函数中采用语句queue_task(&timer_task&tq_immediate);mark_bh(I
15、MMEDIATE_BH);实现了任务队列timer_task加入内核tq_immediate的任务,队列处理内核在合适的时间会自动调用timer_task的例行处理函数timer_do_tasklet()进行中断的后续处理。15.1 嵌入式Linux IC卡接口设计与驱动开发在timer_do_tasklet()处理函数中有一条语句wake_up_interruptible(&icdev.writeq)与ic_poll函数中的poll_wait(flip&icdev.writeq wait)相对应,当中断发生时将等待时间队列icdev.writeq激活,而poll_wait函数则针对此队列进行
16、监控,一旦被激活则可以传递给用户插卡操作信息,在用户应用软件中可立即调用读函数进行读卡操作,这样就实现了对卡的实时操作监控。(5)模块注销函数的实现static void _exit remove_ic(void)m8xx_timer_stop();cpm_free_handler(CPMVEC_TIMER1);unregister_chrdev(major1 IC);这个函数也是模块驱动开发中必不可少的函数之一,用于模块卸载时进行资源的释放,并注销此模块。如上函数所示,首先进行了中断的停止、释放中断资源,同时进行了字符设备的注销。15.1 嵌入式Linux IC卡接口设计与驱动开发(6)设备
17、读写监控等子函数用来实现对卡的操作,主要是通过实现卡的各种操作时序。也即在ic_fops结构体中定义的4个操作函数:icopen用于打开卡设备进行一些数据的初始化操作;icread()用于插卡操作时读取卡数据;icwrite()用于写卡;icpoll()用于实现卡的实时监控。综上所述,卡驱动模块的基本实现原理是:申请中断资源,当有插卡操作发生时引发中断进行读卡操作。在拔卡操作时也能引发中断,同时进行相应数据处理,同时提供poll()函数接口,用户可采用此函数对设备进行监控,从而实现有卡操作发生时,马上进行卡数据的更新。注:驱动程序源码可在网站下载。15.1 嵌入式Linux IC卡接口设计与驱
18、动开发5、驱动模块开发的编译调试以开发平台和编译器为例编写简单的makefile文件为:CC=ppc_8xx-gccDD=-nostdinc-DMODULE-D_KERNEL_-I/mykernel/include-Wall-Wstrict-prototypes-Wno-trigraphs-O2-fomit-frame-pointer-fno-strict-aliasing-fno-common-I/mykernel/arch/ppc-fsigned-char-msoft-float-pipe-ffixed-r2-Wno-uninitialized-mmultiple-mstring-fno-
19、builtin-I/opt/hardhat/devkit/ppc/8xx/target/usr/lib/gcc-lib/powerpc-hardhat-linux/3.2.1/include ic.o:ic.c$(CC)$(DD)-cic.cinstall:makeic.oclean:rm*.o15.1 嵌入式Linux IC卡接口设计与驱动开发执行命令make install便可以实现驱动模块的动态编译,内核提供了两个应用程序insmod和rmmod,来实现内核模块的动态加载和去除,在模块编译当前目录下执行命令:mknod /dev/charmodule c 254 0建立与此设备模块对应的
20、设备文件节点。c表示为字符设备254表示主设备号0表示子设备号,执行命令insmod ic.o可实现模块动态加载,而命令rmmod ic可实现模块的动态去除。6、驱动模块的静态编译进内核将模块驱动源文件拷贝进/drivers/char/目录下,修改/drivers/char/Makefile文件,添加:obj-$(CONFIG_MYMODULE)+=ic.o在/drivers/char/config.in文件中添加config CONFIG_MYMODULEbool IC CONFIG_MYMODULE15.1 嵌入式Linux IC卡接口设计与驱动开发进入编译内核目录执行make menuc
21、onfig在character devices目录下即可见到IC选项选择,然后执行编译命令即可编入内核或仅编译模块:make mrpropermake menuconfigmake CROSS_COMPILE=ppc_8xx-gccmake modules CROSS_COMPILE=ppc_8xx-gcc即可只编译内核在源文件目录下可见到ic.o7、总结用基本的字符设备实现I C卡设备的驱动模块开发。内核驱动模块的开发是与硬件直接接触的。针对硬件的不同,其内部处理方法也千变万化,对于内核模块开发最有效的学习途径和最好的学习文档,就是Linux的内核源代码。同时,加入一些Linux的邮件开发组
22、也将获益非浅。15.2 嵌入式GPS导航系统的设计15.2.1 与GPS相关的一些概念1、GPSGPS全称是GlobalPositionSystem,中文意思是全球定位系统。通过GPS的定位功能可知道当前处于地球上的具体位置,该具体位置用一组经纬度和海拔高度数据信息来表现出来。GPS是美国国防部陆海空三军联合研制的第二代卫星导航定位系统,自1973年到1993年,GPS全球定位系统的建立经历了近20年,耗资过百亿美元;整个定位系统主要是通过围绕在地球表面的24颗人造卫星来实现全天候、全球性和高精度的连续定位的,这24颗卫星分六条轨道围绕在地球表面,每条轨道上有四颗卫星。15.2 嵌入式GPS导
23、航系统的设计2、导航、导航导航就是指通过借助GPS全球定位功能及车载电子地图,然后在输入了要去的目的地后导航系统就会在行驶过程中自动在电子地图上规划出到达目的地的最佳行车路线,并配有专业导航语言及文字导航信息来引导正确航行至目的地。要实现导航功能必须满足两个基本条件:第一是有GPS全球定位系统的终端设备,即能接收和处理卫星信号;第二就是要有电子地图。3、坐标、坐标(coordinate)有2维、3维两种坐标表示,当GPS能够收到4颗及以上卫星的信号时,它能计算出本地的3微坐标:经度、纬度、高度,若只能收到3颗卫星的信号,它只能计算出2维坐标:精度和纬度,这时它可能还会显示高度数据,但这数据是无
24、效的。大部分GPS不仅能以经/纬度(Lat/Long)的方式,显示坐标,而且还可以用UTM(UniversalTransverseMercator)等坐标系统显示坐标但我们一般还是使用LAT/LONG系统,这主要是由你所使用的地图的坐标系统决定的。坐标的精度在SelectiveAvailability(美国防部为减小GPS精确度而实施的一种措施)打开时,GPS的水平精度在100-50米之间,视接受到卫星信号的多少和强弱而定。15.2 嵌入式GPS导航系统的设计4、路标路标(LandmarkorWaypoint)GPS内存中保存的一个点的坐标值。在有GPS信号时,按一下”MARK”键,就会把当前
25、点记成一个路标,它有个默认的一般是象”LMK04”之类的名字,你可以修改成一个易认的名字(字母用上下箭头输入),还可以给它选定一个图标。路标是GPS数据核心,它是构成”路线”的基础。标记路标是GPS主要功能之一,但是你也可以从地图上读出一个地点的坐标,手工或通过计算机接口输入GPS,成为一个路标。一个路标可以将来用于GOTO功能的目标,也可以选一条路线Route作为一个支点。一般GPS能记录500个或以上的路标。5、路线、路线(ROUTE)路线是GPS内存中存储的一组数据,包括一个起点和一个终点的坐标,还可以包括若干中间点的坐标,每两个坐标点之间的线段叫一条”腿”(leg)。常见GPS能存储2
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 系统 设计 实例 完全
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【天****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【天****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。