ATK-OV7670 5月10号星期日

ATK-OV7670模块图像采集过程

1.等待OV7670帧同步信号(vsync)
2.fiofo写指针复位(fifo_wrst=0)
3.fifo写使能(fifo_wfn=1)
4.等待第二个帧同步信号(vsync)
5.fifo写禁止(fifo_wen=0)

ATK-ov7670模块图像采集过程

1.等待ov7670帧同步信号(vsync)
2.fifo写指针复位(fifo_wrst=0)
3.fifo写使能(fifo_wen=1)
4.等待第二个帧同步信号(vsy’n’c)
5.fifo写禁止(fifo_wen=0)

ATK-OV7670模块图像数据读取过程

1.fifo读指针复位(fifo_rrst=0)
2.输出读fifo时钟(fifo_rclk)
3.读第一个像素高字节(D【7:0】)
4.输出读fifo时钟(fifo_rck)
5.读第一个像素低字节(D[7:0])
6.输出读fifo时钟(fifo_rclk)
7.读第二像素的高字节(D[7:0])
8…输出读fifo时钟(fifo_rclk)
9.循环

驱动函数

SCCB_INIT

//IO操作函数	 
#define SCCB_SCL    		PDout(3)	 	//SCL
#define SCCB_SDA    		PGout(13) 		//SDA	 
#define SCCB_SDA_IN()  {GPIOG->CRH&=0XFF0FFFFF;GPIOG->CRH|=0X00800000;}
//GPIOG->CRH&=0XFF0FFFFF清除GPIOG->CRH|=0X00800000;}13位设置为8.就是带上拉的输入。
#define SCCB_SDA_OUT() {GPIOG->CRH&=0XFF0FFFFF;GPIOG->CRH|=0X00300000;}
//GPIOG->CRH&=0XFF0FFFFF清除,GPIOG->CRH|=0X00300000;}设置为3,就是推完输出

接下来初始化SCCB接口

//初始化SCCB接口
//CHECK OK
void SCCB_Init(void)
{			
 	GPIO_InitTypeDef  GPIO_InitStructure;
 	
 	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOG, ENABLE);	 //使能PB端口时钟
	
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;				 // 端口配置
 	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; 		 //输入
 	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 	GPIO_Init(GPIOG, &GPIO_InitStructure);
 	GPIO_SetBits(GPIOG,GPIO_Pin_13);						 // 输出高

	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;				 // 端口配置
 	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		 //输输出
 	GPIO_Init(GPIOD, &GPIO_InitStructure);
 	GPIO_SetBits(GPIOD,GPIO_Pin_3);						 // 输出高
 
	SCCB_SDA_OUT();	   //推完输出模式
}			 

在这里插入图片描述
//SCCB起始信号
//当时钟为高的时候,数据线的高到低,为SCCB起始信号
//在激活状态下,SDA和SCL均为低电平

void SCCB_Start(void)
{
    SCCB_SDA=1;     //数据线高电平	   
    SCCB_SCL=1;	    //在时钟线高的时候数据线由高至低
    delay_us(50);  
    SCCB_SDA=0;
    delay_us(50);	 
    SCCB_SCL=0;	    //数据线恢复低电平,单操作函数必要	  
}

//SCCB停止信号
//当时钟为高的时候,数据线的低到高,为SCCB停止信号
//空闲状况下,SDA,SCL均为高电平

void SCCB_Stop(void)
{
    SCCB_SDA=0;
    delay_us(50);	 
    SCCB_SCL=1;	
    delay_us(50); 
    SCCB_SDA=1;	
    delay_us(50);
}  

在这里插入图片描述

//产生NA信号
void SCCB_No_Ack(void)
{
	delay_us(50);
	SCCB_SDA=1;	
	SCCB_SCL=1;	
	delay_us(50);
	SCCB_SCL=0;	
	delay_us(50);
	SCCB_SDA=0;	
	delay_us(50);
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值