DVP簡介
?數字攝像頭并行接口(DVP)用于捕獲CMOS影像攝像機所輸出的并行數據。依據攝像機輸出,可選擇以硬件同步模式或內嵌碼同步模式進行幀同步與行同步。依使用需求,可透過幀率控制,調節每秒捕獲的幀數。剪裁窗口功能可以保留興趣區域數據,舍棄其他部分。使用圖像尺寸調整功能,可依據比例對圖像進行像素數或行數縮減。直接存儲器訪問的使用,可在不耗用CPU資源的狀態下,將捕獲數據傳輸至儲存單元。使用者僅須透過狀態中斷與錯誤中斷,監控數據接收狀態即可。 ?DVP系統框圖
?圖1. DVP系統框圖 ? ?周邊配置
?SURF板圖2.?AT-SURF-F437 ?DVP & Sensor pin表1. DVP接口表 ? ?DVP基本環境介紹表2. DVP環境介紹 ? ?DVP功能
?數據長度
?數字攝像頭并行接口(DVP)將捕獲的數據,包裝成字(32位)數據,供直接存儲器訪問從寄存器DVP_DT取得。包裝方式依DVP_CTRL寄存器PDL的配置而異。詳見下圖。8位并行數據(PDL=0)配置PDL為0,DVP在每個DVP像數時鐘(DVP_PCLK)捕獲一個8位數據,并以四個數據包裝成一組字數據。最先捕獲者放置于最低8位,最后捕獲者放置于最高8位,依此類推。10位并行數據(PDL=1)配置PDL為1,DVP在每個DVP像數時鐘(DVP_PCLK)捕獲一個10位數據,并以二個數據包裝成一組字數據。包裝將字數據分成兩組半字進行。先捕獲者放置于低位半字的最低10位,最捕獲者放置于高位半字的最低10位,余者清零。12位并行數據(PDL=2)配置PDL為2,DVP在每個DVP像數時鐘(DVP_PCLK)捕獲一個12位數據,并以二個數據包裝成一組字數據。包裝將字數據分成兩組半字進行。先捕獲者放置于低位半字的最低12位,最捕獲者放置于高位半字的最低12位,余者清零。14位并行數據(PDL=3)配置PDL為3,DVP在每個DVP像數時鐘(DVP_PCLK)捕獲一個14位數據,并以二個數據包裝成一組字數據。包裝將字數據分成兩組半字進行。先捕獲者放置于低位半字的最低14位,最捕獲者放置于高位半字的最低14位,余者清零。圖3. PDL配置與輸出包裝之關系 ? ?同步模式
?數字攝像頭并行接口(DVP)以DVP像素時鐘(DVP_PCLK)來捕獲CMOS影像攝像機所輸出的像素并行數據(DVP_D),DVP_PCLK是由CMOS影像攝像機提供。透過配置DVP_CTRL的寄存器CKP,DVP可選擇使用DVP_PCLK的上升緣或下降緣進行捕獲。捕獲的數據可以區分為有效像素數據與消隱區間數據,用戶僅只關心有效像素數據的部分。CMOS影像攝像機可提供一種或數種模式的同步信息,供接收端進行幀分割,并提取有效像素數據。數字攝像頭并行接口(DVP)支持兩種同步模式,硬件同步模式與內嵌碼同步模式,可透過配置DVP_CTRL的寄存器SM來選擇。 ?硬件同步模式相關寄存器:-SM(Synchronization mode)=0-DVP_CTRL HSP-DVP_CTRL VSPCMOS影像攝像機可提供水平同步訊號與垂直同步信號,供接收端進行同步。配置DVP_CTRL的寄存器SM為0,DVP可以此同步模式進行接收。水平同步訊號用于區分有效像素與消隱區間,DVP由DVP水平同步訊號引腳(DVP_HSYNC)導入此訊號,依據此訊號進行行分割,并提取有效像素數據。需配置DVP_CTRL的寄存器HSP來調整該訊號極性,使其與數字攝像頭之輸出一致。垂直同步信號用于幀之間的分隔,DVP由DVP垂直同步信號引腳(DVP_VSYNC)導入此訊號,依此訊號進行幀分割。 ?內嵌碼同步模式相關寄存器:-SM(Synchronization mode)=1-DVP_SCR-DVP_SUR為了節省引腳使用,部分廠商的CMOS影像攝像機,可在有效像素數據與消隱區間數據之間嵌入同步碼作為同步信息,取代水平同步訊號與垂直同步信號之使用。配置DVP_CTRL的寄存器SM為1,DVP可以此同步模式進行接收。同步碼由四筆數據構成,前三筆數據內容固定,第一筆為全1數據,之后接續兩筆全0數據。第四筆數據則依同步信息而異,需依攝像機廠商所使用的同步碼型式與內容,配置DVP_SCR寄存器。1. FS/FE/LS/LE型式欲接收FS/FE/LS/LE型式,需配置DVP_SCR寄存器如下。FMSC:配置成影像攝像機使用的FS第四筆數據最高八比特位。LNSC:配置成影像攝像機使用的LS第四筆數據最高八比特位。LNEC:配置成影像攝像機使用的LE第四筆數據最高八比特位。FMEC:配置成影像攝像機使用的FE第四筆數據最高八比特位。圖4. FS/FE/LS/LE型式下的幀組成 ?2. SAV/EAV型式欲接收SAV/EAV型式,需配置DVP_SCR寄存器如下:FMSC:配置成0xff。(配置為無幀開始同步碼之內嵌碼同步模式)LNSC:配置成影像攝像機使用的Active SAV第四筆數據最高八比特位。LNEC:配置成影像攝像機使用的Active EAV第四筆數據最高八比特位。FMEC:配置成0xff。(配置為任意幀結束同步碼之內嵌碼同步模式)圖5. SAV/EAV型式下的幀組成 ? ?捕獲模式
?單幀捕獲模式相關寄存器:-DVP_CTRL CFM=1此模式下,用戶置起DVP_CTRL的寄存器CAP后,DVP會根據接收到的同步信息,于次幀開始后,進行數據捕獲。于該幀結束之時,DVP會自動重置寄存器CAP,并停止數據捕獲。圖6. 單幀捕獲模式示意圖 ? ?連續捕獲模式相關寄存器:-DVP_CTRL CFM=0此模式下,用戶置起DVP_CTRL的寄存器CAP后,DVP會根據接收到的同步信息,于次幀開始后進行數據捕獲,此捕獲行為會持續進行。當使用者對寄存器CAP置0時,DVP會維持CAP的置起狀態并持續捕獲數據,直到同步信息反應當幀結束。此時DVP會重置寄存器 CAP,并停止數據捕獲。圖7. 連續捕獲模式示意圖 ? ?幀率控制功能
?相關寄存器:DVP_CTRL CFM=0數字攝像頭并行接口(DVP)可透過幀率控制,調節每秒捕獲的幀數。幀率控制僅當DVP配置于連續捕獲模式(CFM=0)下,方可作用。幀率控制單元可區分成基本型幀率控制與進階型幀率控制兩種。圖8. 幀率控制功能示意圖 ? ?基本型幀率控制相關寄存器:圖9. DVP_CTRL BFRC ?配置DVP_CTRL的寄存器BFRC,可選擇讓DVP每兩幀捕獲一幀,或是每四幀捕獲一幀。 ?進階型幀率控制相關寄存器:圖10. DVP_ACTRL EFRCE ?圖11. DVP_FRF EFRCTF/EFRCSF ?如需更精細的幀數調節,可使用進階型幀率控制。使用時須禁止基本型幀率控制(BFRC=0),并置起DVP_ACTRL的寄存器EFRCE,DVP會依據DVP_FRF的寄存器EFRCSF與EFRCTF之配置來調整幀數,調整公式如下:目標幀率=(EFRCTF/EFRCSF)×原始幀率請注意,當使用進階型幀率控制功能時,寄存器EFRCSF與EFRCTF值不得為0,且EFRCTF不得大于EFRCSF。 ?剪裁窗口功能
?相關寄存器:圖12. DVP_CWST CVSTR/CHSTR ?圖13. DVP_CWSZ CVNUM/CHNUM
?剪裁窗口功能可以供用戶保留興趣區域數據,舍棄其他部分。置起DVP_CTRL的寄存器CRP,DVP會依據DVP_CWST與DVP_CWSZ之寄存器配置進行剪裁,如下圖所示意。
圖14. 剪裁窗口功能示意圖 ?請注意,由于DVP會將捕獲的數據,包裝成字(32位)數據,供直接存儲器訪問提取。故使用剪裁窗口功能時,CHNUM有下述限制:8位并行數據(PDL=0)時,CHNUM+1須為4的倍數。10或12或14位并行數據(PDL?0),CHNUM+1須為2的倍數。
?圖像尺寸調整功能
?使用圖像尺寸調整功能,可依據比例對圖像進行像素數或行數縮減。圖像尺寸調整功能單元可區分成基本型圖像捕獲舍棄控制與進階型圖像尺寸調縮功能兩種。圖15.?圖像尺寸調整功能示意圖 ? ?基本型圖像捕獲舍棄控制相關寄存器:圖16. DVP_CTRL ?配置DVP_CTRL的寄存器PCDC或LCDC,可啟用基本型圖像捕獲舍棄控制功能。將LCDC置1后,可在每兩條捕獲的圖像行中舍棄一條,將圖像的垂直軸尺寸減半。配置LCDS可以選擇捕獲前一條并舍棄下一條,或是反向為之。寄存器PCDC可以調整圖像的水平軸尺寸,由PCDS與PCDES決定捕獲何者。如下圖所示。
圖17. LCDC/LCDS與幀組成 ?圖18. PCDC/PCDS與行組成
? ?進階型圖像尺寸調縮功能相關寄存器:圖19. DVP_ACTRL圖20. DVP_HSCF
圖21. DVP_VSCF
如需更精細的圖像調縮,可使用進階型進階型圖像調縮功能。使用此功能需啟用進階功能數據管理(EFDM=1),并依CMOS影像攝像機之輸出格式配置進階功能數據格式(EFDF)。使用進階型進階型圖像調縮功能時,須禁止圖像捕獲舍棄控制功能(PCDC=0且LCDC=0),并置起DVP_ACTRL的寄存器EISRE,DVP會依據DVP_HSCF的寄存器HSRSF與HSRTF之配置來調縮圖像的水平軸尺寸,并依據DVP_VSCF的寄存器VSRSF與VSRTF之配置來調縮圖像的垂直軸尺寸,調整公式如下:
?目標水平軸尺寸=(HSRTF/HSRSF)×原始水平軸尺寸目標垂直軸尺寸=(VSRTF/VSRSF)×原始垂直軸尺寸請注意,當使用進階型進階型圖像調縮功能時,寄存器HSRSF、HSRTF、VSRSF、VSRTF值不得為0,且HSRTF不得大于HSRSF,并VSRTF不得大于VSRSF。此外,計算所得的目標水平軸尺寸與目標垂直軸尺寸必須為整數,且目標水平軸尺寸需為4的倍數,否則此單元可能會產生不預期之結果。
?灰階圖像二值化轉換
?相關寄存器:圖22. DVP_ACTRL MIBE圖23. DVP_BTH
灰階圖像二值化轉換單元提供將圖像亮度轉換成一比特位表示之格式。使用此功能需啟用進階功能數據管理(EFDM=1),并依CMOS影像攝像機之輸出格式配置進階功能數據格式(EFDF),設定方式請參考錯誤!找不到參照來源。置起DVP_ACTRL的寄存器MIBE可使能灰階圖像二值化轉換功能。
灰階圖像依DVP_BTH之寄存器MIBTHD配置進行二值化轉換,數值大于閥值者判定為1,小于閥值者判定為0。圖像數據若為無法直接取出圖像亮度的格式,則無法使用該功能。
?中斷與中斷控制
?相關寄存器:圖24. DVP_STS圖25. DVP_ESTS
?圖26. DVP_IENA
?圖27. DVP_ISTS
?圖28. DVP_ICLR
?數字攝像頭并行接口(DVP)的中斷控制,由四組寄存器所構成。DVP_ESTS是只讀寄存器,用于紀錄捕獲過程中所發生的同步狀態或錯誤事件。DVP_IENA用于控制中斷訊號之使能,配置該寄存器可以使能對應位的同步狀態或錯誤中斷,并以送至CPU。使能后所產生的中斷會被記錄在只讀寄存器DVP_ISTS中,由于DVP是以全局中斷連接CPU的NVIC,使用者需于此寄存器確認中斷信息。紀錄于DVP_ESTS與DVP_ISTS的狀態,透過對DVP_ICLR的對應位上置1可清除之。
DVP_ICLR是唯寫寄存器,無須置0解除。
?DVP支持三組同步狀態中斷,描述如下:幀捕獲完成(Capture frame done)CFDES與CFDIS于捕獲功能(CAP)使能時,表現當前幀捕獲已完成。根據同步訊號,幀捕獲完成訊息會于獲取幀結束訊號時發生。若剪裁窗口功能(CRP)始能時,幀捕獲完成訊息會提前至剪裁窗口完成時產生。若捕獲功能(CAP)未使能,CFDES與CFDIS不作用。 ?垂直同步狀態(Vertical synchronization)VSES與VSIS用于表現垂直同步信息已獲取。垂直同步信息可被定義為幀開始或幀結束,配置DVP_ACTRL的寄存器VSEID可以調整其定義。 ?水平同步狀態(Horizontal synchronization)HSES與HSIS用于表現水平同步信息已獲取。水平同步信息可被定義為行開始或行結束,配置DVP_ACTRL的寄存器HSEID可以調整其定義。 ?DVP支持兩組錯誤中斷,描述如下:輸出緩沖溢出(Output data FIFO overrun)OVRES與OVRIS于捕獲功能(CAP)使能時,表現輸出緩沖溢出的錯誤狀態。若直接存儲器訪問無法及時將捕獲數據傳輸至儲存單元,而導致輸出緩沖全部蓄滿數據,此時DVP所捕獲的數據將會被舍棄,并產生輸出緩沖溢出錯誤訊息。若捕獲功能(CAP)未使能,OVRES與OVRIS不作用。 ?內嵌同步碼譯碼錯誤(Embedded synchronization error)ESEES與ESEIS于捕獲功能(CAP)使能,且使用時內嵌碼同步模式時時(SM=1),表現內嵌同步碼譯碼錯誤的錯誤狀態。若譯碼器解譯出非預期之同步碼,譯碼器會舍棄當前的同步狀態,并重新對后續的數據進行解譯。此時DVP將會停止數據捕獲,并產生內嵌同步碼譯碼錯誤訊息。若捕獲功能(CAP)未使能,或是使用硬件同步模式時(SM=0),ESEES與ESEIS不作用。 ?DVP應用
?Sensor常見影像數據格式
?依廠商不同,CMOS影像攝像機可提供的圖像輸出格式極多,本章節僅針對常見格式進行簡單描述。 ?RGB與YUV格式RGB:每一個像素由RGB三原色組成,“R”代表紅色,“G”代表綠色,“B”代表藍色。主要應用在計算機屏幕上,每一個像素色彩表現較豐富, 但無法將 RGB 三種值分開。常見格式有RGB565、RGB555…。YUV:每一個像素由YUV字段組成,“Y”表示明亮度(Luma),“UV”表示的是色度(Chroma)。主要應用在電視屏幕上,特點在于可以只儲存Luma(黑白畫面),或是壓縮UV的儲存空間,方便壓縮影像數據。UV代表RGB三原色。常見格式有YUV444、YUV422、YUV420…。
圖29. YUV Format ?44、42與4:20是YUV的取樣方法。YUV44即是無通道壓縮的全像傳送;YUV42即是把后面兩個信道的訊號抽掉一半,所以只需要YUV44的三分之二帶寬。
YUV與RGB有算法可以互相轉換。 ?RGB565此格式下,CMOS影像攝像機每兩個像素時鐘輸出一個半字(16位)數據的像素。每組半字數據包含三種像素分量,紅色R、綠色G和藍色B,分別以5位、6位和5位進行數據編碼。第一個像素時鐘輸出R分量與G分量的低位部分,第二個像素時鐘則輸出G分量的高位部分與B分量。或是在第一個像素時鐘輸出B分量與G分量的低位部分,第二個像素時鐘輸出G分量的高位部分與R分量。錯誤!找不到參照來源。示意在RGB565格式下,DVP數據捕獲與包裝方式。圖30. RGB565格式數據捕獲與包裝 ? ?RGB555此格式下,CMOS影像攝像機每兩個像素時鐘輸出一個半字(16位)數據的像素。每組半字數據包含三種像素分量,紅色R、綠色G和藍色B,皆以5位進行數據編碼。第一個像素時鐘輸出R分量與G分量的低位部分,第二個像素時鐘輸出G分量的高位部分與B分量。或是在第一個像素時鐘輸出B分量與G分量的低位部分,第二個像素時鐘輸出G分量的高位部分與R分量。因有效數據一共只有15位,故第二個像素時鐘的最高位數據并不使用,CMOS影像攝像機會通常直接輸出低電平。錯誤!找不到參照來源。示意RGB555格式下,DVP數據捕獲與包裝方式。圖31. RGB555格式數據捕獲與包裝 ? ?YUV422此格式下,CMOS影像攝像機每兩個像素時鐘輸出一個半字(16位)數據的像素。每組半字數據包含一個亮度像素分量Y,與一個色度像素分量U或V,皆以8位進行數據編碼。色度分量U與V會在各像素間交替,相鄰兩像素使用不同色度分量。攝像機于每個像素時鐘輸出一組像素分量,第一個像素時鐘輸出Y分量,第二個像素時鐘則輸出U分量或V分量。或是在第一個像素時鐘輸出U分量或V分量,第二個像素時鐘輸出Y分量。錯誤!找不到參照來源。示意在YUV422格式下,DVP數據捕獲與包裝方式,色度像素分量U與V順序可互換。圖32. YUV422格式數據捕獲與包裝 ? ?Y8Y8(Y-only)格式此格式下,CMOS影像攝像機每一個像素時鐘輸出一個字節(8位)數據的像素表示亮度Y,以8位進行數據編碼。于此格式下,CMOS影像攝像機不輸出色度信息。錯誤! 找不到參照來源。示意在Y8(Y-only)格式下,DVP數據捕獲與包裝方式。圖33. Y8(Y-only)格式數據捕獲與包裝 ? ?DVP Lib
?DVP功能開啟/關閉DVP各功能在設定上沒有先后順序,只有dvp_capture_enable開啟后馬上會有影像輸出,所以必須在完整設定(包含I2C/EDMA/…)后再啟動- dvp_enable
- dvp_capture_enable
- dvp_sync_mode_set(DVP_SYNC_MODE_HARDWARE)
- dvp_hsync_polarity_set
- dvp_vsync_polarity_set
- dvp_sync_mode_set(DVP_SYNC_MODE_EMBEDDED)
- dvp_sync_code_set
- dvp_sync_unmask_set
- dvp_capture_mode_set
- dvp_enhanced_framerate_set
- dvp_enhanced_framerate_set
- void dvp_window_crop_set
- dvp_zoomout_set
dvp_zoomout_set(dvp_pcdc, dvp_pcds, dvp_lcdc, dvp_lcds);
dvp_pcdc:-DVP_PCDC_ALL, 全部捕獲,或是使用進階型圖像尺寸調縮功能-DVP_PCDC_ONE_IN_TWO, 啟用捕獲舍棄控制,于兩個像素數據之中,捕獲一個-DVP_PCDC_ONE_IN_FOUR, 啟用捕獲舍棄控制,于四個像素數據之中,捕獲一個-DVP_PCDC_TWO_IN_FOUR, 于四個像素數據之中,捕獲連續兩個dvp_pcds:
-DVP_PCDS_CAP_FIRST, 捕獲第一組數據(一個或兩個像素數據),舍棄下一組-DVP_PCDS_DROP_FIRST, 舍棄第一組數據(一個或兩個像素數據),捕獲下一組dvp_lcdc:
-DVP_LCDC_ALL, 全部捕獲,或是使用進階型圖像尺寸調縮功能-DVP_LCDC_ONE_IN_TWO, 啟用捕獲舍棄控制,于兩條圖像行之中,捕獲一條dvp_lcds:
-DVP_LCDS_CAP_FIRST, 捕獲第一條圖像行之數據,舍棄下一條-DVP_LCDS_DROP_FIRST, 舍棄第一條圖像行之數據,捕獲下一條 ?圖像尺寸調整-進階型- dvp_enhanced_scaling_resize_enable
- dvp_enhanced_data_format_set
- dvp_monochrome_image_binarization_set
Sensor-DVP-LCD
?圖34. Sensor–DVP-LCD ?Step1: Initiate sensor OV5640 (By I2C) and LCD (By XMC)Step2: Configure DVPStep3: Configure EDMA圖35. dvp_dma_init ?Step4: Enable DVPStep1~3無順序相依性,但Step4一定要最后執行可從LCD上直接顯示實際影像 ? ?圖36. Sensor–DVP–SRAM(or SDRAM) ?Step1: Initiate sensor OV5640 (By I2C) and SRAM/SDRAMStep2: Configure DVPStep3: Configure EDMA圖37. dvp_dma_init
?Step4: Enable DVPStep1~3無順序相依性,但Step4一定要最后執行可以循以下方式輸出影像(影像傳輸完畢后須關閉DMA以及DVP防止影像被覆蓋):1. 使用J-Link或其他軟件擷取出影像buffer內容,再用可看指定影像格式的軟件觀看2. 使用UART或其他方式將影像buffer內容傳輸至PC,再用可看指定影像格式的軟件觀看圖38. PC View
? ?EDMA link list mode
?如果應用上不會改變DVP輸出影像的大小,就可以考慮用EDMA的link list mode來提高DMA的效率。經由鏈接列表傳輸機制,用戶可以將幾種不同的傳輸鏈接在一起,以提高DMA應用程序的系統吞吐量。每個傳輸信息都可以通過軟件存儲在描述符中,并且DMA從主存儲器加載描述符。
Link list機制為:
1. 預先規劃一塊buffer存放link list table,內容格式如下,詳細內容請參考EDMA章節圖39. 描述符格式 ?圖40. 鏈接列表指針的用法
?2. 建立link list table(需預先規劃存放影像的地址)
Example:圖41. link list table ?(1) 假定影像輸出的大小為320x240格式為YUV422/RGB565單張圖像文件案大小為320x240x2=153600 bytes單張影像有240條vertical line每一條line有320 pixel=640 bytes(2) 規劃一塊固定的Buffer存放link list table(假定位于0x20010000, 大小為4000 bytes)(3) 假定影像輸出的地址為0x20020000(4) 建立link list table每一條vertical line都需要填以下信息CNT[15:0]=0xA0(DMA長度為word 4 bytes, 所以DMA CNT填640/4=0xA0)PADDR[31:0]=DVP_DT, 固定為0x5005_0028M0ADDR[31:0]=每條vertical line存放的地址(存放影像的起始地址*0x280*vertical line index)LLP[31:0]=下一筆link list entry所在地址(link list的起始地址*0x10*(vertical line index+1)), 最后一筆LLP為0代表影像結束,如要重新傳輸影像則填link list的起始地址 ?案例 OV5640 Capture?
?功能簡介
?實現將影像從 Sensor OV5640 輸入到 DVP, 再透過 EDMA 搬移至 LCD 顯示 ?資源準備
?1) 硬件環境:對應產品型號的AT-START BOARD2) 軟件環境
projectat_start_f4xxexamplesdvpov5640_capture ?軟件設計
?1) 配置流程- 開啟DVP、EDMA、I2C、XMC時鐘
- 配置LCD、OV5640、DVP
- 配置EDMA數據流
- 開啟DVP、EDMA相關中斷
- 開啟DVP、EDMA數據流
- 確認LCD顯示是否正確
2) 代碼介紹
- main函數代碼描述
- LCD函數代碼描述
- OV5640函數代碼描述
- EDMA函數代碼描述
- DVP函數代碼描述
實驗結果
?圖42. LCD View ? 審核編輯:湯梓紅
評論
查看更多