AnsweredAssumed Answered

ADN4605 Read register failed!!

Question asked by 1829952242@qq.com on Jan 22, 2016
Latest reply on Jan 25, 2016 by jmarshma

Hi

I use SPI read ADN4605 Register  return 0xff

 

 

 

 

void Wire_ADV4605(unsigned char OUT_data,unsigned char IN_data,unsigned char Data)

{

  unsigned char icount;

   xCS2_H;

  SCLK2_H;//

  delay_us(3);

  xCS2_L;

  delay_us(3);

  

  //Add  A8-A0

  for(icount=0;icount<8;icount++)

  {

  SCLK2_L;//

 

 

 

  if(OUT_data&0x80)//1000 0000

  {DI2_H;}

  else

  { DI2_L;}

  delay_us(3);

   SCLK2_H;

 

  OUT_data<<=1;

  delay_us(3);

  }

  delay_us(3);

  for(icount=0;icount<8;icount++)

  {

  SCLK2_L;//

 

 

  if(IN_data&0x80)//1000 0000

  {DI2_H;}

  else

  { DI2_L;}

 

  delay_us(3);

   SCLK2_H;

 

  IN_data<<=1;

  delay_us(3);

  }

  for(icount=0;icount<8;icount++)

  {

  SCLK2_L;//

 

 

  if(Data&0x80)//1000 0000

  {DI2_H;}

  else

  { DI2_L;}

 

  delay_us(3);

   SCLK2_H;

 

  Data<<=1;

  delay_us(3);

  }

 

 

  

 

  ///////////////

  SCLK2_H;//

  delay_us(3);

  xCS2_H;

 

 

  // delay_us(1);

}

 

 

 

 

u8 Read_ADV4605(unsigned char OUT_data,unsigned char IN_data)

{

  unsigned char icount;

 

  u8 Data=0;

  xCS2_L;

  SCLK2_H;//

  delay_us(3);

  xCS2_L;

  delay_us(3);

for(icount=0;icount<8;icount++)

  {

  SCLK2_L;//

  

 

  if(OUT_data&0x80)//1000 0000

  {DI2_H;}

  else

  { DI2_L;}

 

  delay_us(3);

   SCLK2_H;

 

  OUT_data<<=1;

  delay_us(3);

  }

  delay_us(3);

  for(icount=0;icount<8;icount++)

  {

  SCLK2_L;//

 

 

  if(IN_data&0x80)//1000 0000

  {DI2_H;}

  else

  { DI2_L;}

 

  delay_us(3);

   SCLK2_H;

 

  IN_data<<=1;

  delay_us(3);

  }

    SCLK2_L;

  delay_us(3);

 

  for(icount=0;icount<8;icount++)//8Bits

  {

  SCLK2_H;

  delay_us(3);

   Data<<=1;

  SCLK2_L;

  delay_us(3);

 

  if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_5))

  {Data++;}

 

 

 

  }

 

  ///////////////

  SCLK2_H;//

    delay_us(3);

  xCS2_H;

 

  return Data;

  // delay_us(1);

}

 

 

 

 

void Config_Date2(unsigned char OUT_data,unsigned char IN_data)

{

  unsigned char icount;

  

  SCLK2_H;//

  xCS2_H;//

  DI2_H;//

  xCS2_L;

  SCLK2_L;//

   DI2_L;

  SCLK2_H;

  SCLK2_L;

  

  //Add  A8-A0

  for(icount=0;icount<8;icount++)

  {

  if(OUT_data&0x80)//1000 0000

  DI2_H;

  else

  DI2_L;

  OUT_data<<=1;

  SCLK2_H;

  SCLK2_L;

  }

  //Data

  for(icount=0;icount<7;icount++)//8Bits

  {

  if(IN_data&0x80)

  DI2_H;

  else

  DI2_L;

  IN_data<<=1;

  SCLK2_H;

  SCLK2_L;

  }

  //the last bit of IN_data

  ///////////////

  if(IN_data&0x80)

  DI2_H;

  else

  DI2_L;

  ///////////////

  SCLK2_H;//

  xCS2_H;

  SCLK2_L;

 

  // delay_us(1);

}

 

 

Wire_ADV4605(0x02,0x00,0x00);
Wire_ADV4605(0x02,0x09,0x00);
x= Read_ADV4605(0x03,0x09);

Do you haveExamples of read and write registers and switching channels

Outcomes