版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第25章综合案例-嵌入式B超通过前面的学习,相信大家对嵌入式系统已经有了很深的认识。这一章给读者介绍一个嵌入式超声设计的综合案例,涉及到系统的设计,选型到实现,同时对几个关键地方做了深入的分析。希望读者通过本章的学习能得到一些收获。25.1系统终端的结构设计系统的结构设计包括总体结构的设计和芯片的选型。总体设计的时候,需要考虑的因素非常多,需要从全局的角度考虑。比如数据采集需要由FPGA完成,数据的前端处理分配给FPGA,后端处理到底应该分给FPGA还是ARM,需要仔细斟酌。因为FPGA做后期处理实现起来比较困难,但是能保证处理的实时性。而ARM对数据后期处理实现起来比较简单,但是很难保证实时性的要求。芯片的选择包括ARM的外围接口芯片,前面第六章已经说的非常详细。这里主要介绍显示芯片的选型问题。因为嵌入式超声对显示的要求很高,单凭ARM自身的LCD控制器已经很难满足要求,必须外接一款独立显示芯片,以满足系统设计要求。25.1.1总体结构图25-1是基于ARM+FPGA的超声诊断终端的硬件结构图,下面对每一部分的功能分别做介绍。25.1.2显示控制芯片选型基于以上分析,我们决定选择一款独立显示控制芯片专门负责显示输出,在CPU接收FPGA发送来数据的同时,保证有稳定的VGA输出。这里我们选择SM501作为显示控制芯片,同时选择CH7004C这款视频转换芯片,将LCD数字信号转换为PAL和S-VIDEO信号,图25-3是显示控制模块的结构示意图。25.2系统终端的软件设计超声诊断仪的软件结构以及它们的关系如图25-4所示。25.2.1U-BootU-Boot-1.1.1版本中已经有关于S3C2440的移植代码,因此只要进行配置选择正确的移植版本即可,这里使用smdk2440_config配置。方法是执行makesmdk2440_config命令。下面是U-Boot的编译过程。#makesmdk2440_config#make编译成功后,在u-boot-1.1.1目录下生成u-boot.bin文件,这个文件就是u-boot映像文件,将该文件复制到本地电脑的/tftpboot目录下,通过网口就能将其烧写到板载Flash中。(第一次烧写需要使用烧写板或者仿真器)25.2.2嵌入式Linux移植移植内核的时候有两个地方需要注意,一是文件系统,二是控制台。内核配置菜单选项中Filesystem--->对应的就是文件系统。文件系统所涉及的内容较多,一般在默认配置的基础上进行修改。因为在调试阶段需要使用网络文件系统(NFS),所以这里必须加上对NFS的支持。25.2.3MiniGUI移植1.配置和编译MiniGUI库源码修改结束后,再修改libMiniGUI-1.3.3目录下configure文件,在文件开头处增加以下几行:CC=/usr/local/arm/2.95.3/bin/arm-linux-gccCPP=/usr/local/arm/2.95.3/bin/cppLD=/usr/local/arm/2.95.3/bin/arm-linux-ldAR=/usr/local/arm/2.95.3/bin/arm-linux-arRANLIB=/usr/local/arm/2.95.3/bin/arm-linux-ranlibSTRIP=/usr/local/arm/2.95.3/bin/arm-linux-strip2.安装MiniGUI的资源文件进入MiniGUI-res-1.3.3所在目录,修改config.linux,找到prefix=$(TOPDIR)/usr/local,将其改为prefix=/usr/local/arm/2.95.3/arm-linux,找到CC=gcc,将其改为CC=arm-linux-gcc,然后运行:#makeinstall将资源安装到/usr/local/arm/2.95.3/arm-linux-gcc/lib/MiniGUI/res3.安装MiniGUI库、资源到目标系统将MiniGUI库(libmgext,libMiniGUI,libvcongui)复制到目标板的/usr/local/lib目录,并将资源目录/usr/local/arm/2.95.3/arm-linux/lib/MiniGUI整个目录复制到目标系统的/usr/local/lib目录。4.修改配置文件由于MiniGUI库执行时需要寻找一个配置文件路径MiniGUI.cfg,寻找顺序依次为用户主目录、/usr/local/etc、/etc,所以只要在这三个目录中生成一个MiniGUI.cfg即可。因为MiniGUI默认的显示模式为1024×768-16bpp,而我们需要的显示模式是800×600-8bpp,所以要修改MiniGUI.cfg的[fbcon]段:defaultmode=800x600-8bpp25.3FPGA与ARM接口设计FPGA与ARM的接口设计是本系统的重点和难点。如何才能将FPGA采集到的数据用最快的速度传送到ARM部分的内存中,是一个需要解决的问题。同时,针对FPGA采集到的数据,ARM需要做一定的处理,处理完以后需实时显示到屏幕上。上面讲到的两个难点,这一节将做仔细分析,给出解决方案。25.3.1硬件连接FPGA和ARM之间的接口设计是本系统的关键。因为ARM需要接收FPGA预处理后的实时图像,传输速度要求很高,必须在ARM的众多接口中挑选出最合适的一种与FPGA相连。25.3.2FPGA驱动程序设计每一个设备的驱动程序都提供了固定的入口点以便应用程序对该设备进行存取操作。这些入口点包括几个数据结构,分别是file_operation、inode和file。其中file_operation(文件操作)是驱动程序设计的重点,这里对FPGA驱动程序的file_operation做一个分析,它主要包括open、release和mmap三个命令。staticstruct
file_operations
fpga_ctl_fops={open: fpga_open,release: fpga_release,mmap: fpga_mmap,};25.4显示芯片的连接与控制嵌入式超声对显示的要求很高,所以在系统设计的时候考虑一款独立的显示芯片,来解决这个问题。独立的显示芯片和ARM连接以后,必然需要一个驱动程序。这一节在分析选择独立显示芯片的基础上,给出了显示芯片的驱动程序设计方法。25.4.1选择SM501的原因ARM输出的超声图像的分辨率大小是512×512,加上图像周围的字符界面,最终的图形界面分辨率至少是800×600。同时超声图像必须达到256个灰度级,那就必须采用24bpp的液晶屏。而现在的高分辨率液晶色深以16/18bpp为主,24bpp很难采购。考虑到将来产品量产不能受到原材料的限制,所以显示终端必须包括VGA和LCD两种接口。25.4.2SM501驱动程序设计Linux下的显示驱动就是指帧缓冲区的驱动。帧缓冲区是出现在Linux2.2.xx及以后版本内核当中的一种驱动程序接口,这种接口将显示设备抽象为帧缓冲区设备区。帧缓冲区为图像硬件设备提供了一种抽象化处理,它代表了一些视频硬件设备,允许应用软件通过定义明确的界面来访问图像硬件设备。这样软件无须了解任何涉及硬件底层驱动的东西(如硬件寄存器)。它允许上层应用程序在图形模式下直接对显示缓冲区进行读写和I/O控制等操作。1.编写初始化函数初始化函数首先初始化SM501,通过写寄存器设置显示模式和颜色数,然后分配显示缓冲区。在Linux中可以用kmalloc()函数分配一段连续的空间。缓冲区大小为:点阵行数×点阵列数×用于表示一个像素的比特数/8。缓冲区分配在一个16MB的SDRAM中,起始地址保存在SM501控制寄存器中。采用的显示方式为800×600,8位灰度,那么需要分配的显示缓冲区为800×600×1=480KB。最后是初始化一个fb_info结构,填充其中的成员变量,并调用register_framebuffer(&fb_info),将fb_info登记入内核。2.编写成员函数
编写结构fb_info中函数指针fb_ops对应的成员函数,对于本系统,只需要下列三个函数就可以了。struct
fb_ops{……int(*fb_get_fix)(struct
fb_fix_screeninfo*fix,intcon,struct
fb_info*info);int(*fb_get_var)(struct
fb_var_screeninfo*var,intcon,struct
fb_info*info);int(*fb_set_var)(struct
fb_var_screeninfo*var,intcon,struct
fb_info*info);…}25.5超声动态图像的实时显示从FPGA得到的图像数据经过处理以后,存放在了内存中。而屏幕上的图像是从显存中取出来的。从内存到显存有一个传输过程,这个过程还实现了图像的动态显示、坐标变换和灰度插值。25.5.1图像动态显示正如上面提到的,Linux抽象出Framebuffer这个设备来供用户态进程实现直接写屏。所以我们可以把Framebuffer看成一块内存,既可以向这块内存中写入数据,也可以从这块内存中读取数据。25.5.2坐标转换和灰度插值坐标转换的原理是这样的:因为超声采集的回波数据点,在空间排列上是扇形分布的,也就是呈极坐标分布,只有深度和夹角的概念,而显示器像素则是以点阵排列的,是直角坐标分布,坐标转换的目标就是解决怎样才使得两者的转化更合理、逼真。灰度插值也就是超声图像重建的方法有许多种。最简单的是最近邻插值,也叫零阶插值。最近邻插值就是将离(,)点最近的像素的灰度值作为(,)点的灰度值赋给原图(x,y)处像素。这种方法的缺点是一个区域内的多个像素点被填充同一个值,使得图像上出现亮斑,给诊断带来不便。样条插值是精度较高的插值方法,但它的缺点是计算量较大。25.6图形界面的结构嵌入式超声的图形界面要求简洁,友好,操作简单方便。嵌入式Linux的图形界面现在有很多类型,如何从中选择出一个合适的来用作本系统的图形界面,以及如何实现该界面是本节的主要内容。25.6.1需求分析超声诊断仪的操作过程如图25-9所示。开机后,系统首先自动进入预置的检查模式。按『检查模式』键分别进入腹部和心脏的检查程序。25.6.2总体结构应用软件总体上分为三大块:测量模块、动态显示模块和电影回放模块。测量分为常规测量和心脏测量,可以用两个弹出式菜单实现,不同测量模式的测量方法可在自定义控件中实现。25.6.3网络通信25.6.4多线程编程25.7操作界面设计嵌入式超声的操作界面要求布局合理,符合现有超声布局习惯。在参考现有超声界面的基础上,本节给出了如何用MiniGUI实现超声操作界面的方案。25.7.1区域分配如图25-14所示,操作主界面的区域分配如下:中央是超声图像;左上角是医院的图标;上边第一栏从左至右分别是医院名称、检查模式、探头型号和日期;第二栏分别是医生姓名、患者姓名、帧频和时间;界面左边是灰阶条,右边偏上是探头参数和超声图像的显示模式;界面的左下角是体标的位置??25.7.2键盘响应对MiniGUI来说,这些键盘输入,可以通过它的窗口键盘事件来接收。键盘事件有MSG_KEYDOWN(键按下)、MSG_KEYUP(键释放)、MSG_SYSKEYDOWN(系统击键消息,即ALT键)MSG_SYSKEYUP(系统击键消息)等。键盘响应示范代码如下:switch(message){...caseMSG_KEYDOWN:Response_Main_Command(hWnd,wParam);break;}25.7.3控件设计控件是实现某些较为固定功能的子窗口,使用控件可以减轻主程序的设计复杂性。MiniGUI提供了一些系统控件,这里还需要自己设计控件以实现测量功能。以下是设计自定义控件的过程:(1)首先使用WNDCLASS数据结构类型来定义一个控件类型变量,然后设置控件的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 平面直角坐标系的概念课件2025-2026学年人教版七年级数学下册
- 职业病危害申报登记制度
- 服务满意度调查实施方案
- 苹果树轮纹病综合预防技术规范
- 雨水管网排污拦截管理规程
- 电力设备新能源行业市场前景及投资研究报告:全球能源锂电机遇
- AI智能汽车行业投资策略分析报告:小鹏吉利Robotaxi提速看好智能化
- 医学本科人体解剖学试题及解析
- 水肥一体化首部设备安装规范
- 蔗飞虱应急防治技术操作规范
- 2026年及未来5年市场数据中国防静电防潮袋行业发展监测及投资战略咨询报告
- 食品生产供应商管理制度
- 2026黑龙江双鸭山公益性岗位招聘176人备考考试题库附答案解析
- 2025年云南烟草招聘考试真题
- 卫气营血辨证护理
- 2026年山东能源集团招聘笔试习题含答案
- 影子老师陪读合同范本
- 招标档案移交制度
- 2025年榆林神木市信息产业发展集团招聘备考题库(35人)及答案详解(新)
- 商铺消防改造方施工方案
- 森林防灭火知识培训课件
评论
0/150
提交评论