saa7113

saa7113

SAA7113是飛利浦公司視頻解碼系列晶片的一種,非常具有代表性,在很多視頻產品如電視卡、MPEG2、MPEG4中都有套用,熟悉了7113的原理後,對其它系列晶片SAA7114、7115、7118就會很容易理解。SAA7113的主要作用是把輸入的模擬視頻信號解碼成標準的“VPO”數位訊號,相當於一種“A/D”器件。7113兼容全球各種視頻標準,在我國套用時必須根據我國的視頻標準來配置內部的暫存器,即初始化,否則7113就不能按要求輸出,可以說對7113進行研發的主要工作就是如何初始化。對7113初始化需要通過I2C匯流排進行,本文給出用51單片機控制的例子。

基本介紹

  • 中文名:saa7113
  • 出自:飛利浦公司
  • 本質:一種視頻解碼晶片
  • 套用電視卡、MPEG2、MPEG4
原理與套用,暫存器,配置方法,初始化和控制,

原理與套用

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的典型套用如下圖所示。

暫存器

SAA7113的地址從00H開始,其中14H、18H~1EH、20H~3FH、63H~FFH均為保留地址,沒有用到,00H、1FH、60H~62H為唯讀暫存器,只有以下暫存器可以讀寫:01H~05H(前端輸入通道部分),06H~13H、15H~17H(解碼部分),40H~60H(常規分離數據部分)。
下面列表對7113中的暫存器進行簡要說明,其中默認值為晶片復位後的暫存器默認值,設定值為可以適用於我國PAL制式的設定參數,這些參數只供參考,詳細信息請參考7113數據手冊,有些參數如亮度等可以根據用戶的需要適當更改。

配置方法

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功能。

初始化和控制

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正常工作,其暫存器設定參數與控制方法可以被借鑑或直接套用。

相關詞條

熱門詞條

聯絡我們