求助DDS9910 RAM直接转换模式

我想使用AD9910RAM 直接转换模式,实现频率变化,我的操作是这样的·
1,CFR1[31]默认是0,profile=3'b000

2,写RAM表,我写了四个频率值到0x16里面,四个频率值分别为5MHz,6MHz,7MHz,8MHz

3, 写0x0e寄存器值,我把初始位设置为01,RAM profile0模式 000(RAM直接转换模式)

4,CFR1[31] = 1,寄存器每次写完后都 io_updata;

但是实际情况是我变化初始位置的值,输出频率一直是5MHz,不随着我的初始值变化而变化。

部分代码:

int main(void)
{
u16 i = 0;
ulong freq = 1000000;

delay_init();

SPI2_Init();
SPI2_SetSpeed(SPI_BaudRatePrescaler_256);

AD9910_IOconfig();
Init_AD9910();

// Write_Freq(freq);
// Write_Amp(600);

Txramdata();
delay_ms(5);
//Square_wave(200);
RAM_direct();
cfr1[0] = 0x80;
cfr2[0] = 0x00;
cfr2[1] = 0x40;
Txcfr();



while(1)
{
//RAM_direct();
//Txramprofile();
//Txramdata();
//cfr1[0] = 0x80;
//cfr2[0] = 0x00;
//cfr2[1] = 0x40;
//Txcfr();


// AD9910_Profile2 = 0;
// AD9910_Profile1 = 0;
// AD9910_Profile0 = 0;
// delay_ms(10);
// AD9910_Profile2 = 0;
// AD9910_Profile1 = 0;
// AD9910_Profile0 = 1;
// delay_ms(10);
// AD9910_Profile0 = 1;


}
}

/***********************************************************************
RAM直接转换程序
*************************************************************************/
void RAM_direct(void)
{
//uint k;
//temp = startaddress;
// if(temp > 0xffff)
// temp = 0xffff;
ramprofile0[7] = 0x08;
ramprofile0[6] = 0x00;
ramprofile0[5] = 0x00;
ramprofile0[4] = 0x00;
ramprofile0[3] = 0x40;
ramprofile0[2] = 0x00;
ramprofile0[1] = 0x40;//1
ramprofile0[0] = 0x00;

Txramprofile();



// Txramdata();

}


/**************************************************************
AD9910发送ramprofile0控制字程序
*****************************************************************/
void Txramprofile(void)
{
uchar m ,k;

AD9910_CS = 0;
txd_8bit(0x0e); //发送ramprofile0控制字地址
for(m = 0; m < 8; m ++)
txd_8bit(ramprofile0[m]);
AD9910_CS = 1;
for(k = 0; k < 10; k ++);

AD9910_UP_DATA = 1;
for(k = 0; k <10; k ++);
AD9910_UP_DATA = 0;
delay_ms(1);
}

/******************************************************************
AD9910发送ramdata程序
*******************************************************************/
void Txramdata(void)
{
uint m , k;

AD9910_CS = 0;
txd_8bit(0x16); //发送ram控制字地址
for(m = 0; m < 20; m ++)
txd_8bit(ramdata_Square[m]);

AD9910_CS = 1;
for(k = 0; k < 10; k ++);

AD9910_UP_DATA = 1;
for(k = 0; k < 10; k++);
AD9910_UP_DATA = 0;
delay_ms(1);
}

const unsigned char ramdata_Square[4096] = {0x01,0x47,0xae,0x14, 0x01,0x89,0x37,0x4b,  0x01,0xca,0xc0,0x83,  0x02,0x0c,0x49,0xba};