首 页文档资料下载资料维修视频包年699元
请登录  |  免费注册
当前位置:精通维修下载 > 文档资料 > 家电技术 > 维修教程知识 > 单片机栏
用虚拟I2C总线技术实现SAA7111的初始化
来源:本站整理  作者:佚名  2005-05-31 21:28:00



    摘要:介绍了虚拟I2C总线技术的特点,描述了用单片机(C51)的普通I/O口以及对DSP(TMS320VC5402)的McBSP口和HPI-8口模拟I2C总线接口的设计方案,最后给出了对SAA7111进行初始化的方法。

    关键词:虚拟I2C总线技术;SAA7111;DSP;I2C总线

SAA7111是Philips半导体公司生产的一种视频输入处理器(VIP),在视频采集系统中,通常需要诸如SAA7111之类的视频解码器作为模拟视频前端,而视频解码器的初始化主要通过I2C总线接口来完成。然而,目前的单片机和DSP器件大多都不带有I2C总线接口,为此,本文提出了用虚拟总线技术来模拟实现I2C总线功能,利用DSP的多功能I/O口和单片机的普通I/O口模拟I2C总线接口设计,从而实现DSP和单片机对SAA7111的初始化与控制的新方法。

1 虚拟I2C总线技术

1.1 多主方式下的I2C总线虚拟

I2C总线是Philips公司推出的一种连接IC器件的二线制总线,它既可以用于构成多主系统,又可工作在单主方式下。因为多主方式下会出现多主竞争的复杂状态,此时如果系统中没有带I2C总线接口的主控制器,那么要构成多主系统的虚拟I2C总线,就必须在虚拟I2C总线中解决多主竞争状态,而这几乎是不可能的,鉴于此,多主I2C总线系统必须使用带I2C总线接口的控制器。

    1.2 单主方式下的I2C总线虚拟

当I2C总线中只有一个主器件时,I2C总线系统的工作方式称为单主方式。在单主方式下,由于I2C总线上只有一个主器件成为主节点,因此,该主器件会永远占据总线,而不会出现总线竞争,此时的主节点也不必有自己的节点地址。在这种情况下,主器件若没有I2C总线接口,就可以用主控制器的I/O口来模拟I2C总线接口。

目前,许多视频、音像电器中都采用了虚拟I2C总线技术。SAA7111的初始化控制操作就工作在单主方式下,因此可以用虚拟I2C总线技术来实现SAA7111的初始化控制。下面分别以单片机和DSP为例来说明虚拟I2C总线技术的实现方法。

2 用单片机普通I/O模拟I2C总线接口

用单片机普通I/O口模拟I2C总线接口时,其硬件配置非常简单,因为单片机的I/O口很多,并且大多I/O口都是双向的,因此可以直接用两个I/O口线作为I2C总线的串行时钟线SCL和串行数据线SDA。图1所示为C51 单片机与SAA7111的硬件连接图。 当硬件配置完成后,根据I2C总线的时序特性可用软件编程来模拟I2C总线接口。图2为I2C总线的起始信号(S),它表示在SCL为高电平期间,数据线SDA由高电平向低电平变化将启动I2C总线。下面是相应的汇编程序。其它子程序可以参考I2C总线时序来实现,这里就不一一给出了。

启动I2C总线:

SETB P1.0 ; SDA=1

SETB P1.1 ; SCL=1

CALL DELAY ;保持数据时间,DELAY

为延迟子程序

CLR P1.0 ; SDA=0

CALL DELAY

CLR P1.1 ;钳定总线,开始发送数据

RET

3 用DSP外围接口模拟I2C总线接口

由于TMS320VC5402只有两个通用的I/O引脚,且都是单向的,而在I2C总线中,SDA必须是双向的,因此必须借助于其它总线接口。

3.1 用McBSP口模拟I2C总线接口

首先,通过配置串口控制寄存器SPCR1和SPCR2以及引脚控制寄存器PCR的禁用McBSP功能,以将McBSP引脚(包括CLKX、CLKR、DX、DR、FSX、FSR、和CLKS)作为通用I/O口。现以发送器为例,当SPCR2的XRST=0、PCR的XIOEN=1时,串口发送器无效,FSX、CLKX用作通用I/O引脚。FSX和CLKX作为通用I/O端口的引脚设置情况如表1所列。以McBSP0为例,也可以从FSX0和CLKX0引出两条线分别表示SDA线和SCL线。

表1 将FXS和CLKX作为通用I/O的设置方法

引脚 FSX数据方向 CLKX数据方向 FSX输出值 CLKX输出值
FSXM CLKXM FSXP CLKXP
0 1 0 1 0 1 0 1
FSX 输入 输出 - - - 1 - -
CLKX - - 输入 输出 - - 0 1

注:“-”表示无影响

图3为I2C总线的结束信号时序,下面是相应的程序:

#define SPSA0 0x0038 //SPSA0指向McBSP0子地址寄存器

#define SPSD0 0x0039 //SPSD0指向McBSP0

子区数据存储器

#define PCR0 ‘0x000E //PCR0代表子地址

0x000E

结束I2C总线:

void stop ? ? ?

*?short *?SPSA0=PCR0; //SPSA0指向子

地址PCR0

*?short *?SPSD0=0x2A02? //初始化PCR0,

