0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于SMP8654芯片和嵌入式Linux实现智能导诊统的设计

牵手一起梦 来源:单片机与嵌入式系统应用 作者:黄伟,杨习伟 2021-05-05 14:24 次阅读

过研究基于MIPS架构的SMP8654芯片硬件架构,并且利用芯片内部的图形加速引擎GFX的方式实现了具有高清视频显示和图片文字处理功能的播放器。系统以嵌入式Linux和MiniGUI为平台设计了智能导诊统,提高了医院的导诊就医的服务效率。智能导诊系统能够播放医院相关的健康宣传资料、专家排班信息

MIPS微处理器是指无内部互锁流水级的处理器,它是由斯坦福大学的Hennessy教授领导的研究小组研制出来的 。MIPS微处理器采用RISC(Reduced][nstructionSet Computer)的设计原则,只支持有限的机器指令以及简单的算术指令,通过提供大量的内部寄存器减少内存访问次数。MIPS有32个通用寄存器,每个寄存器拥有32位的地址空间 。系统通过研究基于MIPS架构的SMP8654芯片,设计和实现了高清播放器的视频播放以及图片字体显示功能。SMP8654解决方案是Sigma公司依据MIPS设计公司指导的全新设计方案,是Sigma公司专为满足高清视频播放应用需求而设计的全新芯片。和

基于ARM 架构的低端芯片相比,SMP8654的视频处理能力更加优越。

1 基于SMP8654芯片的高清播放器

1.1 SMP8654硬件介绍

SMP8654芯片的内部,有一个MIPS 24kf系列的主CPU芯片,工作频率为500 MHz。在主CPU芯片的内部,具有1个32 KB的指令Cache和1个32 KB的数据Cache、2个可编程计时器以及3个独立的中断控制器和2路UART(Universal Asynchronous Receiver/Transmitter)。主CPU 内部采用双总线结构,G—bus是主总线,CPU通过此总线访问外部功能单元的各状态寄存器,而对主CPU芯片内部的中断控制器、计时器等的访问是通过将L—bus映射到G—Bus上的方式进行的。主CPU 内部有一个高效的乘除运算单元(Multip1y/Divide Unit)及浮点数运算单元(FPU),还有一个增强的JTAG调试模

块,用于调试应用程序及内核代码 。

SMP8654芯片内部有一个IPU(Interrupt ProcessingUnit)。这个MIPS 24kf系列的32位处理器专门处理那些需要低延时的应用需求。它主要处理从视频处理子系统(Video Processing Subsystem)所产生的中断。它的时钟频率为333 MHz,而且还有16 KB的指令Cache和16KB数据Cache。

SMP8654芯片包含两个DDR-DRAM 控制器,每一个控制都支持高达512 MB的DDR2内存,这些外部存储器可以为音频、视频以及数据提供缓冲区,并且能存放硬件模块的临时数据。

1.2 SMP8654的视频及音频处理

1.2.1 视频解码子系统

SMP8654的视频解码子系统(Video Decoder Subsystern)可以解码HDSMPTE、H.264、HD WMV9、AVS、MPEG1、MPEG2等视频格式的视频文件。SMP8654的视频解码系统执行特定解码算法,它是一种基于处理器和电路逻辑方式的混合架构。能同时解码的视频文件数目是由视频的格式以及所要呈现的分辨率决定的。SMP8654可以支持包括IPTV、AVCHD、MSTV 的视频解码要求。视频处理引擎是一个16位的RISC处理器,视频解压算法的密集计算部分是由此部分处理的。

1.2.2 视频处理子系统

视频处理子系统(Video Processing Subsystem)从内存中检索图形和视频图像,将这些图像混合并且缩放至某个显示器所要求的分辨率并且将其呈现出来。视频处理子系统可以控制颜色、分辨率以及色彩饱和度,并且能处理视频数据转换,选择视频的输出模式(模拟信号的输出模式包括RGBYPbPr)。视频处理子系统还有一个2D图形加速功能模块。智能导诊系统利用此GFX引擎实现了文字和图片的高清显示功能。

1.2.3 音频处理子系统

SMP8654芯片的集成音频处理子系统(Audio Processing Subsystem)是一个为用户专门设计的32位数字信号处理器,音频的解码和操作是由这个专用的DSP处理的。这个DSP工作在333 MHz的时钟频率下,指令和数据是分开存储的,DSP通过系统总线取得指令,通过数据总线获取需要解码的音频数据。和基于ARM 架构的处理器一样,它有一个32位的指令系统,同时与之对应了一个16位的指令集,通过Load/Store从内存装载数据到DSP的相关寄存器中进行处理。

