TMS320C5402在電視數(shù)字傳輸復用器中的應用
關(guān)鍵詞:傳送流 TMS320C5402 復用器
引言
隨著信息技術(shù)的發(fā)展,電視信號的數(shù)字化編碼、數(shù)字化存儲、數(shù)字化處理已經(jīng)越來越廣泛。新開發(fā)的數(shù)字有限電視廣播系統(tǒng)主要包括MPEG-2編碼器、數(shù)字傳輸復用器、數(shù)字調(diào)制器以及機頂盒。復用器是該系統(tǒng)的重要組成部分,完成對多路符合MPEG-2系統(tǒng)層標準ITU-TREC.H.222.1|ISO/IEC13818-1的TS流(Transport Stream)的復用,經(jīng)過64 QAM調(diào)制后,以便在1路6MHx的帶寬中傳送多路數(shù)字化節(jié)目。考慮到處理的實時性,我們使用美國德州儀器公司(TI)的TMS320C5402(簡稱C5402)DSP作為主控芯片。本文首先介紹TS流的結(jié)構(gòu)、C5402芯片、復有器的組成,然后重點介紹該芯片在復用器的應用,最后就利用CCS開發(fā)仿真器一經(jīng)驗介紹。
1 TS流簡介
主要包括分組方法、程序特殊信息(PSI)表以及程序參考時鐘(PCR)的提取。
(1)分組方法
傳送流分組長度固定為188字節(jié),分組由分組首部及有效負載組成,如圖1所示。
(2)PSI
PSI被分成4類表。如表1所示,每個表可被分成1段或多段置于傳送流中。這4類表是:程序關(guān)聯(lián)表PAT(Program Association Table)、程序映射表PMT(Program Map Table)、網(wǎng)絡信表NIT(Network Information Table)、條件訪問表CAT(Conditional Access Table)。這4類表中包含進行多路解調(diào)和顯示程序的必要和足夠的信息。
表1 程序特殊信息
結(jié)構(gòu)名 | 流類型 | 保留的PID# | 描 述 |
程序關(guān)聯(lián)表 | ITU-T Rec.H.222.0| ISO/IEC 13818-1 |
0x00 | 關(guān)聯(lián)程序號與程序映射表PID |
程序映射表 | ITU-T Rec.H.222.0| ISO/IEC 13818-1 |
賦值的 | 說明1個或多個程序組成部分的PID值 |
網(wǎng)絡信息表 | 私用 | 賦值的 | 物理網(wǎng)絡參數(shù):FDM頻率、發(fā)送器號碼等等 |
條件訪問表 | ITU-TRec.H.222.0| ISO/IEC 13818-1 |
0x01 | 建立1個或多個(私用)EMM流與每個獨立的PID值的聯(lián)系 |
系統(tǒng)層解復用,首先要獲取PAT表。PAT表中包含了該傳送流中所有程序的一個清單。通過PAT表,就可獲取該傳送中所包含每個程序的PMT表。
在每個程序的PMT表中,就有該程序中各個原始流的信息,包括PID、原始流類型以及該程序中包含有效PCR字段的傳送流中PID。通過PAT及PMT表,就可掌握傳送流中每個程序以及每個程序中各原始之間的關(guān)系。
(3)PCR
在傳送流中,解碼的同步實現(xiàn)是靠相應的程序參考時間PCR值。PCR是將比特流本身的時序編碼的時間標簽,它可以由同一道程序的視頻和音頻的PTS所用的共同時間基點推出。由于每道程序都有自己的時間基點,所以含有多道程序的傳送流的每一道程序都有獨立的PCR字段。
2 C5402介紹
C5402是TI公司1999年10月推出的性價比較高的定點數(shù)字信號處理器,其主要特點如下:
*先進的改造型哈佛結(jié)構(gòu),操作速率可達100MIPS;
*先進的多總線結(jié)構(gòu),3條16位數(shù)據(jù)存儲器總線和1條程序存儲器總線;
*40位算術(shù)邏輯單元(ALU),包括1個40位桶形移位器和2個40位累加器;
*1個17×17乘法器和1個40位專用加法器,允許16位帶(或不帶)符號的乘法;
*8個輔助寄存器及1個軟件棧,允許使用業(yè)界最先進的定點DSP C語言編譯器;
*數(shù)據(jù)/程序?qū)ぶ房臻g1M×6bit,內(nèi)置4K×16bit ROM和16K×16bit RAM。
*內(nèi)置可編程等待狀態(tài)發(fā)生器、鎖相環(huán)時鐘產(chǎn)生器、2個多通道緩沖串行口、1個8位并行與外部處理器通信的HPI口、2個16位定時器以及6通道DMA控制器;
*低功耗,工作電源有3V和1.8V(內(nèi)核使用)。
3 復用器硬件框圖及流程
復用器硬件框圖如圖2所示。
(1)合成控制卡(主卡)流程
主卡流程:主要完成6塊卡處理的實施監(jiān)控,生成PSI等信息并周期性發(fā)送。主卡的PSI信息:6個PMT的PID以及每個子卡輸入來的視頻、音頻、PCR的PID號是事先規(guī)定好的。
(2)單路TS流處理卡(子卡)流程
子卡流程:TS流進入FIFO緩存,由DSP進行PSI信息的提取和碼率的計算;將有關(guān)信息送入合成處理卡進行分析、綜合;根據(jù)需要從輸入的流中提取1路視頻、1路音頻和PCR包,并將它們的PID改為事先規(guī)定的。子卡的功能相當于一個簡易的碼流分析儀,而且可以提供1路單獨的TS流。
4 C5402的幾個典型應用
C5402在該系統(tǒng)中的應用:對輸入的TS流進行分析;對6路碼流進行均勻交織和PSI信息的重置;主卡與子卡之間通過C5402 HPI接口進行通信;利用C5402串口與計算機RS232串口相連。
4.1 輸入的TS流分析
DSP從FIFO中讀取TS流到內(nèi)部RAM中去,如圖3所示,根據(jù)13位的PID號0x000找到PAT表,在PAT表中獲得PMT的ID號和NIT的ID號;根據(jù)PMT_PID獲得視頻、音頻、PCR的PID號以及其它私有信息的PID號;根據(jù)PCR_PID和pcr_flag,找到PCR包;根據(jù)公式計算出碼率:
其中i'、i''為相鄰2個PCR包,求得多個碼率,然后求算術(shù)平均,獲得平均碼率。利用FIFO進行數(shù)據(jù)傳輸,速率在10~25MB/s之間。由于DSP處理能力為100MIPS,子卡中DSP傳輸數(shù)據(jù)量是大為2MB/s,約耦時0.1~0.2s,這樣處理時間足夠(0.8~0.9s)。子卡輸入FIFO采用8KB大小,在其半滿時,DSP等待時間最大為(188/10 000)×6=0.1128ms,期間FIFO的填充量為0.112 8×1=0.112 KB,遠不能輸入碼流將子卡的輸入FIFO填充滿而導致溢出。
4.2 碼流交織和PSI信息配置
為了將6塊子卡輸入的TS流復合成1路TS流,主卡DSP的功能就是將6路TS流均勻交織。主卡數(shù)據(jù)通過HPI送到主卡的DSP內(nèi)部RAM中,再寫到外部FIFO中。由于各種碼流的PID叫可能相同,需要對各路TS流的ID號進行重新設置。主卡根據(jù)預先設置的所有PID生成新的PSI表,并按照一定時間間隔發(fā)送到外部的FIFO中去。主卡的CPU以100MHz運行,輸出FIFO的大小為8KB,以固定5MHz的碼率發(fā)送,子卡填寫的數(shù)據(jù)不會導致主卡上溢。當主卡的輸出FIFO沒有達半滿時,填充空包,使FIFO不會下溢。
在子卡中根據(jù)分析得到的PSI信息,可以提取1路或者多路的節(jié)目流,并將PID號改為事先規(guī)定的,通過HPI通信接口傳送到主卡。
4.3 HPI接口
HPI(Host Port Interface)接口可以方便地實現(xiàn)主卡與子卡之間的通信,而不需要額外的器件。C5402的HPI操作是8位的。當C5402運行在100MHz主頻時,通信速度可達到25MB/s。HPI接口具有3個16bit寄存器:HPIA(地址寄存器)、HPID(數(shù)據(jù)寄存器)、HPIC(控制寄存器)。主卡與子卡的DSP芯片之間的連接如圖4所示:HD0~HD7是8位數(shù)據(jù)線,直接接到主設備的數(shù)據(jù)線上;HCS為選通信號;HDS1~HDS2為數(shù)據(jù)鎖存信號,在主設備的存取周期控制數(shù)據(jù)的傳輸,一般連到設備的數(shù)據(jù)選通;HR/W是讀寫信號;HCNTL0/HCNL1用于主設備選擇存取HPI的哪一個寄存器和對寄存器的存取類型,連至主設備的地址線。由于HPI寄存器是16位的,而HPI與主設備僅以8位數(shù)據(jù)線相連,因而用HBIL決定當前存取的是1個字的第1個字節(jié)還是第2個字節(jié),連到主設備地址線。
對HPI操作首先將控制字寫入HPIC,然后將要存取的地址寫入HPIA,最后豐取HPID,就可從HPI存儲塊或?qū)?shù)據(jù)寫入HPI存儲塊。此外,還可選擇HPIA自動增加方式,將初始地址寫入HPIA,可不再操作HPIA,每存取1次數(shù)據(jù),地址都會自動加1,因而加快了存取速度。
4.4 主卡DSP與計算機接口
為了實現(xiàn)系統(tǒng)自檢、碼率以及節(jié)目信息提取、輸出,我們通過DSP的串口與計算機的串口進行通信。如圖5所示,采用的是異步通信方式。其中75C189和75C188為電平轉(zhuǎn)換芯片,C5402有2個McBSP(多通道緩沖串行口)。McBSP提供了全雙工的通信制以及雙緩存的發(fā)送寄存器和三級存的接收寄存器,允許連續(xù)的數(shù)據(jù)流傳輸,數(shù)據(jù)長度可以為8、12、16、20、24、32;同時還提供了A-律和μ-律壓擴,多達128個通道的發(fā)送和接收。數(shù)據(jù)經(jīng)McBSP與外設的通信通過DR和DX引腳相連??刂菩盘杽t由CLKX、CLKR、FSX、FSR四條引腳來實現(xiàn)。
4.5 DSP程序BOOTL0ADER的實現(xiàn)
BOOTLOADER是為了在上電時,將用戶代碼從外部加載到內(nèi)部的存儲器以加快運行速度。我們使用C5402外部8位并行I/O口實現(xiàn)BOOTLOADER程序。C5402讀I/O口0xffff,這里面存放著外部存儲器的首地址(數(shù)據(jù)區(qū))。若在這個首地址內(nèi)讀到了關(guān)鍵字08 AA,就進行8位加載;若是10AA則表示16位加載。硬件系統(tǒng)就是加了1片3.3V的Flash,程序用編程器燒入Flash。
5 C5402的軟件編程體會
(1)C語言與匯編混合編程
在運算能力不是十分緊張的情況下,用C語言開發(fā)DSP程序不僅使DSP開發(fā)的速度大大加快,而且開發(fā)出來的DSP程序的可讀性和可移植性大大加強,程序修改也極為方便。采用C編譯器的優(yōu)化功能可以增加C代碼的效率。
一般情況下,采用C語言和匯編混合編程方法有3種:①獨立編寫C程序和匯編程序;②直接在C語言程序的相應位置嵌入?yún)R編語句;③對C程序進行編譯生成相應匯編程序,然后對匯編程序進行手工優(yōu)化和修改??梢詮腃程序中訪問匯編程序的變量和常量,也可以在匯編程序中訪問C程序變量。
(2)預防流水線沖突
流水線操作是DSP實現(xiàn)高速度、高效率的關(guān)鍵技術(shù)之一。在TMS320C54X中采用了深度與6級的流水線操作,因此流水線沖突不可避免的。一般情況下,當發(fā)生流水線沖突時,由DSP自動插入延遲解剖沖突問題,但有時需要程序員通過調(diào)整程序語句的次序或在程序中插入一定量的NOP來解決。例如:
STLM A,BRC
NOP
RPTB LOOP
語句
LOOP
(3)存儲空間要正確分配
C5402總共有192K字大小存儲空間,64K字的程序區(qū)、64K字的數(shù)據(jù)區(qū)和64K字的I/O區(qū)。當寄存器PMST的OVLY=0時,片內(nèi)RAM在數(shù)據(jù)區(qū)內(nèi)可訪問,在程序區(qū)不可訪問;當OVLY=1時,片內(nèi)RAM映射到程序區(qū)和數(shù)據(jù)區(qū),但數(shù)據(jù)頁(地址從0H~7FH)不映射到程序空間。我們在程序編程中選用后種模式。程序和數(shù)據(jù)同一塊片內(nèi)RAM,在編寫CMD文件時程序和數(shù)據(jù)區(qū)間不能發(fā)生重疊。
(4)指令的使用
①TMS320C54X的匯編有算術(shù)指令和程序指令,2種指令可以互換。當外部端口操作時使用端口指令PORTW和PORTR。
②利用DADST和DSADT指令,可以同時在1個累加器中進行2次運算。
③利用DADD和DSUB可實現(xiàn)32的加減法。
④利用CMPS、SACCD、SRCCD、STRCD四個條件存儲指令,以減少條件判斷指令的開銷;利用MAX、MIN、FIRS、LMS可以減少運算所需的指令周期;利用C54的并行指令可以省去多次數(shù)據(jù)存儲,提高編程的效率。
⑤充分利用*(IK)尋址(在數(shù)據(jù)區(qū)內(nèi)指明所要訪問的地址),可以減少輔助寄存器的使用。
(5)少用函數(shù)和子程序調(diào)用
雖然結(jié)構(gòu)化程序給軟件和調(diào)試帶來方便,但一個函數(shù)和子程序的調(diào)用和返回都將使C5402產(chǎn)生1次流水線刷新,增加了指令周期,因而在存儲空間足夠時,應多使用宏結(jié)構(gòu);但在編程時又必須考慮程序的大小,所以在對設備處理速度影響不大的情況下,也可以使用函數(shù)和子程序。
(6)關(guān)于中斷服務程序的編寫
中斷有軟中斷和硬中斷。在編寫中斷服務程序時,最重要的是將中斷向量表放置正確。首先在PMST寄存中設置IPTR,然后把INT放到規(guī)定的位置,將中斷模式INTM=0;將中斷使能寄存器的對應位置1。