由圖3可知,微處理器對調(diào)諧電路和QAM解調(diào)電路的訪問與控制是通過I2C總線控制器芯片PCF8584實現(xiàn)的,而微處理器對解復用電路的訪問與控制則直接通過解復用芯片的微處理器接口實現(xiàn)。此外,解復用芯片輸出的一路節(jié)目數(shù)據(jù)還需通過接口電路傳送到微機的內(nèi)存中。為了適合實時、高速或突發(fā)數(shù)據(jù)的傳輸,接口電路采用DMA傳輸技術(shù),并利用FIFO(FirstInFirstOut)存儲器作為數(shù)據(jù)緩沖電路。由于FIFO具有一定的存儲容量,能起到緩沖作用,故能很好
由圖3可知,微處理器對調(diào)諧電路和QAM解調(diào)電路的訪問與控制是通過I2C總線控制器芯片PCF8584實現(xiàn)的,而微處理器對解復用電路的訪問與控制則直接通過解復用芯片的微處理器接口實現(xiàn)。此外,解復用芯片輸出的一路節(jié)目數(shù)據(jù)還需通過接口電路傳送到微機的
內(nèi)存中。為了適合實時、高速或突發(fā)數(shù)據(jù)的傳輸,接口電路采用
DMA傳輸技術(shù),并利用FIFO(First In First Out)存儲器作為數(shù)據(jù)緩沖電路。由于FIFO具有一定的存儲容量,能起到緩沖作用,故能很好地解決外設(shè)與計算機之間的速率匹配問題。此外,當外設(shè)進行連續(xù)的
數(shù)據(jù)傳輸時,主機的DMA傳輸可以間歇地進行,從而能夠讓主機有時間執(zhí)行數(shù)據(jù)處理和顯示等后臺任務(wù)。
2 機頂盒的軟件設(shè)計
在機頂盒中,軟件設(shè)計主要包括三個部分:各芯片的讀寫操作。接口軟件編程和用戶界面的設(shè)計。數(shù)字調(diào)諧電路、QAM解調(diào)電路、I2C總線控制器和MPEG-2解復用電路的芯片中都含有大量的控制和配置寄存器供用戶進行讀寫操作,以便預置有關(guān)的參數(shù)或?qū)δ承﹨?shù)進行控制。這需要通過編程來實現(xiàn)。機頂盒的用戶界面是一個典型的WINDOWS界面,機頂盒的所有功能(包括解壓縮)都通過它來完成,因此可采用VC++進行編程。接口軟件的功能是把插卡接收到的數(shù)據(jù)以DMA方式傳送到計算機的內(nèi)存中,要實現(xiàn)Windows95/98下DMA方式的數(shù)據(jù)傳輸,需要編寫虛擬設(shè)備驅(qū)動程序。這是整個軟件設(shè)計中的重點和難點。限于篇幅下面簡單說明虛擬設(shè)備驅(qū)動程序的設(shè)計思想。
DMA虛擬設(shè)備驅(qū)動程序采用VtoolsD編寫,可由Win32應(yīng)用程序動態(tài)裝載。驅(qū)動程序負責將外設(shè)中的數(shù)據(jù)以DMA方式傳送到內(nèi)存中的兩塊緩沖區(qū)里,應(yīng)用程序分別從這兩塊緩沖區(qū)輪流讀取數(shù)據(jù)。實現(xiàn)方法如下:
驅(qū)動程序的入口是一個被稱作Control Dispatcher的函數(shù),它負責處理與該VxD相關(guān)的系統(tǒng)控制信息,并調(diào)用相應(yīng)的處理例程。一個可被動態(tài)裝載的VxD應(yīng)能處理以下消息:SYS_DYNAMIC_DEVICE_INIT(用于VxD的初始化階段);SYS_DYNAMIC_DEVICE_EXIT(用于VxD的退出階段);W32_DEVICEIOCONTROL(用于應(yīng)用程序和VxD的通信)。當Win32應(yīng)用程序利用函數(shù)CreateFile來動態(tài)裝載VxD時,系統(tǒng)發(fā)送SYS_DYNAMIC_DEVICE_INIT消息,Control Dispatcher調(diào)用該消息的處理例程OnSysDynamicDeviceInit進行VxD的初始化設(shè)置,例如DMA控制器的初始化、分配內(nèi)存空間、中斷控制器的初始化等。當Win32應(yīng)用程序調(diào)用DeviceIoControl 函數(shù)向VxD發(fā)送數(shù)據(jù)時,Control Dispatcher調(diào)用該消息的處理例程OnW32DeviceIoControl此時可以接收從應(yīng)用程序發(fā)來的消息如主窗口句柄等。當Win32應(yīng)用程序關(guān)閉該VxD或Win32應(yīng)用程序本身被關(guān)閉時,Control Dispatcher調(diào)用該消息的處理例程OnSysDynamicDeviceExit,此時可以做一些清理性工作,如釋放DMA緩沖區(qū)等。
每當一次DMA傳輸結(jié)束便產(chǎn)生一個硬件中斷。在VxD的中斷處理例程中,對DMA控制器重新進行初始化(即改變DMA緩沖區(qū)的首地址使之指向另一個緩沖區(qū),以便開始下一次DMA傳輸),同時向Win32應(yīng)用程序發(fā)送消息通知它讀取內(nèi)存中的數(shù)據(jù)。
3 實驗結(jié)果
將上述機頂盒電路做成一塊PC插卡用于接收下行數(shù)據(jù)。首先對電路中的各個
模塊分別進行了多次調(diào)試和試驗。然后在此基礎(chǔ)上,利用試驗用的節(jié)目源(即按照MPEG-2標準進行傳輸復用后的多個不同節(jié)目的碼流)對整個電路進行了聯(lián)調(diào)。它可以實現(xiàn)頻點選擇、QAM解調(diào)和通道選擇,從而得到用戶所要點播的某一路節(jié)目。該路節(jié)目的數(shù)據(jù)流格式遵從MEPG-1標準,速率約為1.4Mb/s。最后利用編寫好的虛擬設(shè)備驅(qū)動程序通過接口電路成功地將該路節(jié)目傳送到計算機的內(nèi)存中。編寫一個用于調(diào)試的Win32應(yīng)用程序,讀取內(nèi)存中的節(jié)目數(shù)據(jù)并形成一個數(shù)據(jù)文件后由金山影霸播放,效果良好。