CAMIF 的bus priority 只能比LCD 的priority 低,要比其她hardware都高。
CAMIF 有兩個path : preview, Capture。
preview 和 capture path 都各有4個target frame memory (4 pingpong frame memory)。
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。
REGISTERS
CISRCFMT : 設定 source video 的format。
接下來是frame memory 的設定.. CODEC Path 的 YCbCr Frame Memory.
camif 的DMA會自動將image的內容依照各個frame,依序送到這些register指定的位置。
CICOTRGFMT : 設定Codec path 的 target image (就是 camif 轉換後,放到frame memory的格式..)
CICOCTRL : 設定DMA每次要搬的byte(word?)數
Preview Path 的registers
CIPRCLRSA1.2.3.4: ping-pong frame memory 的設定register。
CIPRTRGFMT : 設定 target (轉換後的) image format
CIPRCTRL : preview path 的DMA 控制。
CIPRSCPRERATIO : pre-scaler ratio
camera interface 的重點好像就是在選擇 codec path 和camera interface上,這兩個path 是獨立的。
功能好像也一樣 (將codec path 的output設為 RGB的話,就和preview path 一樣了)。
preview path 有 水平處理數不得超過640的限制,Codec path 則沒有說明。
另外就是 preview path 還有一路 MSDMA可以選擇,但是...不知道要怎模用.
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
- 原來在 CISRCFMT中設定的source H, V size。經過這個register 中設定的上下
- CIWDOFST只包含一側(上,左)的offset設定,另一側(下,右)在CIWDOFST2 設定。
- crop後的image 水平 pixel 必需要是8的倍數,同時又是PreHorRatio的4倍數
- crop後的image 垂直 pixel ,作scale-down時,必需要是 PreVerRatio的倍數。
- 左右切下來(不顯示)的pixel數 >= Source 水平pixel數 x PreHorRatio_Pr
要作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
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
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可以選擇,但是...不知道要怎模用.