当前位置:首页 > 电源 > 数字电源
[导读]介绍了虚拟I2C总线技术的特点,描述了用单片机(C51)的普通I/O口以及对DSP(TMS320VC5402)的McBSP口和HPI-8口模拟I2C总线接口的设计方案,最后给出了对SAA7111进行初始化的方法。

    摘要:介绍了虚拟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功能的扩展来说是不利的。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

I2C(Inter-Integrated Circuit)总线是Philips公司推出的一种双向二线制同步串行总线,仅用两根线即可实现器件之间的数据传送。目前很多芯片集成了I2C总线接口,如CYGNAL公司的C805IF...

关键字: I2C总线 引脚功能 时序

连接在总线上的设备与总线的连接电路称为总线接口。

关键字: 总线接口 PCI PC

来源:电子电路设计一、前言I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息。二、I2C总线开发设计需要注意点1、总线容量及驱动能力I2C总线的外围...

关键字: I2C总线

关注星标公众号,不错过精彩内容来源| 网络如果一座只能容一个人来往的独木桥,两端的人都想要过桥,为了不拥挤、阻塞,那我们就得采取有效的办法。比如规定某段时间哪端的人过桥,另一端的人就等着该他过桥的时间段的到来,同时也还可...

关键字: 总线技术

任何一个微处理器都要与一定数量的部件和外围设备连接,但如果将各部件和每一种外围设备都分别用一组线路与CPU直接连接,那么连线将会错综复杂,甚至难以实现。为了简化硬件电路设计、简化系统结构,常用一组线路,配置以适当的接口电...

关键字: 微机 总线技术

01总线容量与驱动能力I2C总线的外围扩展器件都是CMOS器件,总线有足够的电流驱动能力,因此总线上扩展的节点数不由电流负载能力决定,而由电容负载确定。总线上每个实际节点器件的总线接口都有一定的等效电容,等效电容的存在会...

关键字: I2C总线

摘要:随着I2C总线应用的越来越广泛,其电路简单,编程方便,易于系统标准化与维护的优点也日益显现出来。 文章在分析了I2C总线的基本概念和工作原理的基础上,重点介绍了基于Wolfson音频SoC的I2C总线接口的系统结...

关键字: I2C总线 音频 SoC Wolfson

PROCENTEC等行业专家的数据显示,采用基于RS-485现场总线技术(PROFIBUS®)的应用在持续增长,工业以太网(PROFINET)应用也在快速增长。2018年,全球共安装6100万个PROFIBUS现场总线节...

关键字: 总线技术 通信技术

前面我们学习了RTT的ADC设备的使用,文章链接: RT-Thread ADC设备学习笔记 I2C的基本原理之前在公众号就有相应的文章了,很早之前发的,接下来我们来学习RT-Thread I2C总线设备的使用!这是RTT...

关键字: I2C总线 学习笔记 RT-Thread

  1 引言   Profibus是一种国际化、开放式、不依赖于生产商的现场总线标准,广泛应用于工业自动化领 域。Profibus根据应用特点分为Profibus-DP、Profibus

关键字: 总线技术 plc 伺服电机 伺服控制器 profibus-dp bws 伺服传动
关闭
关闭