s3c2440的摄像接口应用

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情

s3c2440提供了一个摄像接口,使开发人员很容易地实现摄像、照相等功能。摄像接口包括8位来自摄像头的输入数据信号,一个输出主时钟信号,三个来自摄像头的输入同步时钟信号和一个输出复位信号。摄像接口的主时钟信号由USB PLL产生,它的频率为96MHz,再经过分频处理后输出给摄像头,摄像头再根据该时钟信号产生三个同步时钟信号(像素时钟、帧同步时钟和行同步时钟),反过来再输入回s3c2440。

 

       s3c2440仅仅提供了一个摄像接口,因此要实现其功能,还需要摄像头。在这里,我们使用OV9650。OV9650内部有大量的寄存器需要配置,这就需要另外的数据接口。OV9650的数据接口称为SCCB(串行摄像控制总线),它由两条数据线组成:一个是用于传输时钟信号的SIO_C,另一个是用于传输数据信号的SIO_D。SCCB的传输协议与IIC的极其相似,只不过IIC在每传输完一个字节后,接收数据的一方要发送一位的确认数据,而SCCB一次要传输9位数据,前8位为有用数据,而第9位数据在写周期中是Don’t-Care位(即不必关心位),在读周期中是NA位。SCCB定义数据传输的基本单元为相(phase),即一个相传输一个字节数据。SCCB只包括三种传输周期,即3相写传输周期(三个相依次为设备从地址,内存地址,所写数据),2相写传输周期(两个相依次为设备从地址,内存地址)和2相读传输周期(两个相依次为设备从地址,所读数据)。当需要写操作时,应用3相写传输周期,当需要读操作时,依次应用2相写传输周期和2相读传输周期。因此SCCB一次只能读或写一个字节。下面我们就用s3c2440的IIC总线接口分别与OV9650的SIO_C和SIO_D相连接来实现SCCB的功能。具体的读、写函数为:

 

上面程序中,我们是用循环语句读取OV9650的寄存器0x1C和0x1D的,之所以这样,是为了防止只读取一次时,会有读取不正确的现象发生。而一旦正确读取了厂商ID信息,再读写OV9650寄存器,一般就不会发生读写的错误。

 

       下面就介绍s3c2440摄像接口的相关配置。摄像接口有两个相互独立的DMA通道——P通道(预览通道)和C通道(编解码通道)。P通道主要是存储用于视频显示的RGB图像数据,C通道主要是存储用于编解码的YCbCr图像数据。在这里我们主要是把OV9650采集到的视频信息实时显示在LCD上,因此只介绍P通道的用法。

 

       设置s3c2440摄像接口一个很重要的步骤就是设置视频尺寸大小。我们把由OV9650采集到的视频尺寸称为源,即源水平尺寸和源垂直尺寸,其中源水平尺寸必须是8的整数倍。这个尺寸是通过配置OV9650的相关寄存器实现的。我们把这两个值分别放入输入源格式寄存器CISRCFMT的第16位至第28位,和第0位至第12位内,例如通过OV9650,采集的到的视频尺寸为640×480,则把640和480分别放入寄存器CISRCFMT中的相应位置即可。我们把实际显示的视频尺寸称为目标,即目标水平尺寸和目标垂直尺寸,这里这个尺寸就是LCD的尺寸。我们把这两个值分别放入预览DMA目标图像格式寄存器CIPRTRGFMT的第16位至第28位,和第0位至第12位内,例如LCD的尺寸为320×240,则把320和240分别放入寄存器CIPRTRGFMT中的相应位置即可。另外还需要把这两个值的乘积放入预览缩放目标面积寄存器CIPRTAREA内。源尺寸和目标尺寸往往是不一样大小的,那么可能还需要设置偏移量,即水平偏移量和垂直偏移量,应该把这两个值分别放入窗口偏移寄存器CIWDOFST的第16位至第26位,和第0位至第10位内,其中这个寄存器的第31位用于控制是否需要设置偏移量,当偏移量为0或不需要设置偏移量时,这一位应为0,否则为1。显然,通过源尺寸、目标尺寸和偏移量的设置,可以实现被摄像物体的缩放效果。当然,要实现这种缩放效果,还需要配置预览预缩放比例控制寄存器CIPRSCPRERATIO、预览预缩放距离格式寄存器CIPRSCPREDST和预览主缩放控制寄存器CIPRSCCTRL,这些寄存器的相关参数是通过计算得到的,数据手册上有详细的说明,而且还有标准的函数可以调用,因此在这里就不过多介绍。

 

       前面已经介绍过,摄像接口都是通过DMA实现数据交换的。s3c2440能够在内存中各开辟四块乒乓存储区域,用于实现P通道和C通道的快速数据传递。在P通道中,寄存器CIPRCLRSA1、CIPRCLRSA2、CIPRCLRSA3和CIPRCLRSA4分别用于表示这四块内存的首地址。另外在DMA数据传递中,还要让DMA知道如何进行传递,即一次传输多少个字节,这需要设置预览DMA控制相关寄存器CIPRCTRL的主突发长度和剩余突发长度,这两个值也可以通过调用标准函数来求得。另外在完成每一帧视频采集后,会触发一个视频中断。

 

       下面就给出一段具体的程序,利用OV9650实时地在LCD上显示视频,并通过UART来控制视频,让视频图像放大,缩小,以及实现照相的功能(让图像定格在LCD上)。

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zhaocj/archive/2010/06/07/5653479.aspx

