Example #1
0
void Write_srom(void)
{
 int i;
 ON_CS(); 
 writr_register(0x20,0x44);
 delay_us(51);
 writr_register(0x23,0x07);
  delay_us(51);
 writr_register(0x24,0x88);
 delay_us(51);
  OFF_CS();  //突发_写模式
  delay_us(340);//等待大于1帧时间
  ON_CS(); 
  writr_register(SROM_Enable,0x18);
  OFF_CS();  //突发_写模式
 delay_us(41);//  >40us
  ON_CS();
  for(i=0;i<=1985;i++)
  {
     writr_register(0x60,SROM[i]);
     delay_us(11);// >10us
  }
 OFF_CS();
 delay_us(105);	//>104us
}
Example #2
0
void Write_srom(void)                     //烧固件
{
 int i;
 ON_CS(); 
 writr_register(0x20,0x44);               //****************************************//
 delay_us(51);                            //
 writr_register(0x23,0x07);               //				这三个寄存器,手册上没有,但说了具体步骤
  delay_us(51);                           //
 writr_register(0x24,0x88);               //******************************************//
 delay_us(51);
  OFF_CS();  //突发_写模式
  delay_us(340);//等待大于1帧时间  ??每秒3000帧,则340us>1/3000=334us
  ON_CS(); 
  writr_register(SROM_Enable,0x18);
  OFF_CS();  //突发_写模式
 delay_us(41);//  >40us
  ON_CS();
  for(i=0;i<=1985;i++)
  {
     writr_register(0x60,SROM[i]);
     delay_us(11);// >10us  ,t_load时间
  }
 OFF_CS();
 delay_us(105);	//>104us
}
Example #3
0
void ADNS_Configuration(void)
{
  ON_CS(); 
  writr_register(Configuration_bits,0x10);   //设置分辨率 1600  //若Bit 4为0,则为400点每英寸
  delay_ms(3);
  writr_register(Extended_Config,0x01);
  delay_ms(3);
  if(read_busy()!=1) {//设为3000帧每秒
    OFF_CS();  //突发_写模式
    delay_ms(2);
    ON_CS();  
    SPI_SendReceive(Frame_Period_Max_Bound_Lower+0x80); //设置帧率 //先写低位再写高位
    SPI_SendReceive(0x40); //   C0 5000帧率    
    SPI_SendReceive(Frame_Period_Max_Bound_Upper+0x80);
    SPI_SendReceive(0x1f);   // 12
  } 
  clear_motion();
  OFF_CS();
}
Example #4
0
void ADNS_Configuration(void)
{
	 ON_CS(); 
	 writr_register(Configuration_bits,0x10);		//设置分辨率 1600	 //若Bit 4为0,则为400点每英寸
	 delay_ms(3);
	 writr_register(Extended_Config,0x01);      //设置为固定帧率,其值在Frame_Period_Max_Bound寄存器中
	 delay_ms(3);
	 if(read_busy()!=1)
	 {  							      //设为3000帧每秒,3000=24MHz/0x1f40,0x1f40=8000
			OFF_CS();  //突发_写模式
			delay_ms(2);
			ON_CS();	
			SPI_Simu_RW(Frame_Period_Max_Bound_Lower+0x80);	//设置帧率 //先写低位再写高位,若是读的话先读高位再读低位
			SPI_Simu_RW(0x40); //   C0, 5000帧率	   
		 // delay_us(75);
			SPI_Simu_RW(Frame_Period_Max_Bound_Upper+0x80);
			SPI_Simu_RW(0x1f);	 // 12
	 } 
	 clear_motion();
	 OFF_CS();
}
Example #5
0
void read_pixel_burst(void)//爆发读图像
{
int i,j;
writr_register(Frame_Capture,0x83); 
delay_us(1010);//等待3帧 (1/3000)*1000000*3+10 =1010us
//开始burst读
ON_CS();
SPI_SendReceive(0x40);   
delay_us(75);
for(i=0;i<30;i++)
{
	for(j=0;j<30;j++)
	{
	while(!(USART1->SR&(1<<6)));
	USART1->DR=(SPI_SendReceive(0xFF)<<2); 
    //delay_us(10);
	}
} 
OFF_CS();
delay_us(4);
OFF_CS();            
}
Example #6
0
void read_pixel(void)
{
   u8 i,j ,regValue, pixelValue,test=1;	 
  writr_register(Frame_Capture,0x83); 
  delay_us(1010);//等待3帧 (1/3000)*1000000*3+10 =1010us
  //显示数据  30*30=900
  for(i=0;i<30;i++)//列
  {
	  for(j=0;j<30;j++) //行 
	  {
	   regValue=read_register(Frame_Capture);  //读像素
	    if( test && ((regValue&0x40)==0)) //找不到第一个像素
		{
//	 Sys_Printf(Printf_USART,"Read pixel fail");		    
		}
						    test=0;
	                        pixelValue =(regValue<<2);
							while(!(USART1->SR&(1<<6)));
	  						USART1->DR=pixelValue;                               
	                        delay_us(50);
	  }
   }
  ADNS3080_reset();//重启运行
}