基于I2C的OSD显示驱动设计与实现

 随着汽车工业的发展,车载导航设备得到了越来越多的应用。现在主流的车载导航设备都集成有 DVD功能,对视频处理提出较高要求。选择高性能平台和高性能视频 处理器对车载导航设备有十分重要的意义。同时,对于音量的可视性控制和DVD控制来说,OSD技术具有很大的优越性,它可以在不影响DVD画面的基础上叠加在屏幕上,降低了主处理器的工作量。 PXA270处理器具有领先的高性能和低功耗功能,宏芯T128D具有强大的视频处理功能,同时集成了两层OSD处理引擎,两者通过I2C 总线 总线

  总线是将信息以一个或多个源部件传送到一个或多个目的部件的一组传输线。通俗的说,就是多个部件间的公共连线,用于在各个部件之间传输信息。人们常常以MHz表示的速度来描述总线频率。[全文]

连接可以大大提高车载导航设备的多媒体处理功能,本文陈述了在两者基础上通过I2C总线连接实现OSD显示驱动的方法。

  1 基本原理

  1.1 OSD显示原理

  OSD(On Screen Display)是屏幕显示技术的一种,用于在显示终端上显示字符、图形和图像。实现的过程为:存储器存储器

  存储器是用来存储程序和数据的部件,有了存储器,计算机才有记忆功能,才能保证正常工作。它根据控制器指定的位置存进和取出信息。 [全文]

