已回答假定已回答

对ADRF6602编程中遇到的问题

dataibao 在 2013-11-13 詢問的問題
最後回覆由adi_yu於2013-11-21提供

您好:我在初始化ADRF6602的时候发现单步执行的时候,当执行到

ADRF6601_reg_write(CP_ENABLE | LDO_3V3_ENABLE | VCO_LDO_ENABLE | VCO_ENABLE | VCO_SWITCH_REGULAR | VCO_AMPLITUDE(63) | VCO_BW_SW_SOURCE_CONTROL_BAND | VCO_BAND_SELECT_FROM_SPI(32),VCO_CONTROL_AND_VCO_ENABLE);的时候,管脚2DECL3P3上出现了3.3V的电压。

但是我继续往下执行时,当执行完

ADRF6601_reg_write(DITHER_MAGNITUDE_1 | DITHER_ENABLE | DITHER_RESTART_VALUE(1),MODULATOR_DITHER_CONTROL);的时候,管脚2DECL3P3上的3.3V电压消失了。

我感觉像是我能写进东西到寄存器里,但是写的数据不对。另外MUX_OUT引脚上始终测不到波形。

我怀疑是我的时序不对,但是我和IC资料的时序对了很多遍都找不出问题在哪?

附件中是我用示波器抓的CLK、DATA、LE的关系图。


这是CLK和LE的关系图,上边是CLK的波形,下面是LE的波形。

 


这是CLK和DATA的关系图,上边是CLK的波形,下面是DATA的波形。我做了个循环,不断的写入0xaaaaaa.

 

 

下面是我用IO口模拟SPI的程序代码

 

void ADRF6602_reg_write(unsigned long reg_value, unsigned char reg_address)

 

{

    unsigned char i;

reg_value = reg_value | reg_address;     //combine a 24 bit date

ADRF6602_LE_H;                    //  CS_#     : 1

delay_nus(3);

ADRF6602_CLK_L;

ADRF6602_LE_L;                    //  CS_#     : 0

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

    {

    

     if(reg_value&0x800000)

       ADRF6602_DATA_H; 

     else

       ADRF6602_DATA_L;

     reg_value<<=1;

     ADRF6602_CLK_H; 

  delay_nus(3);

  ADRF6602_CLK_L;

    }

delay_nus(3);

ADRF6602_LE_H;                    //  CS_#     : 1

delay_nus(3);

ADRF6602_LE_L;                    //  CS_#     : 0

 

}

请帮忙看看时序上有没有问题?我实在是找不出问题出在哪了。


谢谢

附件

結果