视频解码芯片SAA7113的初始化与控制

2006-08-14 23:39:22来源: 电子设计应用

  引言:
  SAA7113是飞利浦公司视频解码系列芯片的一种,非常具有代表性,在很多视频产品如电视卡、MPEG2、MPEG4中都有应用,熟悉了7113的原理后,对其它系列芯片SAA7114、7115、7118就会很容易理解。SAA7113的主要作用是把输入的模拟视频信号解码成标准的“VPO”数字信号,相当于一种“A/D”器件。7113兼容全球各种视频标准,在我国应用时必须根据我国的视频标准来配置内部的寄存器,即初始化,否则7113就不能按要求输出,可以说对7113进行研发的主要工作就是如何初始化。对7113初始化需要通过I2C总线进行,本文给出用51单片机控制的例子。

  1.SAA7113的基本原理与应用
  SAA7113是一种视频解码芯片,它可以输入4路模拟视频信号,通过内部寄存器的不同配置可以对4路输入进行转换,输入可以为4路CVBS或2路S视频(Y/C)信号,输出8位“VPO”总线,为标准的ITU 656、YUV 4:2:2格式。

  7113兼容PAL、NTSC、SECAM多种制式,可以自动检测场频适用的50或60Hz,可以在PAL、NTSC之间自动切换。7113内部具有一系列寄存器,可以配置为不同的参数,对色度、亮度等的控制都是通过对相应寄存器改写不同的值,寄存器的读写需要通过I2C总线进行。

  7113的模拟与数字部分均采用+3.3V供电,数字I/O接口可兼容+5V,正常工作时功耗0.4W, 空闲时为0.07W。7113需外接24.576MHz晶体,内部具有锁相环(LLC),可输出27MHz的系统时钟。芯片具有上电自动复位功能,另有外部复位管脚(CE),低电平复位,复位以后输出总线变为三态,待复位信号变高后自动恢复,时钟丢失、电源电压降低都会引起芯片的自动复位。7113为QFP44封装
7113的典型应用如下图所示。


  2.SAA7113的寄存器简要介绍
  SAA7113的地址从00H开始,其中14H、18H~1EH、20H~3FH、63H~FFH均为保留地址,没有用到,00H、1FH、60H~62H为只读寄存器,只有以下寄存器可以读写:01H~05H(前端输入通道部分),06H~13H、15H~17H(解码部分),40H~60H(常规分离数据部分)。

  下面列表对7113中的寄存器进行简要说明,其中默认值为芯片复位后的寄存器默认值,设置值为可以适用于我国PAL制式的设置参数,这些参数只供参考,详细信息请参考7113数据手册,有些参数如亮度等可以根据用户的需要适当更改。

  3.SAA7113寄存器的配置方法
  SAA7113的寄存器配置通过I2C总线来进行,遵从I2C总线协议,下面从读、写两个方面来说明操作的格式:

对7113寄存器的“写”操作:

S

Slave address W

ACK-S

Subaddress

ACK-S

Data

ACK-S

P

对7113寄存器的“读”操作:

S

Slave address W

ACK-S

Subaddress

ACK-S

Sr

Slave address R

ACK-S

Data

ACK-m

P


  说明:S:起始位,条件是SCL高电平时SDA有下降沿;
Sr:重复设一个起始位
Slave address W:7113芯片地址+写标志,0100 1010 = 4AH,若RTS0通过3.3K电阻接地,则为48H;
Slave address R:7113芯片地址+写标志,0100 1011 = 4BH,若RTS0通过3.3K电阻接地,则为49H;
ACK-S:7113产生的回应信号;
ACK-m:主机产生的回应信号;
Subaddress:寄存器地址;
P:停止位,条件是SCL高电平时SDA有上升沿;
对多个寄存器操作时,寄存器地址有自动加1功能。

  4.用51单片机对7113初始化和控制
  SAA7113的初始化就是对寄存器配置合适的参数,使其能够有符合要求的输出。寄存器配置通过I2C总线来进行,很多可以控制I2C总线的器件都可以作为主器件对7113进行初始化,这里介绍用51单片机初始化7113的例子。

  51单片机和7113的硬件连接非常简单,只要把单片机的两个I/O口(如P1.0、P1.0)直接和7113的SCL、SDA管脚相连,再加上上拉电阻即可。

  用单片机初始化7113的主要任务是程序的编写,首先要熟悉I2C总线协议,根据I2C总线的原理写出启动、停止、应答信号等的子程序,由子程序再写出发送、接收1个字节的程序,然后根据7113的寄存器操作格式写出读写寄存器的程序,最后根据以上的子程序写出初始化7113的程序段。

  对7113的控制一般是改变色度、亮度等指标以及输出管脚的输出信号,这可以通过修改相应寄存器的值来完成,程序上写出“读写命令”即可。

  下面以程序段的形式给出初始化SAA7113以及读写寄存器的具体例子,以供参考。