1.2.4 高清播放机硬件架构

高清播放机硬件架构如图1所示。高清播放器实现的功能主要包括视频处理以及图片文字显示。硬件架构中的重要部分包括视频解码子系统、视频处理子系统、音频处理子系统。这里的HDD表示可选的硬盘,通过内部的SATA接口控制。提供对USB2.0协议支持以及802.11n协议的支持,也就是说播放器可以从网络中读取各种视频资源,从硬盘或者是USB等移动盘中获得数据。视频处理子系统中的GFX代表的是图形加速引擎,通过Sigma公司提供的SDK可以很容易地操作这些硬件,实现硬件加速功能。在智能导诊系统的软件部分,介绍了如何利用硬件特性加速文字和图片的绘制过程。在智能导诊系统中,医院HIS系统中的病人挂号信息通过TCP/IP传递到此硬件播放器,然后再由硬件播放器处理,将病人信息排队到相关队列中,这样病人就可以在专门的等候区休息等候了。

2 基于嵌入式Linux和MiniGUI的主控程序

2.1 嵌入式Linux

Linux是一个完全免费的开源操作系统,内核可以被裁剪到134 KB左右。Linux是一个能够适应多种CPU和硬件平台的操作系统,裁剪之后的Linux系统用于这些设备中执行资源管理、任务调度、存储空间分配等任务 。嵌入式应用系统的开发一般可以分为如下几个步骤:交叉编译工具的建立,Bootloader的编译和烧写,编译内核并移植到开发板,文件系统的编译和烧写。交叉编译是嵌入式系统开发中需要用到的一个常见技术,其主要特征是嵌入式设备上的可执行程序通常是在另外一台机器上编译生成的。通常将前者称为目标机器(Target),后者称为主机(Host)。主机拥有的资源丰富很适合在上面编译机器相关的代码,这种技术为软件的不同平台移植创造了便利条件。交叉编译工具配置在主机(Host)上编译及配置环境变量后,就可以用来编译Bootloader、内核和文件系统。Bootloader是一个启动加载Linux内核的固件程序,有点类似于PC机的BIOS程序,在完成硬件初始化以及内存映射等操作之后,通常会将外部存储介质上存放的内核镜像加载到RAM 中,然后跳转到指定的内存位置执行。

2.2 M GUl用户界面

GUI(Graphical User Interface)是指采用图形方式显示的计算机操作用户界面。系统中所要阐述的高清播放机上需要提供人机交互界面,控制诸如视频的暂停、播放、文件更新以及播放机的声音控制和开关机控制等图形界面。智能导诊系统中使用的图形用户界面采用的是MiniGUI。MiniGUI是一个跨平台的面向嵌入式系统的轻量级图形用户界面支持系统,可在Linux/ptClinux、eCos、

“c/os—II、VxWorks、pSOS、ThreadX 等操作系统以及Win32平台上运行,广泛应用于手持信息终端、机顶盒、工业控制系统、便携式多媒体播放器机等产品和领域 。

3 播放机软件系统设计

3.1 智能导诊系统的软件架构

sMP8654为应用开发提供分层服务架构,软件系统设计主要根据SMP8654分层服务模型,找出最优化的设计方案。智能导诊通过研究DCC 的控制逻辑,及Sigma公司的SDK文档,设计出了如图2所示的SMP8654高清播放机的软件系统架构。智能导诊系统首先对硬件平台初始化,接着初始化有线或者无线网络(这部分主要作用是网络接口卡初始化操作,日志部分初始化是跟踪和调试应用程序的重要组成部分);接着创建MiniGUI主窗口,最后进入消息循环。

当MiniGUI接收到MSG_CLOSE消息时,由HWND— DESKTOP向主窗El发送退出消息,至此程序结束,播放机被关闭;当播放机接收到图片显示命令时,将命令消息存人到消息队列中,这里要创建消息队列是因为MiniGUI在接收到用户的各种不同命令时,都会将命令解析并且存入到任务队列中,由任务派发器将任务发送到不同模块处理。MiniGUI的主程序会根据用户选择的视频及音频文件,选择将消息发送到视频解码进程处理,当用户选择打开某个高清的图片时,消息队列中会保留图片大小、图片格式、图片的显示时间等控制信息。这里要使用任务队列的原因其实很简单,分离出播放器的一个个任务,让不同的软件服务模块处理。如果要播放视频,调度程序会将任务队列中的视频播放任务派发给视频解码进程处理。如果要使用GFX引擎高效率绘制图片,则任务被分派到高清图片处理进程处理。