s3c2440 camif接口摄像头驱动分析——基于tq2440的ov9650.c 前言             最近想做摄像头驱动,看了一些文章,对摄像头驱动的结构还是很晕。于是决定分析内核自带的驱动程序。内核的cmos摄像头 有用v4l2的,也有用arm的camif codes通道结构的。本文是针对s3c2440 camif接口而写的驱动的代码导读。写得不好请多多指教。 一、开发环境 1.开发板:tq2440开发板 2.arm cpu:s3c2440 3.摄像 阅读详情

相关推荐

【ARM学习笔记】一、S3C2440A官方简介

S3C2440A 是三星公司推出的16/32位精简指令集(RISC)微型处理器,它基于ARM v9系列的ARM920T核心,主要为手持设备和普通应用提供了低功耗的高性能的小型芯片微型控制器的解决方案。 S3C2440A 基于ARM920T 核心,0.13μm 的CMOS 标准宏单元和存储器单元。低功耗,简单,精致,且全静态设计特别适合于对成本和功率敏感型的应用。它采用了新的总线架构如先进微控制总

Elitah的专栏 1万+

S3C2440 camera驱动

自己写的S3C2440 camera裸机驱动,采用类似STM32库函数的架构编写CAMIF接口驱动,适合初学者学习。

S3C2440摄像接口应用与编程

通过初始化摄像接口、采集图像数据、图像处理和显示图像,我们可以在S3C2440上实现简单的摄像功能。希望本文对您有所帮助!本文将详细介绍S3C2440摄像接口应用和编程方法,并提供相应的源代码。在上面的代码中,我们使用了一个循环来等待摄像接口采集完成的标志位。在上面的代码中,我们使用S3C2440的寄存器来配置摄像接口的相关参数。在上面的代码中,我们将处理后的图像数据写入LCD的显存中,并通过刷新LCD屏幕显示来展示图像。在上面的代码中,我们采用了一个简单的灰度化算法,将每个像素的RGB值转换为灰度值。

TechProX的博客 216

S3C2440裸奔---摄像头源代码