(一般为 内存 内存

  内存的正式叫法是内存储器,以此来与外存储器区分开。物理上它安装在计算机内部,通常安装在主板上,所以称为内存。它的作用是供暂时存储处理器需要处理的数据或处理后的结果,可见内存是计算机处理器的工作空间。它是处理器运行的程序和数据必须驻留于其中的一个临时存储区域,是计算机十分重要的部件。[全文]

的一段)的内容与显示终端上的像素一一对应。

  当要输出图文信息时,将字符图标的位图信息送至OSD位图区域的相应位置。OSD位图区域由其头部定义,每个OSD头主要包括OSD显示矩形区域的起始位置、大小及两个分别指向顶场和底场图像数据的指针,还有一个指向下一个OSD位图数据头的指针。由于采用了这种基于指针的OSD数据管理结构,理论上OSD位图数据块的数目不受限制,实际上它要受到内存大小的限制。terawinsT128提供的内存空间为8k*16 b。头部不仅定义了位图区域的尺寸、位置以及颜色信息,而且提供了颜色表更新等功能。字符的颜色设置使用OSD处理单元(LUT)的颜色查找表,也称作调色板。如图1所示,4位的LUT意味着有16种颜色可以选择,并且位图中的每个像素占有存储单元的4位。某个Byte中的低四bit内容与一个像素一一对应,其值为“3”,那么数字“3”所代表的颜色便由色板来决定,然后再驱动OSD屏幕将像素设置为制定颜色。OSD中的2个像素对应1 B,所以一行显示内容所占的存储空间为320/2=160 B,设pOSDBuffer指向OSD对应存储空间的首地址,为了将OSD上坐标(x,y)的像素设置值为PixelValue(值的范围为0x00~0x0f),即改变该像素的颜色,则需要先确定坐标(x,y)像素对应的字节存储空间地址为:


  1.2 I2C总线通信原理

  I2C(Inter-Integrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器微控制器

  一个微控制器,(也称作微处理器或MCU)就是一个小型的计算机,它由一系列简单的电路和一些支持CPU作用的简单模块组成,如晶体振荡器,定时器,看门狗,串行和模拟I / O口等等。芯片里包括非闪烁存储器和OTP ROM 用来存储程序,以及一个很小的读写程序。[全文]

及其外围设备。I2C总线是由 数据线 数据线

  数据线就是连接移动设备和电脑达到传送铃声、图片等数字类信息文件的通路工具。现在随着电子行业日新月异的发展,数据线已经成为了我们生活中不可获缺的部分。 [全文]

SDA和时钟SCL构成的串行总线,可发送和接收数据。各种被控制 电路均并联在这条总线上,每个电路和模块都有惟一的地址。 CPU CPU

  CPU也称为中央处理器,是电子计算机的主要设备之一。其功能主要是解释计算机指令以及处理计算机软件中的数据。所谓的计算机的可编程性主要是指对CPU的编程。CPU是计算机中的核心配件,只有火柴盒那么大,几十张纸那么厚,但它却是一台计算机的运算核心和控制核心。计算机中所有操作都由CPU负责读取指令,对指令译码并执行指令的核心部件。CPU、内部存储器和输入/输出设备是电子计算机的三大核心部件。[全文]

会发出地址码用来选址,即接通需要控制的电路。所以,各 控制电路虽然挂在同一条总线上,却彼此独立,互不相关。

  I2C总线定义了严格的传输信号来完成一次传输。如图2所示,SCL为高电平时,SDA由高电平向低电平跳变,这是开始信号,开始传送数据。SCL为低电平时,SDA由低电平向高电平跳变,结束传送数据。


  注意:SDA线上的数据状态仅在SCL为低电平的期间才能改变,SCL为高电平的期间,SDA状态的改变会被识别为起始和停止条件。接收数据的IC在接收到8 b数据后,向发送数据的IC发出特定的低电平脉冲,表示已收到数据。CPU向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU接收到应答信号后,根据实际情况做出是否继续传递信号的判断。若未收到应答信号,则判断为受控单元出现故障。

  2 具体实现

  2.1 接口电路

  如图3所示,PXA270芯片通过SCL和SDA两根线(I2C)向T128D发送指令,通知其显示OSD或者擦除OSD画面。在本论文使用的方法里,是由PXA270通过I2C向T128D写寄存器,将读OSD符号的首地址传输给T128D。PXA270要显示的RGB或者YPrBr信号也连接到T128D上,通过LVSYNC垂直同步信号和LYSYNC横向同步信号实现同步。通过T128D的处理,将DVD的YPrBr信号和PXA270的RGB565信号处理为模拟RGB信号,再连接LCDLCD

  LCD(Liquid Crystal Display),即液晶显示屏。LCD是平面超薄的显示设备,它由一定数量的彩色或黑白像素组成,放置于光源或者反射面前方。液晶显示器功耗很低,因此倍受工程师青睐,适用于使用电池的电子设备。它的主要原理是以电流刺激液晶分子产生点、线、面配合背部灯管构成画面。单色的LCD已经基本退出市场,彩色LCD主要又分为 STN 和 TFT 两种,其中TFT(Thin Film Transistor)LCD,又称为主动式电晶薄膜晶体管液晶显示屏,也就是被很多人俗称的真彩液晶显示屏;DSTN(Dual-ScnTwistedNematic)LCD,即双扫瞄液晶显示屏。[全文]

屏,由LCD屏显示出来。


  2.2 软件实现框架

  本文的OSD驱动实现使用流接口驱动,OSD流接口驱动的框架如图4所示。该驱动在系统启动时或者启动后的任何时候由设备管理器动态加载。以DLL动态链接库的形式存在,系统加载它们后,这些驱动程序以用户态的角色运行。这个OSD流驱动通过文件操作API来从设备管理器和应用程序获得命令。流接口驱动有一套标准的接口,比如XXX_Init,XXX_Open,XXX_PowerUp,XXX_IOControl,XXX_Write等。对于I/O设备尤其是数据流设备来说是非常合适的,操作接口和文件系统API十分类似,比如ReadFile,IO_Control等。应用程序可以和流接口驱动进行交互,并且可以把流接口驱动当作文件来操作。


  本文着重要提到的流接口是OSD_Init,OSD_IOControl,OSD_write。OSD_Init在加载驱动时通知设备管理器在为设备初始化时分配资源。OSD_IOControl是文件系统发送I/O控制指令的接口。OSDWrite是文件系统写数据到T128D的接口。在本文中OSD_Write不进行具体的写操作,只是将写命令压人FIFO队列。

  2.3 具体操作

  2.3.1 I2C总线的通信流程

  由于I2C总线上挂的设备很多,可能会造成两个设备同时占用I2C总线的情况,这样系统会错乱。为了避免这种情况,针对一次读写操作,考虑到其不可打断性以防止数据的破坏,采用Mutex互斥锁。即每次只允许一个读写操作占用I2C总线。在一次读写操作开始之前,等待互斥锁,直到读写操作完毕,释放互斥锁。这样当在一次读写没有完成之前,其余设备无法占用I2C总线,而只能等待。本驱动申请互斥锁的流程见图5。

  2.3.2  初始化和卸载

  T128设备的初始化,主要是首先映射GPIO和T128相关寄存器到虚拟地址空间,然后检测I2C总线驱动有没有初始化,创建互斥体,并建立一个写线程OsdWriteProc(),同时建立一个OSD写命令非空事件g_hevOsdQueueEmpty这样检测到非空事件时就可以调用OSD写进程。初始化设备失败或者设备卸载的时候调用设备卸载函数,卸载时要释放虚拟GPIO寄存器的空间,调用I2C的卸载函数,并关闭互斥体。

  2.3.3  OSD写入流程

  实践中发现在写OSD时需要停止T128 MCUMCU

  MCU Microcontroller(微控制器)又可简称MCU 或μ C,也有人称为单芯片微控制器(Single Chip Microcontroller),将ROM、RAM、 CPU、I/O 集合在同一个芯片中,为不同的应用场合做不同组合控制.微控制器在经过这几年不断地研究,发展,历经4 位,8 位, 到现在的16 位及32 位,甚至64 位.经过20多年的发展,其成本越来越低,而性能越来越强大,这使其应用已经无处不在,遍及各个领域。[全文]

,写完后恢复其运行,否则OSD会错乱。如果要停止T128MCU时,它正在切换视频、检测视频信号,操作未完成时被停掉,则 液晶屏 液晶屏

  液晶屏是由LED液晶为主要材料制作的显示器。而液晶是一种高分子材料,因为其特殊的物理、化学、光学特性,20世纪中叶开始被广泛应用在轻薄型的显示技术上。 [全文]

显示会错乱,图像分成几个部分。而上层应用的写OSD请求不能丢弃,否则上层的状态又会错乱,该隐藏的未隐藏,该显示的没显示。因此需要设计一种机制,既保证上层的写OSD操作不丢弃,又不与T128 MCU冲突。

  如图5所示,设计一个缓冲队列,接收到上传人的OSD数据压入队列。OSD驱动留给上层的Write接口,不负责实际的写操作,将数据压入队列(此时会激活队列非空事件)后立即返回。创建一个OSD写线程,等待缓冲队列非空事件激活后,查询T128 MCU状态,待其空闲后,获取关键代码段,执行写操作,写完后退出关键代码段,进入下一轮循环。

  3 性能分析

  T128通过3根主线跟CPU通信,由T128处理从DVD和PXA270来的视频信号,这样OSD就可以在各个源的信号上叠加。由于T128处理了很大一部分视频信号,降低了CPU的负担,同时也圆满解决了OSD在DVD信号上的叠加问题。由于I2C的多主控特点,不会影响挂在I2C上的其他外设的工作和性能。

  4 结语

  本文介绍了基于PXA270处理器和Windows CE5.0操作系统上的OSD驱动的设计和实现。目前已经在本平台上稳定运行,具有很好的OSD处理能力。同时,鉴于T128强大的处理功能,该驱动还可以优化和拓展,比如可以利用T128实现车载平台机构的翻转。



  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值