智能导诊系统服务进程主要负责从医院HIS信息系统的接口函数中获得当前病人的挂号信息,并且通过TCP发送到高清播放机上,最后通过MiniGUI的Draw—Text函数将相关病人信息以列表的方式显示在预先定义的排队队列中。这里的视频解码进程是独立的进程,主控程序和此进程的通信是通过Linux的消息队列机制实现的。消息队列是一种内核标示,两个进程之间的交互是通过调用msgsnd和msgrecv这样的函数实现的,只要两个进程的消息队列标识是一致的,进程之间就可以交互 ]。当MiniGUI接收到退出消息时,会向视频解码进程发送退出消息,让视频解码进程清空所占用的系统资源。

SMP8654分层服务模型如图3所示。最下面的一层是相关硬件,如CPU、视频解码器、音频解码器、并行I/0接口。中间的一层MRUA (Movimiento rectiline unitormemente acelerado)提供了访问这些硬件的抽象接口,另外DCC(Decoding Chain Contro1)是通过访问MRUA的接口实现对视频播放控制、音频解码的操作。最顶层是软件播放器,可以基于DCC实现网络流媒体应用,或者定制自己的软件播放器。

3.2 利用图形加速引擎优化文字和高清图片显示

DCC是为应用程序提供的编程接口,而MRUA面向底层硬件,为上层的DCC提供硬件抽象和功能接口。在深入理解了DCC是如何控制硬件显示文字、处理图片以及播放视频之后,智能导诊系统利用MRUA库函数直接操作硬件特性,加快字体显示、图片处理效率,以及提升视频播放等各方面性能。DCC提供的多个对象为应用程序完成实际的功能提供函数接口,这些对象包括:

① Route。可以将Route理解为某个具体的媒体内容(Content)到硬件视频混合器(Hardware Video Mixer)的数据通道,它只负责把具体的媒体内容传送到硬件视频混合器中。

② Surface。可以将Surface理解为视频对象层(Video Object layer)。视频信息,屏幕显示以及字幕组成了一个完整的Content。在每一个Route对象中,通常会存在相同类型的多个Surface对象。

③ VideoSource。可以将VideoSource理解为一个专为Surface生成图片的生产者,这个生成者可能是一个硬件视频解码器(Hardware MPEG decoder)。

④ AudioMixer。可以将AudioMixer理解为一个类似Route的东西,它代表的也是一个数据通道,只不过它只负责将AudioSource这个音频生产者生成的音频帧信息组合成一个输出。

⑤ AudioSource。可以将AudioSource理解为音频帧的生产者。

⑥ DemuxSource。它是一个可分离流,并且将数据发送到视频、音频解码器的一个对象。当然也可以将它理解为一个生成者,负责将流(stream)数据分离出音频和视频信息,并发送到相关处理单元处理。

如图3所示,流解析器从内存中检索到与文件有关的信息之后,将数据流分解,然后组包成视频解码器以及音频解码器所处理的数据,并且交由DSP和Display Engine这样的设备进行处理。这些都可以由DCC控制,是由MRUA层抽象出的相关硬件功能。只要通过DCC层去控制相关硬件设备,便可以实现图片和文字的高清显示。下面将介绍如何通过DCC去控制GFX引擎实现图片和文字的显示。

GFX在图中没有画出,它是某个具体的图形加速设备。当要播放一个高清的图片或者绘制文字时,通常要经过几个步骤:

RUA 实例初始化,DCC实例初始化,设置图片的显示窗口,初始化GFX 引擎,执行绘制,清空资源并退出。下面以伪码的方式给出其具体实现过程:

int main(int argc,char*argv[])(

创建RUA实例;

创建DCC对象实例;

初始化图片的显示选项;

初始化视频的显示选项;

初始化播放控制选项;

从命令行参数获得欲显示的文件信息以及图片、视频播放控制选项(如果没有就使用默认值)

装载相关硬件单元微码;

创建硬件混合器Mixer;

创建Scaler对象;

//scaler=EMHWL1B MODULE(DispGFXMultiScaler,O);

为当前的Mixer对象创建一个关联Scaler对象的索引

初始化GFX引擎;

设置GFX对象的各通道属性;

开始在GFX上投递绘制请求;

关闭GFX引擎,并依次关闭DCC实例对象,RUA实例对象;

}

结语

智能导诊系统基于MiniGUI和SMP8654的SDK 完成了视频播放、文字图片显示的功能。基MiniGUI的图形及文字绘制函数,如CreateI ogFont、DrawText、LoadBitmap等的使用以及利用与硬件相关的图形加速引擎绘制图片和文件相结合的方式,增加了系统的图形绘制效果,提升了智能导诊系统性能 。

