基于Video4Linux的攝像頭驅動設計
3.2.2 DMA配置
本系統采用二維DMA來提高數據的傳輸速度,采用16位傳輸,且傳輸完一場視頻數據后產生中斷。dma_x_count=720(相當于每行數據需傳輸的次數,每行720個像素點,每個像素點2個字節。每行要傳720×2個字節,而dma是16位傳輸,所以x_count=720)。 dma_x_modify=2(相鄰兩次傳輸數據的偏移地址,以字節為單位,因為是16位傳輸,所以為2)。
由于PAL制視頻數據是隔行掃描,每幀分為奇偶兩場,兩場在時域上是分開的,但是在數據處理時需要將兩場合成一幀進行處理,因此為了減少CPU的處理時間,可以利用DMA直接進行場合成。在一場的傳輸中,DMA在傳輸完一行數據后,預留下一行的存儲空間,將數據存放到第三行的地址。在一場數據傳輸完后,下一場的數據就填充上一場預留的存儲空間,也是隔行存儲,這樣兩場數據就合成一幀數據了。所以,dma_y_modify=1442(一行720像素點,占720×2字節。而一行末地址到下一行首地址還需2字節。所以720×2+2=1442)。同時,兩場數據存放的起始地址的設置間隔也是1442字節。
3.3 中斷服務子程序
本系統的中斷服務子程序主要是一場數據采集完后,產生中斷,并根據數據的奇偶場做出相應的處理。其流程如圖2所示。本文引用地址:http://www.104case.com/article/166878.htm
4 結束語
本文介紹了在Blackfin DSP和Linux的平臺下,攝像頭驅動的體系結構和具體實現。此驅動由測試程序測試,可以正常工作。此驅動尚存在不足之處,那就是在驅動的抓幀過程中沒有采用乒乓操作,但是采用了兩個幀緩存來存取數據,因此乒乓操作可以在上層應用中完成。
評論