用虚拟I2C总线技术实现SAA7111的初始化
发布时间:2007/4/23 0:00:00 访问次数:737
关键词:虚拟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
关键词:虚拟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