已回答假定已回答

AD7606BUSY信号高电平时间过长的问题

515625517@qq.com 在 2015-12-14 詢問的問題
最後回覆由StevenX於2015-12-16提供

用DSP28335和AD7606配合使用的时候,发现AD7606的转换时间非常长,在4倍过采样率的时候转换时间达到300us了,和官方资料说的17us相差甚大,查了几天了,用其他的最小系统版的话是有一个最小系统版是可以用的,转换时间是对的,但是一共用了6块最小系统版只有一块最小系统版有用,而且只要把AD7606的程序屏蔽了,程序是可以正常跑的,所以 应该又不是最小系统版的问题。我的程序如下:

void AD7606_Init(void)

{

  EALLOW;

//--------------------------外扩AD控制-----------------------------

  GpioCtrlRegs.GPAPUD.bit.GPIO15  = 0;

  GpioCtrlRegs.GPAMUX1.bit.GPIO15 = 0;

  GpioCtrlRegs.GPADIR.bit.GPIO15  = 1; //输出   OS[0]

 

 

  GpioCtrlRegs.GPAPUD.bit.GPIO16  = 0;

  GpioCtrlRegs.GPAMUX2.bit.GPIO16 = 0;

  GpioCtrlRegs.GPADIR.bit.GPIO16  = 1; //输出   OS[1]

 

 

  GpioCtrlRegs.GPBPUD.bit.GPIO58  = 0;

  GpioCtrlRegs.GPBMUX2.bit.GPIO58 = 0;

  GpioCtrlRegs.GPBDIR.bit.GPIO58  = 1; //输出   OS[2]

 

 

  GpioCtrlRegs.GPAPUD.bit.GPIO28 = 0;  //

    GpioCtrlRegs.GPAMUX2.bit.GPIO28 = 0; // AD_BUSY

    GpioCtrlRegs.GPADIR.bit.GPIO28 = 0;  // 入

    GpioDataRegs.GPADAT.bit.GPIO28=0;   

 

 

  GpioCtrlRegs.GPBPUD.bit.GPIO49 = 0; 

  GpioCtrlRegs.GPBMUX2.bit.GPIO49 = 0; // AD_FRSTDATA

    GpioCtrlRegs.GPBDIR.bit.GPIO49 = 0;  // 入

 

 

  GpioCtrlRegs.GPBPUD.bit.GPIO35 = 0; 

  GpioCtrlRegs.GPBMUX1.bit.GPIO35 = 0; // AD_FRSTDATA

    GpioCtrlRegs.GPBDIR.bit.GPIO35 = 1;  // 入

  GpioDataRegs.GPBDAT.bit.GPIO35=0;

 

 

  GpioCtrlRegs.GPBPUD.bit.GPIO61  = 0;

  GpioCtrlRegs.GPBMUX2.bit.GPIO61 = 0;

  GpioCtrlRegs.GPBDIR.bit.GPIO61  = 1; //输出

 

  GpioCtrlRegs.GPBPUD.bit.GPIO63  = 0;

  GpioCtrlRegs.GPBMUX2.bit.GPIO63 = 0;

  GpioCtrlRegs.GPBDIR.bit.GPIO63  = 1; //输出

  GpioDataRegs.GPBDAT.bit.GPIO63=1;

 

 

  GpioCtrlRegs.GPBPUD.bit.GPIO59  = 0;

  GpioCtrlRegs.GPBMUX2.bit.GPIO59 = 0;

  GpioCtrlRegs.GPBDIR.bit.GPIO59  = 1; //输出

    GpioDataRegs.GPBDAT.bit.GPIO59=0;

 

  EDIS;

  //-----------电平初始化---------------

  //-----------释放总线-----

  AD_CS_RD=1;

  //--------过采样率设成2^3=8-----------

  AD_SAMPLE_OS0=0;

  AD_SAMPLE_OS1=0;

  AD_SAMPLE_OS2=1;

  //-------复位AD7609,使能配置-----------

  AD_RESET=0;

  DELAY_US(100);//上电和RESET脉冲之间应经过:t-WAKE_UP SHUTDOWN:最大100us

  AD_RESET=1;

  DELAY_US(1);//RESET高电平脉冲宽度:tRESET:最低50ns

  AD_RESET=0;

  DELAY_US(1);//RESET低电平到CONVST x高电平之间的最短延迟时间25ns

  //------------------------------------

  AD_CONVEST=0;

}

以上是AD7606初始化的程序

 

/*************************************************************************************************************

 

#defineRAMBASE0  0x004000//Zone0


int  AD7606data=0;
int  *AD7606rambase;

int  DB7606[8]={0,0,0,0,0,0,0,0};

int  Read_FromXint7606(void)

{

AD7606rambase=(int *)(RAMBASE0);
AD7606data=*AD7606rambase;
return AD7606data;

} // 读AD7606程序

 

if(FlagOK_ADsample==1)
{  
    GpioDataRegs.GPBDAT.bit.GPIO51=1;
  while(AD_BUSY==1);
  DELAY_US(0.5);     
ReadFrom7606();
GpioDataRegs.GPBDAT.bit.GPIO51=0;

 

FlagOK_ADsample=0;

}  //这是读程序,FlagOK_ADsample是有pwm模块给出的定时标志位,每1/9000s置位一次FlagOK_ADsample

 

void ReadFrom7606(void)

{

  int i;

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

  {

  AD_CS_RD=0;                                                     //选通总线,准备读取 \

  DB7606[i]=Read_FromXint7606();                                  //从CS直到DB[15:0]三态禁用的延迟时间:t13,

                                                                 // 最长30ns(调用函数定义指针变量历时70ns)

  AD_CS_RD=1;                                                     //释放总线                                                                //CS高电平脉冲宽度,CS与RD相连:t12,                                                                //最低22ns(for循环里一次判断历时40ns

  }

  AD_CONVEST=0;     

}

实验中我测量GpioDataRegs.GPBDAT.bit.GPIO51的高电平,也就是BUSY信号的高电平,AD7606的转换时间。4倍过采样率的时候是300us,有没有人遇到过这样的问题?如果有的话希望帮助一下我,我的联系方式是ztm_hfut@outlook.com。谢谢!

結果