先说下硬件环境:
ADSP-BF537(blackfin系列芯片),TVP5150AM1解码器,CMOS摄像头传感器(仅是一个光电传感器,没有其他处理芯片)
硬件连接说明:
CMOS摄像头传感器<----->TVP5150AM1解码器<----->ADSP-BF537芯片
CMOS摄像头传感器加上TVP5150AM1解码器才组合成了所谓的模拟摄像头。传感器经光电转换将模拟电信号输入到TVP5150AM1中,TVP5150AM1解码器经过内部处理,将模拟信号转换成数字信号,并以ITU-R BT.656格式输出到BF537芯片的PPI口上(也可以以YUV格式输出,采用前者是因为BF537的PPI控制器是支持ITU-R BT.656格式的)。
TVP5150AM1会为BF537芯片的PPI控制器提供8位视频数据及1个PPI_CLK时钟信号,而BF537会通过I2C总线来控制TVP5150AM1,比如设置TVP5150AM1片内寄存器来改变亮度、色度等。
基于Linux的摄像头驱动的编写略述:
根据以上环境编写一个Linux模拟(av)摄像头驱动程序。分为两大部分,底层硬件初始化和上层文件接口调用(file operations)。
底层部分:与摄像头采集数据相关的BF537寄存器为
DMA0_PERIPHERAL_MAP
DMA0_CONFIG
DMA0_X_COUNT
DMA0_X_MODIFY
DMA0_Y_COUNT
DMA0_Y_MODIFY
DMA0_IRQ_STATUS
DMA0_START_ADDR
PPI_CONTROL
PPI_FRAME
PPI_COUNT
PPI_STATUS
PORT_MUX
PORTF_FER
PORTG_FER
PORTFIO_INEN
PORTGIO_INEN
将以上寄存器配置后(除了状态寄存器)就可以实现摄像头采集数据了。
上层部分:主要是依照video for linux 1标准来写,以后有机会再用video for linux 2标准写。


