ADI的工程师,您好,
我使用的是ADSP21479与AD5144之间采用I2C方式通信。I2C通过gpio模拟。
请问如何读取AD5144 RDAC寄存器的时序是怎样的,我在dadasheet中没有找到关于读寄存器的具体方法描述。如果有好的方法,请验证后回复,谢谢!
ADI的工程师,您好,
我使用的是ADSP21479与AD5144之间采用I2C方式通信。I2C通过gpio模拟。
请问如何读取AD5144 RDAC寄存器的时序是怎样的,我在dadasheet中没有找到关于读寄存器的具体方法描述。如果有好的方法,请验证后回复,谢谢!
可以参考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;
}
您好,如果有疑问请在相应专区发帖询问哈~