综上所述,系统基于MIPS架构设计实现了高清播放机所要完成的视频播放以及图片文字显示功能。通过研究基于MIPS架构下的高清播放机最终选择了速度比较好的高清播放机芯片SMP8654,使得视频处理更加稳定,图片的加速解码及显示的速度更快。基于此架构的系统,可以扩展到各种信息发布系统中,如医院的信息发布系统、车载娱乐系统,具有很好的应用前景。

责任编辑:gt

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 芯片
    +关注

    关注

    445

    文章

    47476

    浏览量

    407875
  • 嵌入式
    +关注

    关注

    4962

    文章

    18145

    浏览量

    286503
  • Linux
    +关注

    关注

    87

    文章

    10942

    浏览量

    206542
收藏 人收藏

    评论

    相关推荐

    基于嵌入式Linux的蓝牙通信的实现

    基于嵌入式Linux的蓝牙通信的实现
    发表于 08-20 09:35

    什么是嵌入式Linux

    获得了飞速发展。嵌入式Linux(Embedded Linux)是指对标准Linux经过小型化裁剪处理之后,能够固化在容量只有几K或者几M字节的存储器
    发表于 01-23 11:59

    ARM与嵌入式linux入门学习方法

    嵌入式开发,说白了就是硬件和软件相结合嵌入到整机里使整机实现智能化的过程。嵌入式系统知识体系结构如下:基础课主要包括:电路、模拟电子学、数
    发表于 10-11 10:27

    如何去设计嵌入式SMP系统?

    如何去设计嵌入式SMP的硬件系统?如何去设计嵌入式SMP的软件系统?
    发表于 04-27 06:56

    ARM+Linux嵌入式底层内核驱动方向学习总体路线图

    ARM+Linux嵌入式底层内核驱动方向学习总体路线图基础学习Ⅰ---Linux入门 目前嵌入式主要开发环境有 Linux、Wince等;
    发表于 07-20 06:35

    嵌入式linux安装与使用

    嵌入式linux安装与使用!嵌入式Linux开发工具!! gcc make shell嵌入式linux
    发表于 10-27 10:06

    什么是嵌入式linux

    获得了飞速发展。嵌入式Linux(Embedded Linux)是指对标准Linux经过小型化裁剪处理之后,能够固化在容量只有几K或者几M字节的存储器
    发表于 10-27 09:47

    ​​嵌入式Linux是什么

    ​​嵌入式Linux是什么嵌入式Linux跟桌面Linux一样,是一个操作系统。从单片机走过来的童鞋往往习惯于直接控制寄存器,事必躬亲,从零
    发表于 12-15 08:12

    嵌入式Linux C概述

    使用的操作系统,并且可以被移植、裁剪进很多的嵌入式系统中,如ARM处理器的应用系统中就大量采用Linux等。Linux C适用领域有多种,如民用领域:各种消费电子,智能家电,路由器,手
    发表于 12-15 08:32

    嵌入式Linux有什么功能和优点?

      嵌入式对于我们来说已经不陌生了,简单来说就是硬件和软件相结合,嵌入到整机里使整机实现智能化的一个系统。其中Linux是以
    发表于 12-16 07:22

    嵌入式linux安装与使用

    嵌入式linux安装与使用!嵌入式Linux开发工具!! gcc make shell嵌入式linux
    发表于 12-23 06:32

    如何去实现嵌入式LINUX驱动的软件代码呢

    如何对嵌入式LINUX驱动的硬件信息进行配置呢?如何去实现嵌入式LINUX驱动的软件代码呢?
    发表于 12-24 07:31

    嵌入式linux、arm嵌入式操作系统的相关资料分享

    开发工具链异常处理linux内核裁剪与移植GCC命令基本用法系统调用与中断进程间通信接口中断驱动程序引导程序C语言与汇编语言嵌入式操作系统嵌入式系统应用领域嵌入式系统应用领域:只能交通
    发表于 12-27 07:35

    什么是嵌入式Linux

    之有运行程序的能力与作用。在很多智能家电开发,智能产品的研究上有着主导的作用。(对个人、团队开发产品有兴趣的朋友一定要看看嵌入式!) linux
    发表于 10-11 13:47

    LinuxSMP系统上的移植研究

    硬件平台下的启动流程、任务调度策略、任务间同步与互斥、中断处理等问题,结合自主研发嵌入式应用的实际需求,得到解决上述问题的方案,完成嵌入式LinuxSMP系统上的移植,并
    发表于 11-14 16:09 11次下载
    <b class='flag-5'>Linux</b>在<b class='flag-5'>SMP</b>系统上的移植研究