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

最新更新时间:2012-08-01来源: 21ic关键字:I2C  OSD  显示驱动设计 手机看文章 扫描二维码
随时随地手机看文章

随着汽车工业的发展,车载导航设备得到了越来越多的应用。现在主流的车载导航设备都集成有DVD功能,对视频处理提出较高要求。选择高性能平台和高性能视频处理器对车载导航设备有十分重要的意义。同时,对于音量的可视性控制和DVD控制来说,OSD技术具有很大的优越性,它可以在不影响DVD画面的基础上叠加在屏幕上,降低了主处理器的工作量。PXA270处理器具有领先的高性能和低功耗功能,宏芯T128D具有强大的视频处理功能,同时集成了两层OSD处理引擎,两者通过I2C总线连接可以大大提高车载导航设备的多媒体处理功能,本文陈述了在两者基础上通过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公司开发的两线式串行总线,用于连接微控制器及其外围设备。I2C总线是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据。各种被控制电路均并联在这条总线上,每个电路和模块都有惟一的地址。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信号,再连接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 MCU,写完后恢复其运行,否则OSD会错乱。如果要停止T128MCU时,它正在切换视频、检测视频信号,操作未完成时被停掉,则液晶屏显示会错乱,图像分成几个部分。而上层应用的写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实现车载平台机构的翻转。

关键字:I2C  OSD  显示驱动设计 编辑:探路者 引用地址:基于I2C的OSD显示驱动设计与实现

上一篇:科锐提升行业标准,推出170 lm/W原型LED灯泡
下一篇:用白光LED驱动器控制显示屏亮度

推荐阅读最新更新时间:2023-10-17 15:00

STM32CubeMX系列教程9:内部集成电路(I2C)
1.I2C总线简介 I2C(Inter-Integrated Circuit ,内部集成电路)总线是一种由飞利浦Philip公司开发的串行总线。是两条串行的总线,它由一根数据线(SDA)和一根 时钟线(SDL)组成。I2C总线上可以接多个I2C设备,每个器件都有一个唯一的地址识别。同一时间只能有一个主设备,其他为从设备。通常MCU作为主设备控制,外设作为从设备。 2.I2C硬件电路 I2C总线为漏极开路结构(OD),因此它们必须接有上拉电阻,阻值常为 4k7 或 10k ;当总线空闲时,两根线均为高电平。OD门与其它任意数量的OD与OC门成 线与 关系,即当总线上的任一器件输出的低电平,都将使总线的信号变低。
[单片机]
STM32CubeMX系列教程9:内部集成电路(<font color='red'>I2C</font>)
STM8S_010_I2C读写EEPROM(硬件方式)
Ⅰ、写在前面 相信看过前面那篇文章“ 更加深入理解I2C总线、协议及应用 ”的人对I2C都有一定的了解了。那篇文章是针对I2C,使用单片机IO模拟I2C方式实现读写操作。 本文将讲述硬件I2C读写操作,也就是由处理器自身硬件的I2C实现时钟、数据的传输过程。 为方便大家阅读,本文内容已经整理成PDF文件: http://pan.baidu.com/s/1i5uWhJR 作者:strongerHuang 版权所有,未经允许,禁止用于其它商业用途!!! Ⅱ、STM8硬件I2C知识 STM8S的I2C模块不仅可以接收和发送数据,还可以在接收时将数据从串行转换成并行数据,在发送时将数据从并行转换成串行数据。可以开启或禁止
[单片机]
I2C器件接口IP核的CPLD设计
  由于CPLD数字设计结构化的趋势,将出现针对CPLD不同层次的IP(Intellectual Property)核。各个IP核可重复利用,可大大提高设计能力和效率。国外各大公司都推出了专门的IP核,我国也迫切需要发展自己的IP核。本文针对I2C的主方式串行扩展通信的特点,详细给出设计过程和结果。 1 IP核简介   IP核是指:将一些在数字电路中常用但比较复杂的功能块,如FIR滤波器、SDRAM控制器、PCI接口等等设计成可修改参数的模块,让其它用户可以直接调用这些模块,以避免重复劳动。随着CPLD/FPGA的规模越来越大,设计越来越复杂,使用IP核是一个发展趋势。许多公司推荐使用现成的或经过测试的宏功能模块、IP核,用来增强已
[嵌入式]
基于I2C总线的DS1629型智能温度传感器性能特点及应用
DS1629是美国DALLAS公司新推出的一种带实时日历时钟和I2C总线接口的智能 温度传感器 ,可广泛用于温度传感系统、数据记录器、个人计算机、个人数字助理和移动电话等设备中。
[嵌入式]
连接多个相同地址I2C设备的C51程序
本人初学C,曾为这个问题大伤脑筋^_^,就是一个单片机系统有两个以上的相同地址的I2C设备,无法用两个同一对SDA/SCL引脚 #include stc89c51.h #include iic.h sbit scl0=P3^5; sbit sda0 = P3^4; sbit scl1= P3^3; sbit sda1 = P3^2; //这里只写了两个I2C设备,如果需要可以再加上 sbit scl2=xx; sbit sda2=xx; 实际上多个设备的scl脚可以共用 unsigned char iic_delay_time = 8; void scl(devi
[单片机]
STM32的HAL库的 I2C和UART使用函数
void I2C_Write(uint8_t* pBuffer, uint8_t DeviceAddr, uint8_t RegisterAddr,uint16_t NumByteToWrite){ //HAL_I2C_Master_Transmit(&hi2c1, (uint16_t)DeviceAddr, pBuffer, NumByteToWrite, 1000);//1000ms 1s 100K字节s } void I2C_Read(uint8_t* pBuffer, uint8_t DeviceAddr, uint8_t RegisterAddr, uint16_t NumByteToRead){ uint8_
[单片机]
IC Insights:看好OSD组件 销售额估再创历史新高
调研机构《IC Insights》周四 (25 日) 发表研报,指出 2018 年因价格攀升、供应短缺、和新成像应用,使德光电、传感器、和分立器件 (O-S-D) 的总销售额成增长了约 11%,预计将连续 9 年创下合并营收的历史新高。 随着广泛使用的功率晶体管和二极管供应紧张的情况下推高价格,再加上新的光学成像应用进入更多系统内,2018 年 OSD 多元化市场可谓是蓬勃发展。 据《IC Insights》的 OSD 预测更新显示,今年 3 个细分市场的总销售额应达 832 亿美元,预计 OSD 销售额 2019 年增长率为 9%,明年营收应能创下 906 亿美元的 历史新高。  OSD 市场蓬勃发展 / 图:ic insig
[手机便携]
I2C总线实现TMS320VC5509A引导装载设计
1 引言 DSP芯片的Bootloader程序用于上电时将用户程序从外部非易失性、慢速存储器或外部控制器中装载到片内高速RAM中,保证用户程序在DSP内部高速运行,TI公司的C55x系列DSP芯片提供多种装载模式,主要包括HPI引导装载、串行E2ROM引导装载、并行引导装载、串行口引导装载、I2C总线E2ROM引导装载等,通常使用的是并行引导装载模式,该方式引导速度快实现简单,但是体积和功耗也较大,随着串行接口存储设备容量的提高,串行引导方式体积小、功耗低的优势便显现出来了,所以使用ARM的串行接口对DSP进行引导装载,不仅能省去存储芯片,而且利用ARM的ISP功能,可以根据需要改变用户程序,有利于系统的维护和升级。
[嵌入式]
小广播
最新电源管理文章
换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved