關 閉

新聞中心

EEPW首頁 > 工控自動化 > 設計應用 > 用虛擬I2C總線技術實現SAA7111的初始化

用虛擬I2C總線技術實現SAA7111的初始化

作者: 時間:2005-05-31 來源:網絡 收藏

摘要:介紹了的特點,描述了用單片機(C51)的普通I/O口以及對DSP(TMS320VC5402)的McBSP口和HPI-8口模擬接口的設計方案,最后給出了對進行化的方法。

關鍵詞:;;DSP;I2C總線

SAA7111是Philips半導體公司生產的一種視頻輸入處理器(VIP),在視頻采集系統(tǒng)中,通常需要諸如SAA7111之類的視頻解碼器作為模擬視頻前端,而視頻解碼器的化主要通過I2C總線接口來完成。然而,目前的單片機和DSP器件大多都不帶有I2C總線接口,為此,本文提出了用總線來模擬I2C總線功能,利用DSP的多功能I/O口和單片機的普通I/O口模擬I2C總線接口設計,從而DSP和單片機對SAA7111的化與控制的新方法。

1 虛擬I2C總線技術

1.1 多主方式下的I2C總線虛擬

I2C總線是Philips公司推出的一種連接IC器件的二線制總線,它既可以用于構成多主系統(tǒng),又可工作在單主方式下。因為多主方式下會出現多主競爭的復雜狀態(tài),此時如果系統(tǒng)中沒有帶I2C總線接口的主控制器,那么要構成多主系統(tǒng)的虛擬I2C總線,就必須在虛擬I2C總線中解決多主競爭狀態(tài),而這幾乎是不可能的,鑒于此,多主I2C總線系統(tǒng)必須使用帶I2C總線接口的控制器。

1.2 單主方式下的I2C總線虛擬

當I2C總線中只有一個主器件時,I2C總線系統(tǒng)的工作方式稱為單主方式。在單主方式下,由于I2C總線上只有一個主器件成為主節(jié)點,因此,該主器件會永遠占據總線,而不會出現總線競爭,此時的主節(jié)點也不必有自己的節(jié)點地址。在這種情況下,主器件若沒有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 ;鉗定總線,開始發(fā)送數據

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口?,F以發(fā)送器為例,當SPCR2的XRST=0、PCR的XIOEN=1時,串口發(fā)送器無效,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

子區(qū)數據存儲器

#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狀態(tài)寄存器(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用來描述芯片的狀態(tài)。02H~12H是可讀寫寄存器,其中02H~05H是模擬輸入控制寄存器,02H用于設置模擬視頻信號輸入方式(共8種),03H~05H用于設置增益控制方式, 06H~12H主要用于設置解碼方式,通過配置這些寄存器可以設置行同步信號的開始和結束位置,并可確定亮度、色度、飽和度的大小以及輸出圖像數據信號的格式。 01H、13H~19H、1DH~1EH寄存器保留使用。需要注意的是,在讀00H寄存器前,必須將它初始化為0。在對多個連續(xù)的寄存器進行操作時,寄存器地址有自動加1功能。內部寄存器控制位的功能含義詳見參考文獻。

可以采用上面任何一種方法來模擬I2C總線接口,只是具體的編程方法應視不同的控制器而異。但軟件編程具有相同之處,首先必須根據I2C總線的原理寫出啟動、結束、發(fā)送應答信號及讀、寫一個字節(jié)的程序,然后根據SAA7111的寄存器操作格式寫出讀、寫寄存器的程序,最后根據以上子程序寫出初始化SAA7111的程序段。SAA7111的初始化流程如圖4所示。

以單片機為例,硬件連接見前文圖1所示,其中IICSA是SAA7111的讀寫控制位,IICSA=0表示SAA7111的寫地址為48H。這里把SAA7111初始化設定為:一路模擬視頻信號輸入(AI12)、自動增益控制、625行50Hz PAL制式、YUV 422 16位數字視頻信號輸出、設置默認的圖象對比度、亮度及飽和度。相應的寄存器初始化值如表2所列。下面是向SAA7111的19個連續(xù)的子地址寄存器(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、發(fā)送數據緩沖區(qū)DBUF、發(fā)送字節(jié)數19。

WNBYTE:MOV R3,19 ;發(fā)送字節(jié)數19送入R3

LCALL START ;調用啟動子程序

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

LCALL WBYTE ;調用寫一個字節(jié)子程序

LCALL CHECK ;調用檢查應答位子程序

JB F0,NEXT0 ;有應答,轉到NEXT0,其

中F0為應答標志位,F0=1

表示有應答

AJMP WNBYTE ;無應答,重新發(fā)送

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

LCALL WBYTE

LCALL CHECK

JB F0,NEXT1

AJMP START

MOV R2,#DBUF ;發(fā)送數據緩沖區(qū)首地址

送入R2

NEXT1:MOV A, @R2 ;發(fā)送數據緩沖區(qū)數據送

入A

LCALL WBYTE

LCALL CHECK

JNB F0,WNBYTE ;未應答,重新發(fā)送

INC R2

DJNZ R3,NEXT1 ;發(fā)送完否?未完,繼續(xù)發(fā)送

EXIT: LCALL STOP ;發(fā)送完畢?調用結束子程序

RET

5 結束語

對一個典型的以DSP為核心處理器的視頻采集系統(tǒng)而言,用單片機普通I/O口模擬I2C總線接口的編程比較簡單,操作也很方便,但是相應的會增加設計成本,因為系統(tǒng)要額外的增加一片單片機。而用DSP的McBSP口或者HPI-8口模擬I2C總線接口,雖然不必考慮成本問題,但是必須要禁用McBSP或者HPI-8的功能,這對系統(tǒng)中DSP功能的擴展來說是不利的。



評論


相關推薦

技術專區(qū)

關閉