Example #1
0
void clear_motion(void)
{
ON_CS();
 SPI_SendReceive(Motion_Clear+0x80);
 SPI_SendReceive(0xff);	//清除X Y数据
OFF_CS();
}
Example #2
0
void writr_register(u8 adress,u8 vlue)
{
ON_CS();
 SPI_SendReceive(adress+0x80);
 SPI_SendReceive(vlue);
OFF_CS();
delay_us(51);
}
Example #3
0
u8 read_register(u8 adress)
{
u8 temp;
ON_CS();
temp=SPI_SendReceive(adress+0x00);	//读
delay_us(75);
temp=SPI_SendReceive(0xff);	//提供时钟信号_读
OFF_CS();
return temp;
}
Example #4
0
float  read_average_pixel(void)	  //读平均像素
{
  float temp;
  ON_CS();
  temp=SPI_SendReceive(Pixel_Sum);
  delay_us(76);
  temp=SPI_SendReceive(0xff);
  temp=temp*256/900;
  OFF_CS();
  return temp;
}
Example #5
0
u8 read_busy(void)//写帧率的判忙  ==1忙
{
u8 temp;
ON_CS();
temp=SPI_SendReceive(Extended_Config+0x00);
delay_us(75);
temp=SPI_SendReceive(0xff);
temp&=0x80;
OFF_CS();
return temp;
}
Example #6
0
u16 read_zhenlv(void) //读帧率
{
  u16 Frame_Period_Max_Bound_Lower1,Frame_Period_Max_Bound_Upper1;
  ON_CS();
  Frame_Period_Max_Bound_Upper1=SPI_SendReceive(Frame_Period_Uppe+0x00);
  Frame_Period_Max_Bound_Upper1=SPI_SendReceive(0xff);//接收高位的帧率
  delay_ms(5);
  Frame_Period_Max_Bound_Lower1=SPI_SendReceive(Frame_Period_Lower+0x00);
  Frame_Period_Max_Bound_Lower1=SPI_SendReceive(0xff); //接收低位的帧率
  OFF_CS();
  return ((Frame_Period_Max_Bound_Upper1 << 8) | Frame_Period_Max_Bound_Lower1);
}
Example #7
0
void Read_Data_burst(void)
{
	extern u16 Alt_ultrasonic;
  static int SumX;
  static int SumY;

  unsigned char move=0;
  int  x=0;
  int  y=0;
//burst读。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
ON_CS();
SPI_SendReceive(0x50);   
delay_us(75);
move=SPI_SendReceive(0xFF);             
x=SPI_SendReceive(0xFF);
y=SPI_SendReceive(0xFF);
	if(x&0x80)
	  {
	  //x的二补码转换	
	  x -= 1;
	  x = ~x;	
	  x=(-1)*x;
	  x-=256;
 	  }
	if(y&0x80)
	  {
	  //y的二补码转换	
	  y -= 1;
	  y = ~y;	
	  y=(-1)*y;
	  y-=256;
	  } 
	SumX=SumX+x;             //累加X读入的移动数据
	SumY=SumY+y;			 //累加Y读入的移动数据
	OFF_CS();
	delay_us(4);
	OFF_CS();
sum_x=(25.4*(float)SumX *Alt_ultrasonic)/(12*1600);//距离=d_x*(25.4/1600)*n   其中n=像高:物高=8毫米:物长
sum_y=(25.4*(float)SumY *Alt_ultrasonic)/(12*1600);
  if(move&0x10!=1)
	if(move&0x80)
	{
	  Sys_Printf(Printf_USART,"%d,%d\n",sum_x,sum_y);
	}
		else
		{
			x=0;
			y=0;
		}
x=0;
y=0;
}
Example #8
0
unsigned char read(unsigned char reg)
{
    unsigned int scrold = SCR11;
    unsigned char buff[2];
    buff[0] = reg<<3 | 0x80;
    buff[1] = 0;
    // wait for the SPI to free up.
    //while(SPI_IsBusy(4));
   // spiTransferComplete=0;
    SCR11 = 0xf007;    
    ST1 |= _0002_SAU_CH1_STOP_TRG_ON;        /* disable CSI21 */
    SOE1 &= ~_0002_SAU_CH1_OUTPUT_ENABLE;    /* disable CSI21 output */
    SO1 &= ~_0200_SAU_CH1_CLOCK_OUTPUT_1;    /* CSI21 clock initial level */
    SOE1 |= _0002_SAU_CH1_OUTPUT_ENABLE;           /* enable CSI21 output */
    SS1 |= _0002_SAU_CH1_START_TRG_ON;             /* enable CSI21 */
    SPI_SendReceive(3,buff,2,buff);
    SCR11 = scrold;
        ST1 |= _0002_SAU_CH1_STOP_TRG_ON;        /* disable CSI21 */
    SOE1 &= ~_0002_SAU_CH1_OUTPUT_ENABLE;    /* disable CSI21 output */
    SO1 |= _0200_SAU_CH1_CLOCK_OUTPUT_1;    /* CSI21 clock initial level */
    SOE1 |= _0002_SAU_CH1_OUTPUT_ENABLE;           /* enable CSI21 output */
    SS1 |= _0002_SAU_CH1_START_TRG_ON;             /* enable CSI21 */
    //SPI_Transfer(4, 2, buff, buff, SPI_TransferComplete);
    //while(spiTransferComplete==0);
   // MSTimerDelay(250);
    return buff[1];
}
Example #9
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 #10
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();            
}
uint8_t WIFI_ReceiveByte(char* buf)
{
  uint8_t WIFI_Idle_Char;
  //G_WIFI_BufferIndex = 0;
    if((P7 & (1<<7)))
      {   WIFI_Idle_Char = SPI_CHAR_IDLE; 
          SPI_CS_Start(SPI_WIFI);
          SPI_SendReceive(SPI_WIFI, (uint8_t *)&WIFI_Idle_Char, 1, (uint8_t *)buf);
          SPI_CS_End(SPI_WIFI);
          return true;  
      }
    else 
     return false;
}
Example #12
0
void ADNS3080_Read(void)
{
  unsigned char move=0;
  int dx,dy;
  ON_CS();
  SPI_SendReceive(0x50);   
  delay_us(75);
  move=SPI_SendReceive(0xFF);             
  dx=SPI_SendReceive(0xFF);
  dy=SPI_SendReceive(0xFF);
  surface_quality=SPI_SendReceive(0xFF);
  if(move&0x10==1 || !move&0x80) {
    dx=0;
    dy=0;
  }else{
    if(dx&0x80) {
      //x的二补码转换 
      dx -= 1;
      dx = ~dx; 
      dx=(-1)*dx;
      dx-=256;
    }
    if(dy&0x80) {
      //y的二补码转换 
      dy -= 1;
      dy = ~dy; 
      dy=(-1)*dy;
      dy-=256;
    } 
  }
  rdx=(float)dx*avg_height*CONV_FACTOR;
  rdy=(float)dy*avg_height*CONV_FACTOR;
  X=X+rdx;             //累加X读入的移动数据
  Y=Y+rdy;       //累加Y读入的移动数据
  OFF_CS();
}
Example #13
0
INT32U SPI_Receive ( SPI_Type *SPIx, INT8U *buff, INT32U len )
{
	while(len-- != 0)
		*buff++ = SPI_SendReceive ( SPIx, 0xFF);
	return (len);
}
Example #14
0
INT32U SPI_Send ( SPI_Type *SPIx, INT8U *buff, INT32U len )
{
	while(len-- != 0) 
		SPI_SendReceive ( SPIx, *buff++);
	return (len);
}