基于PCI總線的嵌入式實時圖像處理系統(tǒng)
DSP完成的功能主要是對從FIFO讀入的數(shù)據(jù)進行處理,包括依照程序進行識別、特征提取以參數(shù)檢測等。當視頻頭采集速度為每秒25幀圖像時,它留給DSP處理的時間最多為每幀40ms,如果考慮系統(tǒng)中一定的延時以及處理后圖像的存儲時間,那么DSP處理一幅圖像時間不能超過30ms,按照C6211的處理速度,在30ms內(nèi)可以處理36M條指令。DSP讀出FIFO中的行數(shù)據(jù)并存入SDRAM,一幀圖像有576行,在最后一行時會收到幀中斷,這時SDRAM中的圖像數(shù)據(jù)總共有1440×576=810KB。讓C6211用36M條指令的時間處理810K的數(shù)據(jù)是綽綽有余。
(2) SDRAM存儲器
HY57V651620B是現(xiàn)代公司發(fā)布的128Mb SDRAM,支持分頁尋址,訪問速度為7.5ns,與DSP系統(tǒng)同步工作,但因為DSP工作在150MHz,故系統(tǒng)中SDRAM工作在DSP時鐘的一半或者2/3,即75MHz或者100MHz。當工作在100MHz時候,SDRAM在時序上需要一些特殊的控制,不是簡單的與DSP同步。SDRAM主要在系統(tǒng)運行過程中存儲臨時數(shù)據(jù)和處理結(jié)果。系統(tǒng)中共有256Mb的存儲空間,其消耗情況視啟動程序和圖像處理程序的大小而定。
(3) FLASH存儲器
AM29LV800B是AMD公司發(fā)布的8Mb FLASH芯片,同樣支持分頁尋址,工作在異步方式。啟動程序固化在FLASH芯片中。當系統(tǒng)加電啟動時,F(xiàn)LASH中的程序下載到DSP的SDRAM中運行。FLASH具有在線重寫入功能,這對系統(tǒng)啟動程序的修改和升級都帶來了很大的方便。
2.2 視頻解碼模塊
本系統(tǒng)視頻A/D采用的是Philips公司的SAA7111A作為視頻解碼芯片,SAA7111A可以提供四路模擬視頻輸入,具有兩個模擬處理通道,支持四路CVBS模擬信號或二路Y/C模擬信號或(2×CVBS和1×Y/C)。SAA7111A對視頻頭輸入的標準PAL格式的模擬圖像信號進行A/D轉(zhuǎn)換,然后輸出符合CCIR601建議格式的4:2:2的16位YUV數(shù)據(jù)到FIFO,其中亮度信號Y為8位、色度信號Cr和Cb合為8位數(shù)據(jù)。FIFO采用的是IDT公司的IDT72V215LB芯片,深度為512×18。按照CCIR601標準,YUV圖像分辨率為720×576,那么按行輸出時,SAA7111A輸出數(shù)據(jù)流大小為:720×16=1440bit。因為DSP通過32位的SBSRAM接口與FIFO通信,故YUV數(shù)據(jù)寫入FIFO時需要在FIFO之間實現(xiàn)乒乓切換,這時一行720×16的數(shù)據(jù)在兩片F(xiàn)IFO中存儲變?yōu)?60×32。
2.3 PCI通信模塊
PCI(Peripheral Component Interconnect,外圍組件接口)它既可以作為中間層的總線也可以作為周邊總線系統(tǒng)使用。與其他普通總線規(guī)范相對照,PCI總線為高速I/O設備提供了更好的支持,比如可以很好的支持圖像適配器、網(wǎng)絡接口控制器、磁盤控制器等。現(xiàn)行的標準允許在33MHz下使用64根數(shù)據(jù)線,傳輸速率可達2.12Gbps。并且PCI總線支持線性突發(fā)的數(shù)據(jù)傳輸模式,可確保總線不斷滿載數(shù)據(jù),因此能有效利用總線帶寬。另外,PCI總線還具有低延時的隨機存取特性,對從總線上的主控寄存器到從屬寄存器的寫延時為60ns。
PCI總線規(guī)范吸引人的地方不僅是其高速度,更在于它適應了現(xiàn)代I/O設備對系統(tǒng)的要求,對PCI擴展卡及器件能進行全自動配置,并且只需很少的接口邏輯就可以實現(xiàn)并支持其他總線系統(tǒng)。
TMS320C6211的HPI口不支持PCI總線的無縫接口。本系統(tǒng)中采用TI公司的PCI2040來實現(xiàn)DSP的HPI與PCI總線的連接。DSP處理后的數(shù)據(jù)經(jīng)HPI口輸出到PCI2040進行解碼,然后輸出到PCI總線上。其邏輯結(jié)構(gòu)圖如圖3所示。
在本系統(tǒng)中,PCI2040上存在2種電壓:5V和3.3V,其中3.3V是HPI口電壓,而5V是PCI總線電壓。PCI2040在啟動時需要對其PCI總線寄存器和HPI寄存器參數(shù)進行預加載。系統(tǒng)中PCI解碼模塊包括一塊配置ROM--AT24C08A,屬于EEPROM型ROM,便于對配置參數(shù)的修改和升級。當系統(tǒng)啟動時,存儲在AT24C08A的數(shù)據(jù)被下載到PCI2040的寄存器中并進行配置。
圖中/HINT[3:0]、/HCS[3:0]、HRDY[3:0]、HRST[3:0]分別與4片DSP中的相應信號相連,即PCI2040可以同時與4片DSP接口。
3 PCI總線驅(qū)動實現(xiàn)方法
在系統(tǒng)軟件方面,基于PCI總線的圖像處理系統(tǒng)面臨的難點頗多,其中難度最大的是PCI驅(qū)動問題。
為闡明如何在Windows操作系統(tǒng)下實現(xiàn)PCI總線的驅(qū)動,還需了解PCI設備的配置空間系統(tǒng)。PCI設備有3種物理存儲空間:配置空間、存儲器空間和I/O空間。配置空間是長度為256字節(jié)的一段連續(xù)空間,空間的定義如圖4。在配置空間中只讀空間有設備標識、供應商代碼、修改版本、分類代碼以及頭標類型。其中供應商代碼用來標識設備供應商的代碼;設備標識用來標識某一特殊的設備;修改版本標識設備的版本號;分類代碼用來標識設備的種類;而頭標類型用來標識頭類型以及是否為多功能設備。除供應商代碼之外,其他字段的值由供應商分配?;刂芳拇嫫髯钪匾墓δ苁欠峙銹CI設備的系統(tǒng)地址空間。在基地址寄存器中bit0(最低位)用來標識存儲器空間還是I/O地址空間,基地址寄存器映射到存儲器空間時bit0為“0”,映射到I/O地址空間時bit0為“1”。
3.1 Windows環(huán)境下驅(qū)動程序
驅(qū)動程序可以理解為一系列控制硬件設備的函數(shù)。在Windows操作系統(tǒng)中,封裝驅(qū)動程序的方法是制作一個DLL或VxD。當硬件是非標準設備時,必須針對特定的硬件來設計Windows環(huán)境下的設備驅(qū)動程序。
在DOS操作系統(tǒng),對于一個應用程序而言它總認為自己是唯一運行的程序,因此應用程序可以直接訪問硬件,獨占所有的系統(tǒng)內(nèi)存以及系統(tǒng)運行時間,當然也就不需要設備驅(qū)動程序。但到了Windows操作系統(tǒng),系統(tǒng)中同時可能有若干個應用程序在運行,這就使得系統(tǒng)不可能讓它隨意的直接訪問硬件,否則就會引起應用程序訪問沖突而導致系統(tǒng)崩潰。為解決這一問題,人們提出將系統(tǒng)的資源虛擬化,讓應用程序運行在一個虛擬定環(huán)境中的虛擬機(VM)上,而管理程序和驅(qū)動程序運行在實際機器上(Ring0級),由它們來處理針對硬件的操作。虛擬資源是硬件(甚至軟件)資源的仿真,當系統(tǒng)虛擬了所有或者幾乎所有的程序可以訪問的資源時,它就創(chuàng)造了一個“虛擬機”(VM)。Windows虛擬機完全透明的仿真了以下資源和性能:
(1) 可訪問的內(nèi)存空間
(2) I/O操作
(3) 中斷操作
(4) 外圍設備(顯示器、鍵盤等)
如此以來,Windows應用程序在Ring3級(最低級)的保護模式上運行,不能直接訪問硬件,執(zhí)行一個對硬件的操作就會引起一個異常事件,此時處理器切換到Ring0級,并且將控制權(quán)交給相應當控制器。所有Windows應用程序分享一個系統(tǒng)虛擬機。
評論