首先需要搭建一个可以编译代码的环境。从一开始我就不想用ADS(安装完ADS后会产生一个CodeWarrior for ARM Developer Suite的工具,可以编译和调试代码),虽然它是个很好的工具,但是它却隐藏了很多的细节,不利于新手去深度学习。所以我还是希望从Makefile入手,一步一步弄懂所有的细节。 第一步:需要先搭建一个Linux环境,我是安装在虚拟机上面的。安装好Linux后,再从网上下载arm-linux-gcc,一般解压后之后就可以直接使用了,但需要先设置好环境参数。 第二步:编写代码,然后在Linux系统上进行编译。代码在后面会给出。 第三步:需要把编译好的bin文件烧写到板子上。这个需要使用J-Link烧录器,还需要安装“Setup_JLinkARM_V408k.exe”软件,特别是一些参数的设置非常重要。

基于V4L2的视频驱动开发

基于V4L2的视频驱动开发 编写基于V4L2视频驱动主要涉及到以下几个知识点: ●摄像头方面的知识 要了解选用的摄像头的特性,包括访问控制方法、各种参数的配置方法、信号输出类型等。 ●Camera解码器、控制器 如果摄像头是模拟量输出的,要熟悉解码器的配置。最后数字视频

Run for the future! 4494

摄像头驱动学习

\drivers\media\video\s3c2440camif.c \drivers\media\video\s3c2440_ov9650.c \drivers\media\video\sccb.c 硬件连接 I2C总线连接 I2CSCL ——GPE14 I2CSDA——GPE15 Sccb.h #define SIO_C S3C2410_GPE14 #define SIO_D S3C241...

weixin_34176694的博客 290

JZ2440学习笔记一

JZ2440学习笔记

hbutluoxi的博客 1293

s3c2440CAMERA操作控制程序OV9650摄像

S3C2440 控制0V9650摄像头的程序

OV9650+S3C2440摄像头视频采集

OV9650+S3C2440摄像头视频采集

S3C2440摄像接口应用

<br />s3c2440提供了一个摄像接口,使开发人员很容易地实现摄像、照相等功能。摄像接口包括8位来自摄像头的输入数据信号,一个输出主时钟信号,三个来自摄像头的输入同步时钟信号和一个输出复位信号。摄像接口的主时钟信号由USB PLL产生,它的频率为96MHz,再经过分频处理后输出给摄像头,摄像头再根据该时钟信号产生三个同步时钟信号(像素时钟、帧同步时钟和行同步时钟),反过来再输入回s3c2440。<br /> <br />       s3c2440仅仅提供了一个摄像接口,因此要实现其功能,还需要摄像

lcqacjj的专栏 482

Linux_S3C2440_CAMIF接口驱动程序(二)OV9650驱动完全解析

#ifndef __S3C2440CAMIF_H__ #define __S3C2440CAMIF_H__ //这是为了防止c头文件多次包含造成重复定义错误。 #define OV9650_SCCB_ADDR 0x60//定义设备地址 #define OV9650_MANUFACT_ID 0x7FA2 #define OV9650_PRODUCT_ID 0x9650 stati

KinGil 2438

Linux摄像头驱动开发实践:以Arm9平台为例

Linux操作系统作为开源领域的佼佼者,广泛应用于服务器、嵌入式设备和桌面计算等领域。随着技术的发展,摄像头成为这些设备上不可或缺的组件。Linux提供了一套成熟稳定的摄像头驱动解决方案,即Video for Linux Two(V4L2)。本章将对Linux摄像头驱动做一个宏观的介绍,为进一步的详细分析打下基础。首先,我们将探讨Linux摄像头驱动在操作系统中的地位和作用。Linux内核作为一个完整的操作系统核心,它管理着硬件设备与软件应用之间的交互。

weixin_42405592的博客 739

opencv开源图像处理函数库在S3C2440移植

一、简介 OpenCV是一个基于C/C++语言的开源图像处理函数库其代码都经过优化,可用于实时处理图像具有良好的可移植性可以进行图像/视频载入、保存和采集的常规操作具有低级和高级的应用程序接口(API) 二、功能说明 图像数据操作(内存分配与释放,图像复

老徐2014 6488
上一篇: 摄像头参数的设置
下一篇: 蓝牙
smart_qiang
博客等级 码龄18年 16粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值