您好, 遇到一个AD7779数据采集的问题,请教下
1、使用平台:MSP430F5483a + AD7779
2、控制接口MSP430 IO口模拟SPI接口,控制AD7779,
单片机时钟频率为1MHz
3、目前已经成功读写AD7779寄存器
4、AD7779寄存器配置参数,
void AD7779_Setup(void) {
i=0;
ad7779_spi_init ();
ad7779_ reset () ;
延遲_ms( 200) ;
//将SPI接口配置成读写AD7779内部寄存器,默认就是读写寄存器
AD7779_Register_Write( 0x13, 0x80);
//仅使能ch0通道,禁止其他通道,先测试一个通道是否能够正常工作
AD7779_登记册_Write( 0x08, 0xFE);
//设置
电源模式,默认是低速模式
AD7779_Register_Write( 0x11, 0x24);
//设置参考电压类型,Internal Reference
AD7779_Register_Write( 0x15, 0x40);
//默认数据格式DOUT_HEADER_FORMAT,CRC header使能
AD7779_Register_Write( 0x14, 0x20);
//设置采样率MCLK=4096KHz MOD_MCLK=MCLK/8=512KHz 采样率=1KHz,那么SRC_N=MOD_MCLK/采样率=512/1=512,没有小数所以SRC_IF=0
AD7779_Register_Write( 0x60, 0x02); //SRC_N_MSB
AD7779_ Register_ write( 0x61, 0x00; // SRC_ N_ LSB)
AD7779_ register_ write( 0x62, 0x00; // SRC_ IF_ MSB)
AD7779_ Register_ write( 0x63, 0x00; // SRC_ IF_ LSB)
//SRC_UPDATE,更新参数
AD7779_Register_Write( 0x64, 0x01);
//读取寄存器的数值,看是否设置成功
for(i=0; i<0x65; i++)
{
数据
= AD7779_Register_Read(i) ;
}
//将SPI接口配置成读取ADC的数据,GENERAL_USER_CONFIG_3.bit4 = SPI_SLAVE_MODE_EN,在配置AD7779之后将SPI接口设置成读取ADC数据的工作模式
AD7779_Register_Write( 0x13, 0x90);
}
5、失败---读取AD7779 转换结果失败
void AD7779_Read_Data(void) {
uchar i = 0;
//总共八个通道,每个通道32bit数据=8bit CRC头 + 24bit转换数据
for(i=0; i<8; i++)
{ { {
//将片选信号拉低
ad7779_cs_lo;
延迟_us( ad7779_ delay);
//读取32bit数据
adcvalue = AD7779_SPI_RdByte(32);
//从CRC头中获取AD通道编号
ch = (adcvalue >> 28) 0x07;
//将片选信号拉高
ad7779_cs_hi;
延迟_us( ad7779_ delay);
时 时
}
6、使用CCS测试结果,通道编号每次都在变化

7、读取AD7779数据的时间,在/RDY管脚出现下降沿中断时读取数据
#pragma vector=PORT2_VECTOR - 中断的空旷港2 (省)
{
P2IFG =~BIT0;//P2.0 IFG 清除
//在/RDY管脚的下降沿中断程序中读取数据
ad7779_read_data();
}
8、下图是技术手册中关于ADC转换数据格式的说明

9、问题:
1>虽然可以成功读写AD7779寄存器,但是不确定是否配置正确,目前就像测试下ch0能否工作
2>在配置好寄存器之后,SPI是否成功进入读取ADC数据模式
3>在通过SPI读取数据,在整个读取的过程中已经将MOSI管脚拉低,避免超过64个MCLK高电平,造成SPI接口复位
4>不知为什么分析CRC头时,通道编号总是没有规律的变化
5>难道时读取数据的时间不对,不能再/RDY的下降沿读取
6>难道不是每次都读取32bit数据吗
7>难道不是依次读取8通道的数据,只有没有禁止的通道才有非零数据吗
8>总而言之,对何时读取数据,怎么读取数据,读取多少数据还不太清楚,也没有找到相应的参考文档和程序
9>/START管脚怎么处理呢
10、会不会还有硬件问题