关于AD7771 驱动与数据读写问题

请问一下关于AD7771的驱动与数据读出问题:

首先 我先对AD7771的寄存器进行了 初始化  

EN_CH1[0]=0x113C;
DeTxBuffer[0]=0x96FF;//
Tx_SPI_REST[0]=0xFFFF;//??spi??
Tx_SPI_SLAVER_EN[0]=0x1390;//???spi?????
TX_DISALBE_write[0]=0x8000;/
updata[0]=0x6401;
POWERSAR[0]=0x1540;
EN_SAR[0]=0x0800;
en_sar[0]=0x1410;
SRC1[0]=0x6002;
SRC2[0]=0x6100;
SRC3[0]=0x6200;
SRC4[0]=0x6300;

主要配置了这些相关寄存器与参数

然后我采用轮询的方式进行读取AD7771 8个通道采集回来的值,程序如下

uint32_t ad7771_spi_int_adc_read()
{
unsigned char adc_byte_0 = 0;
unsigned char adc_byte_1 = 0;
unsigned char adc_byte_2 = 0;
unsigned char adc_byte_3 = 0;
uint32_t adc_value = 0;

adc_byte_3 = ad7771_spi_write_byte(0x80);
adc_byte_2 = ad7771_spi_write_byte(0x00);
adc_byte_1 = ad7771_spi_write_byte(0x80);
adc_byte_0 = ad7771_spi_write_byte(0x00);

adc_value |= ((uint32_t)adc_byte_3<<24)&0xFF000000;
adc_value |= ((uint32_t)adc_byte_2<<16)&0x00FF0000;
adc_value |= ((uint32_t)adc_byte_1<< 8)&0x0000FF00;
adc_value |= ((uint32_t)adc_byte_0<< 0)&0x000000FF;

return adc_value;
}

int32_t ad7771_read_data(uint32_t *p_array)
{
uint8_t i = 0;
uint8_t f ;
uint32_t adc_value = 0;

AD7771_CS_0();

if(AD7771_DRDY)
{
i=i;
}
else
{
i=i;
}

while(!AD7771_DRDY);
while(AD7771_DRDY);
adc_value = ad7771_spi_int_adc_read();
if (((adc_value>>24) & 0x70 )==0x00) //0通道
{
p_array[0]=adc_value&0xffffff;

}
if (((adc_value>>24) & 0x70 )==0x10) //1通道
{
p_array[1]=adc_value&0xffffff;
}
if (((adc_value>>24) & 0x70 )==0x20) //2通道
{
p_array[2]=adc_value&0xffffff;
}
if (((adc_value>>24) & 0x70 )==0x30) //3通道
{
p_array[3]=adc_value&0xffffff;
}
if (((adc_value>>24) & 0x70 )==0x40) //4通道
{
p_array[4]=adc_value&0xffffff;
}
if (((adc_value>>24) & 0x70 )==0x50) //5通道
{
p_array[5]=adc_value&0xffffff;
}
if (((adc_value>>24) & 0x70 )==0x60) //6通道
{
p_array[6]=adc_value&0xffffff;
}if (((adc_value>>24) & 0x70 )==0x70) //7通道
{
p_array[7]=adc_value&0xffffff;
}
AD7771_CS_1();

return 1;
}

我这样读取回来的数据 不清楚问题出在了哪里  这个是我读取回来的波形  我输入接的 1Khz 5V的正弦波  

请问 我应该怎么去调整程序呢 那部分有问题呢

Parents Reply Children
No Data