令FSX0=0,CLKX=1。即SDA=0,SCL=1

delay? ?; //延时。Delay()为延时子程序

*?short *?SPSD0=0x2A0A; //令FSX0=1,

CLKX=1。即SDA=1,SCL=1

}

3.2 用HPI-8口模拟I2C总线接口

同样,首先必须禁用HPI-8的功能,这可通过设置HPI-8控制寄存器(HPIC)的HPIENA为0来完成。当HPI-8工作在通用I/O端口(GPIO)方式时,通过通用I/O控制寄存器(GPIOCR)和通用I/O状态寄存器(GPIOSR)可以控制GPIO方式下的HPI-8数据引脚。GPIOCR的DIRx(x=0~7)位为低电平表明HDx引脚为输入,高电平表明HDx为输出。 GPIOSR的D/Ox位则反映了引脚HDx的逻辑值,D/Ox为低电平表明HDx输入/输出为0,D/Ox为高电平表明HDx输入/输出为1。因为在GPIO方式下,HDx为双向I/O端口,因此可以任意选择一个HDx(如HD0)作为SDA,再用另外一个HDx(HD1)作为SCL以实现I2C总线接口的模拟。

4 SAA7111的初始化

SAA7111内部有32个寄存器(Subaddress00~1FH),其中22个是可编程的。00H、1A~1CH、1FH是只读寄存器,其中00H描述的是芯片版本信息;1A~1CH是文本信息检测和解码寄存器,一般很少用到;1FH用来描述芯片的状态。02H~12H是可读写寄存器,其中02H~05H是模拟输入控制寄存器,02H用于设置模拟视频信号输入方式(共8种),03H~05H用于设置增益控制方式, 06H~12H主要用于设置解码方式,通过配置这些寄存器可以设置行同步信号的开始和结束位置,并可确定亮度、色度、饱和度的大小以及输出图像数据信号的格式。 01H、13H~19H、1DH~1EH寄存器保留使用。需要注意的是,在读00H寄存器前,必须将它初始化为0。在对多个连续的寄存器进行操作时,寄存器地址有自动加1功能。内部寄存器控制位的功能含义详见参考文献。

可以采用上面任何一种方法来模拟I2C总线接口,只是具体的编程方法应视不同的控制器而异。但软件编程具有相同之处,首先必须根据I2C总线的原理写出启动、结束、发送应答信号及读、写一个字节的程序,然后根据SAA7111的寄存器操作格式写出读、写寄存器的程序,最后根据以上子程序写出初始化SAA7111的程序段。SAA7111的初始化流程如图4所示。

以单片机为例,硬件连接见前文图1所示,其中IICSA是SAA7111的读写控制位,IICSA=0表示SAA7111的写地址为48H。这里把SAA7111初始化设定为:一路模拟视频信号输入(AI12)、自动增益控制、625行50Hz PAL制式、YUV 422 16位数字视频信号输出、设置默认的图象对比度、亮度及饱和度。相应的寄存器初始化值如表2所列。下面是向SAA7111的19个连续的子地址寄存器(00H~12H)写入一组数据的的程序。

表2 寄存器初始化值

SubAddress Data SubAddress Data
00H 00H 01H 00H
02H C1H 03H 33H
04H 00H 05H 00H
06H EBH 07H E0H
08H 88H 09H 01H
0AH 80H 0BH 47H
0CH 40H 0DH 00H
0EH 01H 0FH 00H
10H 40H 11H 1CH
12H 03H    

入口参数:SAA7111写地址48H、子地址00H、发送数据缓冲区DBUF、发送字节数19。

WNBYTE:MOV R3,19 ;发送字节数19送入R3

LCALL START ;调用启动子程序

MOV A,#48H ;SAA7111写地址送入A

LCALL WBYTE ;调用写一个字节子程序

LCALL CHECK ;调用检查应答位子程序

JB F0,NEXT0 ;有应答,转到NEXT0,其

中F0为应答标志位,F0=1

表示有应答

AJMP WNBYTE ;无应答,重新发送

NEXT0:MOV A, 00H ;SAA7111子地址送入A

LCALL WBYTE

LCALL CHECK

JB F0,NEXT1

AJMP START

    MOV R2,#DBUF ;发送数据缓冲区首地址

送入R2

NEXT1:MOV A, @R2 ;发送数据缓冲区数据送

入A

LCALL WBYTE

LCALL CHECK

JNB F0,WNBYTE ;未应答,重新发送

INC R2

DJNZ R3,NEXT1 ;发送完否?未完,继续发送

EXIT: LCALL STOP ;发送完毕?调用结束子程序

RET

5 结束语

对一个典型的以DSP为核心处理器的视频采集系统而言,用单片机普通I/O口模拟I2C总线接口的编程比较简单,操作也很方便,但是相应的会增加设计成本,因为系统要额外的增加一片单片机。而用DSP的McBSP口或者HPI-8口模拟I2C总线接口,虽然不必考虑成本问题,但是必须要禁用McBSP或者HPI-8的功能,这对系统中DSP功能的扩展来说是不利的。

关键词:

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分)

推荐阅读

图文阅读

热门阅读

Copyright © 2007-2017 down.gzweix.Com. All Rights Reserved .
页面执行时间:99,820.31000 毫秒