SDA        BIT  P1.0
SCL        BIT  P1.1
I2C_ERROR    BIT 00H ;I2C总线数据传输出错标志
DeviceaddressW  EQU 4AH   ;7113器件地址+写
DeviceaddressR  EQU  4BH  ;7113器件地址+读
Subaddress     EQU 4DH  ;7113寄存器地址字节在单片机中的存放地址
DATA_I2C     EQU  50H  ;设置写入或读出数据在单片机中的存放地址

;*************启动**************
I2C_START:   SETB  SDA
         NOP
         SETB  SCL
         NOP
         CLR  SDA
         NOP
         CLR  SCL
         RET
;***************停止**************
I2C_STOP:  CLR SDA
         NOP
       SETB  SCL
       NOP
       SETB  SDA
       NOP
       RET
;************送应答位************
SEND_ACK:   CLR  SCL
        NOP
        CLR  SDA
        NOP
        SETB  SCL
        NOP
        ?NOP
        CLR  SCL
        NOP
        SETB  SDA
        RET
;***********送非应答位***********
SEND_NOACK: SETB  SDA
        NOP
        SETB  SCL
        NOP
        NOP
        CLR  SCL
        NOP
        RET
;***********检查应答位************
CHECK_ACK: NOP
       CLR  SCL
       NOP
       SETB  SDA
       NOP
       SETB  SCL
       NOP
       NOP
       MOV C, SDA
       MOV I2C_ERROR, C
       CLR  SCL
       NOP
       RET
;*******发送1字节数据,待送数据在A中******
I2C_SEND_1BYTE:
       MOV  R0, #8
 SEND100: RLC   A
       MOV  SDA, C
       NOP
       SETB  SCL
       NOP
       NOP
       CLR    SCL
       DJNZ R0, SEND100
        RET
;*******接收1字节数据,接收数据放在A中*****
I2C_RECEIVE_1BYTE:
        MOV  R0,  #8
  RECV100: SETB  SDA
        NOP
        SETB  SCL
        NOP
        NOP
        NOP
        MOV C,  SDA
        CLR  SCL
        RLC  A
        DJNZ  R0, RECV100
        RET
;*******通过I2C总线向某一寄存器写入一个字节数据*********
I2C_WRITE:  ACALL  I2C_START      ;发启动信号
      MOV   A, # DeviceaddressW ;调7113地址+写
      ACALL  I2C_SEND_1BYTE  ;发送7113地址及“写”命令
      ACALL  CHECK_ACK     ;检查7113的应答信号
      JNB   I2C_ERROR, WR200  ;应答正确,继续
WR100:  ACALL  I2C_STOP       ;应答不对,返回
      RET
WR200:  MOV   A, Subaddress    ;调寄存器地址
      ACALL  I2C_SEND_1BYTE  ;发送寄存器地址
      ACALL  CHECK_ACK     ;检查7113的应答信号
      JB   I2C_ERROR, WR100  ;应答不对,返回
      MOV   A, DATA_I2C    ;调准备写入的数据
      ACALL  I2C_SEND_1BYTE   ;发送数据字节
      ACALL  CHECK_ACK
      JB  I2C_ERROR, WR100
      ACALL I2C_STOP      ;发停止信号
      RET
