如何通过IIC读取AD5144的RDAC寄存器的值

ADI的工程师,您好,

我使用的是ADSP21479与AD5144之间采用I2C方式通信。I2C通过gpio模拟。

请问如何读取AD5144 RDAC寄存器的时序是怎样的,我在dadasheet中没有找到关于读寄存器的具体方法描述。如果有好的方法,请验证后回复,谢谢!

Top Replies

  • 0
    •  Analog Employees 
    on Dec 2, 2019 9:46 AM 11 months ago

    可以参考fig5,table14,I2C都是标准的接口

  • ADI的工程师,您好:   AD5144使用SPI通信,使用官方代码,输出没问题,但是读取到的值有问题。另外下面代码有①②两处疑问。

    /*******************************************************************
    * Function: ReadFromAD5144ViaSPI
    * Description: read to the AD5144 via the SPI port.
    *******************************************************************/
    unsigned int ReadFromAD5144ViaSPI(unsigned char RegAddress, unsigned char Datavalue)
    {
     unsigned char ControlValue = 0;
     unsigned char value=0;
     unsigned char i = 0;

     ControlValue = RegAddress;
     Aducm360_output_SCLK_low();
     Aducm360_output_CNV_low();
     for(i=0; i<8; i++)  //Write Control register and Read result data
     {
         Aducm360_output_SCLK_high();
        delay(1000);

       if(0x80 == (ControlValue & 0x80))  //write register code
      {
          Aducm360_output_SDIO_high();
      }
      else
      {
         Aducm360_output_SDIO_low();
      }
      ControlValue <<= 1; //Rotate data
      delay(1000);
      Aducm360_output_SCLK_low();
      delay(1000);

    }
    for(i=0; i<8; i++)
    {
       Aducm360_output_SCLK_high();
       delay(1000);
       if(0x80 == (Datavalue & 0x80))
       {
           Aducm360_output_SDIO_high();
       }
       else
       {
         Aducm360_output_SDIO_low();
       }
       Datavalue <<= 1; //Rotate data
       delay(1000);
       Aducm360_output_SCLK_low();
       delay(1000);
       if(i==7)     //①问什么需要从新进行片选操作?
       {
         Aducm360_output_CNV_high();   
         delay(1000);
         Aducm360_output_CNV_low();
       }
       delay(1000);
     }
     for(i=0; i<8; i++)  //②请问为什么这样操作? 在手册中未找到时序图。
     {
       Aducm360_output_SCLK_high();
       delay(1000);
       Aducm360_output_SCLK_low();
       delay(1000);
     }
    for(i=0; i<8; i++)  //读取8位数据
    {
       Aducm360_output_SCLK_high();
       delay(1000);
       value <<=1;
       if((pADI_GP1->GPIN&0x02)== 0x02)
       {
         value |= 0x01;
       }
      else
      {
         value &= ~0x01;
      }
      delay(1000);
      Aducm360_output_SCLK_low();
      delay(1000);
     }
     Aducm360_output_CNV_high(); //bring CS high again
     delay(1000);
     AD5144Data=value;
     return AD5144Data;
    }

  • 0
    •  Analog Employees 
    on Feb 17, 2020 1:24 AM 9 months ago in reply to zhouliyan

    您好,如果有疑问请在相应专区发帖询问哈~