CAMIF 的bus priority 只能比LCD 的priority 低,要比其她hardware都高。
CAMIF 有兩個path : preview, Capture。
preview 和 capture path 都各有4個target frame memory (4 pingpong frame memory)。
意思是依照1,2,3,4,1,2,3,4,,,依序放置 ?
pixel 的格式有YCbCr和RGB兩種方式。
YCbCr是Capture Path使用的方法,Y, Cb, Cr資料非別放在每個frame的獨立page,所以program 可以獨立得到image的Y frame資料 (或Cb, Cr資料)。
RGB是Preview Path使用的方法(Capture path好像也可以設定成這樣),可以選用 32 bit/16bit模式的RGB資料,但是每個pixel的RGB資料是組合在一起的(2或4bytes),依序放置的frame memory中,不像 YCbCr模式的方開放置。
MSDMA (不知道是什麼的縮寫)
MSDMA只能在previewpath使用 (SEL_DMA_CAM='1')。
MSDMA可以作memory data scaling,但是只支援 YCbCr Mode。
依照示意圖,MSDMA好像只是DMA,單純的作memory 到 memory的搬移,但是她還在搬移的時候作scaling的運算。
奇怪得的是,MSDMA在圖中,是作為 CAMIF--preview path的輸入端,也就是說,MSDMA處理過後的資料,進入camif的preivew path (?那MSDMA鎖需要的frame data是哪一個device放到memory中的?)
REGISTERS
CISRCFMT : 設定 source video 的format。
Bt601, Bt656 ?
YCbCr Order
H, V Size
CIWDOFST : 設定 source video 需不需要作clip (切割: 左右上下)。
原來在 CISRCFMT中設定的source H, V size。經過這個register 中設定的上下
CIWDOFST只包含一側(上,左)的offset設定,另一側(下,右)在CIWDOFST2 設定。
設定這個clip (crop) 動作有一堆限制:
crop後的image 水平 pixel 必需要是8的倍數,同時又是PreHorRatio的4倍數
crop後的image 垂直 pixel ,作scale-down時,必需要是 PreVerRatio的倍數。
左右切下來(不顯示)的pixel數 >= Source 水平pixel數 x PreHorRatio_Pr
CIGCTRL : 設定一些interface (PCLK, VSYNC, HREF 極性),Software/hardware reset,輸出test pattern,....etc。
要作software reset 有一定的sequence , 601 mode和656 mode還不一樣..
要配合 CISRCFMT register作設定...有點囉唆
接下來是frame memory 的設定.. CODEC Path 的 YCbCr Frame Memory.
CICOYSA1.2.3.4
CICOCBSA1.2.3.4
CICOCRSA1.2.3.4
上面的12個register分成3組 : Y, Cb, Cr,每組有4個區域,就是分別用來設定 Y, Cb, Cr的pin-pong frame memory 的start address。
camif 的DMA會自動將image的內容依照各個frame,依序送到這些register指定的位置。
CICOTRGFMT : 設定Codec path 的 target image (就是 camif 轉換後,放到frame memory的格式..)
Codec path 水平/垂直 pixel 數 (Horizontal/Vertical Size)
mirror / rotation
又有限制:水平/垂直pixel數一定要比 source 小 (因為crop關係 ?)
水平pixel數必需要是16的倍數
在RGB Mode,垂直pixel數比需要是8的倍數
CICOCTRL : 設定DMA每次要搬的byte(word?)數
DMA是一行一行 (一條一條水平線)的搬video 信號到 frame memory中,所以要告訴DMA 每一行要搬幾個byte(word)。
DMA的一次搬移動作分為兩個階段 : main burst, remained burst。
--------------------------------------------------------------------------------
Preview Path 的registers
CIPRCLRSA1.2.3.4: ping-pong frame memory 的設定register。
CIPRTRGFMT : 設定 target (轉換後的) image format
Horizontal pixel number (16bpp時,4的倍數。 24bpp時,2的倍數)
Vertical pixel number (8的倍數)
mirror / rotate
一樣,target size不可以比source 大
CIPRCTRL : preview path 的DMA 控制。
DMA是一行(水平線)一行的搬,以 VGA ( 水平640 pixel),16 bpp 為例:
一個word可以放兩個pixel 。
所以一行 640/2 = 320 word。
320 % 16 = 0 (整除),所以 main brust = 16, remained brust = 16。
CIPRSCPRERATIO : pre-scaler ratio
這部份要參考CODEC path 的說明 (設法一樣)。
--------------------------------------------------------------------------------
camera interface 的重點好像就是在選擇 codec path 和camera interface上,這兩個path 是獨立的。
功能好像也一樣 (將codec path 的output設為 RGB的話,就和preview path 一樣了)。
preview path 有 水平處理數不得超過640的限制,Codec path 則沒有說明。
另外就是 preview path 還有一路 MSDMA可以選擇,但是...不知道要怎模用.