;*******通过I2C总线读出某一寄存器的数据*********
I2C_READ:  ACALL I2C_START
       MOV  A, # DeviceaddressW ;调7113地址,写入
       ACALL  I2C_SEND_1BYTE
       ACALL  CHECK_ACK
       JNB   I2C_ERROR, RD200
RD100:  ACALL  I2C_STOP
     RET
RD200:  MOV  A, Subaddress      ;调要读的寄存器地址
     ACALL  I2C_SEND_1BYTE  ; 发送寄存器地址字节
     ACALL  CHECK_ACK
     JB    I2C_ERROR, RD100
     ACALL  I2C_START       ;重发起动信号
     MOV  A, # DeviceaddressR  ;调7113地址,读
     ACALL  I2C_SEND_1BYTE
     ACALL  CHECK_ACK
     JB    I2C_ERROR, RD100
     ACALL  I2C_RECEIVE_1BYTE ;接收读出的数据
     MOV  DATA_I2C,A     ;读出数据转存
     ACALL  SEND_NOACK     ;发送非应答位
     ACALL  I2C_STOP       ;停止
     RET
;***************初始化7113,配置各寄存器************************
INIT_SAA7113:   MOV DPTR, #SAA7113_Subaddress
        MOV R7, #28
INIT100:    MOV A, #0
        MOV C A, @A+DPTR
        MOV Subaddress,  A  ;调寄存器地址
        MOV A,#28
        MOVC  A, @A+DPTR
        MOV DATA_I2C, A   ;调寄存器配置数据
        INC  DPTR
        ACALL I2C_WRITE  ;配置1个寄存器
        JB I2C_ERROR, INIT200
        DJNZ R7,INIT100
INIT200:    RET
;***************SAA7113寄存器初始化配置数据**********************
SAA7113_Subaddress:
DB 01H,02H,03H,04H,05H,06H,07H,08H,09H,0AH,0BH,0CH,0DH,0EH
DB 0FH,10H,11H,12H,13H,15H,16H,17H,40H,58H,59H,5AH,5BH,5EH
  ;共28个
I2C_REG_VALUE_AI11:
DB 08H,0C0H,33H,00H,00H,0EBH,0E0H,0B8H,01H,7EH,46H,43H,01H,01H
DB 0FH,00H,0CH,0A7H,00H,00H,00H,00H,02H,00H,54H,07H,80H,00H
;*************对SAA7113某一寄存器的改写与读出*******************
WRITE_READ:   MOV  Subaddress, #0AH  ; 设寄存器地址为0AH
          MOV  DATA_I2C, #88H  ;改寄存器的值为88H
          ACALL I2C_WRITE   ;改写
          ACALL I2C_READ   ;读出

  结语
  SAA7113在很多产品中都可以应用,但其初始化与控制的原理都一样,本文中的程序段经过实际应用可以保证7113正常工作,其寄存器设置参数与控制方法可以被借鉴或直接应用。

  参考文献
1.陈露晨主编. 计算机通信接口技术. 成都:电子科技大学出版社,1999
2.张洪润主编. 单片机应用技术教程. 北京:清华大学出版社,1997
3.SAA7113H Product specification / Data sheet . PHILIPS, 1999

关键字:寄存器  单片机  总线

编辑:汤宏琳 引用地址:http://www.eeworld.com.cn/szds/decoder/200608/128.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
论坛活动 E手掌握
微信扫一扫加关注
论坛活动 E手掌握
芯片资讯 锐利解读
微信扫一扫加关注
芯片资讯 锐利解读
推荐阅读
全部
寄存器
单片机
总线

小广播

独家专题更多

富士通铁电随机存储器FRAM主题展馆
富士通铁电随机存储器FRAM主题展馆
馆内包含了 纵览FRAM、独立FRAM存储器专区、FRAM内置LSI专区三大部分内容。 
走,跟Molex一起去看《中国电子消费品趋势》!
走,跟Molex一起去看《中国电子消费品趋势》!
 
带你走进LED王国——Microchip LED应用专题
带你走进LED王国——Microchip LED应用专题
 

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 电视相关 白色家电 数字家庭 PC互联网 数码影像 维修拆解 综合资讯 其他技术 技术产品 应用设计 论坛

北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2016 EEWORLD.com.cn, Inc. All rights reserved