按照Linux视频设备驱动的模型V4L(video for Linux)编写了SAA7113与S3C2440摄像机接口的驱动。驱动使用C端口模式与DMA进行通信。采样1帧图像之前,首先设置采样图像的分辨率和剪辑窗口大小等参数,然后设置DMA控制器访问的视频采样输出缓冲的内存地址,接着就可以通过设置S3C2440的CAMIF接口控制寄存器启动1帧图像的采集。当采集完1帧图像时,CAMIF接口会自动启动1次C端口的DMA通信,把采集的图像数据传到内存。传输结束后,会产生一个C端口的中断,通知驱动1帧数据采样和传输结束。具体来说,这个驱动需要实现以下功能:
struct s3c2440_camif_cfg_t {
int src_x; //输入的源图像宽度
int src_y; //输入的源图像高度
int
dst_x; //输出的目标图像宽度
int dst_y; //输出的目标图像高度
int dst_fmt;
//输出的目标图像数据格式
int pre_x; //预览通道(P端口模式)输出的图像宽
int pre_y;
//预览通道(P端口模式)输出的图像高
int pre_fmt; //使用通道(P端口模式)时设为1
__u16 bypass;
//为1时表示不启用按比例的图像放大/缩小
__u16 ycbcr; //输入图像的YcbCr顺序
struct s3c2440_camif
*dev; //设备的系统信息
};