新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于PCI總線的MPEG-1壓縮卡軟硬件設計及實現

        基于PCI總線的MPEG-1壓縮卡軟硬件設計及實現

        作者: 時間:2012-04-14 來源:網絡 收藏

          2.5 PCI接口部分設計

          本系統中PCI接口芯片選用SAA7146A,該芯片并不是通用的PCI接口芯片,而是一個多媒體橋(Multimedia Bridge)。方框圖如圖2。該芯片符合PCI2.1規范。它有八個DMA通道,三個視頻,四個音頻,一個DEBI(Data Expansion Bus Interface)。還具有兩路視頻通道,可對視頻數據進行縮放,一路可無級縮放HPS(High Performace Scaler,其縱向可達1:1024、橫向可達1:256;另一路有級縮放BRS(Binary Ratio Scaler支持CIF和QCIF格式。

          音頻接口以I2S為基礎,通過編程控制以支持MSB-FIRST的不同格式及不同的時序格式。

          本系統中該部分主要實現功能如下:

          (1)通過DEBI接收SZ1510產生的數據,傳輸到內存;

          (2)通過視頻接口,接收SAA7114輸出的視頻解碼信號,并進行亮度、色度、飽和度的控制,并實現無級縮放功能實現視頻預覽功能;

          (3)通過音頻接口,接收PCM1800E輸出的PCM編碼信號,傳輸到內存,實現聲音監聽功能;

          (4)提供符合PCI2.1規范的接口,將板上數據傳輸到主機內存。

          3 軟件設計

          軟件設計主要包括驅動程序設計和應用層的API設計。

          驅動程序主要負責與硬件打交道,應用層API主要負責與驅動程序接口。由于設計了應用層的API,應用程序可很容易在上面進行開發。

          3.1 驅動程序設計

          為了支持Windows2000和Windows98采用WDMWindows Driver Model 驅動程序。WDM 作為微軟的最新驅動程序模型與傳統的Win3.x和Win95使用的VxD驅動完全不同。WDM可支持電源管理、自動配置和熱插拔等。WDM驅動的設計可以采用Driver StudioDS、Windriver、DDKDriver Device Kit等。本系統驅動采用Windows 2000 DDK借助VC6.0設計。

          3.1.1 MPEG-I壓縮部分

          在驅動中,重置SZ1510后,就可以裝載相應工作模式的微碼;根據需要,設置好相應寄存值后就可以啟動SZ1510對視頻數據進行編碼。每當產生的壓縮數據超過SZ1510內部的FIFO門限后,SZ1510產生相應中斷,內核調用中斷例程,在中斷例程中調用中斷延遲例程DPC,在中斷延遲例程中接收產生的壓縮數據。SZ1510提供兩種方式提取數據,一種用I2C總線接口方式,另一種用DEBI方式。

          在本系統中,采用DEBI進行壓縮數據的傳輸。考慮到壓縮數據產生的速度,本系統開了32頁大小的緩沖區,在中斷延遲例程中填充該緩沖區。每當填滿8頁大小后,產生一個事件通知應用層進行數據讀取。通過這種方式,可以避免壓縮數據的丟失。

          其流程圖如圖3所示。

          在驅動中,壓縮數據的提取方式將極大地影響生成MPEG文件的質量。如果處理不當,將導致馬賽克、跳幀等現象。

          3.1.2 驅動程序中用戶緩沖區的訪問

          驅動程序訪問用戶內存主要通過緩沖I/O和直接I/O。緩沖I/OI/O管理器創建一個內核模式拷貝緩沖區,并把用戶緩沖區的內容拷貝到該緩沖區中,并在IRP首部的AssociateIrp.SystemBuffer域中存儲該非分頁內存地址。驅動程序可簡單地讀寫該塊內存。直接I/O,I/O管理器為輸入數據提供一個內核模式拷貝緩沖區,對輸出數據提供一個內存描述符(MDL)。為了使用緩沖I/O或直接I/O在創建設備時,必須設置設備對象的Flags域中的DO_BUFFERED_IO標志位來使用緩沖I/O或設置DO_DIRECT_IO標志位來使用直接I/O。

          在本驅動中由于緩沖I/O和直接I/O都被使用,DO_BUFFERED_IO標志位和DO_DIRECT_IO標志位都被設置。

          在定義IOCTL碼中,對緩沖I/O使用METHOD_BUFFEERED對直接I/O使用METHOD_OUT_DIRECT。

          3.2 應用層API設計

          應用層對驅動程序的訪問通過調用Win32 I/O函數(如ReadFile、WriteFile和DeviceIoControl)訪問。當應用層調用Win32 I/O函數以請求I/O后,該請求由內核的I/O系統服務接收,I/O管理器對該請求構造合適的IRP包,并將其傳給驅動程序棧,IRP在棧中進行傳遞,傳到驅動程序進行處理,并將結果返回給應用程序。

          通過應用層API,在其上面可進一步開發各類應用程序。

          本系統達到了預期的要求,能夠在音視頻采集過程中對視頻、音頻進行實時預覽、監聽。壓縮生成的文件可在標準媒體播放器上播放,并可對生成的VCD文件進行刻錄,然后由VCD機播放.


        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 射洪县| 瓮安县| 上栗县| 诸城市| 峨边| 三门峡市| 巴林右旗| 乐山市| 徐州市| 易门县| 堆龙德庆县| 韶山市| 利川市| 皮山县| 平泉县| 宁蒗| 军事| 水城县| 融水| 资源县| 灵璧县| 屏东市| 玉门市| 商丘市| 卢龙县| 株洲市| 勐海县| 新营市| 侯马市| 桃园县| 景宁| 若尔盖县| 尉氏县| 盱眙县| 凯里市| 辛集市| 舞阳县| 台江县| 武胜县| 本溪| 山东|