ADI 技术
直播中

宋晓媛

7年用户 309经验值
私信 关注
[问答]

ad9910回读寄存器0x0f时读出来的值是0x0e的值

我在回读0x0e时是正确的,但是在回读0x0f时读出来的值是0x0e的值,不知道是什么原因,还有怎么读ram里面的值?是不是读对应的0x16的值,在读0x16的值时是我最后配置0x16的值,程序如下:
谢谢!!!
void Test_AD9910(void)
{
DA9910_Wdata32(0x00,0x80010002);
//配置寄存器CFR1-控制功能寄存器1
delay1us(10);
DA9910_Wdata32(0x01,0x00400820);
//配置寄存器CFR2
delay1us(10);
DA9910_Wdata32(0x02,0x1D3F4150);
//配置寄存器CFR3
delay1us(10);
//DA9910_Wdata32(0x03,0x0000007F); //配置寄存器
辅助DAC控制
//delay1us(10);
//DA9910_Wdata32(0x04,0xffffffff); //配置寄存器
I/O更新速率
//delay1us(10);

//delay1us(10);


//DA9910_Wdata32(0x0A,0x00000000);
//配置寄存器
多芯片同步
//delay1us(10);
//DA9910_Wdata64(0x0B,0x00191999,0x19999999);
//配置寄存器
数字斜坡限值
//delay1us(10);
//DA9910_Wdata64(0x0C,0x00191999,0x19999999);
//配置寄存器 数字斜坡步长
//delay1us(10);
//DA9910_Wdata32(0x0D,0x00000000); //配置寄存器
数字斜坡速率
//delay1us(10);
//DA9910_Wdata64(0x0E,0x08B50000,0x00418937);
//配置寄存器
单频调制profile0
//delay1us(10);

//DA9910_Wdata64(0x0E,0x00000000,0x0000400F);
//配置寄存器
RAM调制profile0
//delay1us(15);
DA9910_Wdata64(0x0F,0x00000001,0x1000400F);
//配置寄存器 RAM
profile1
delay1us(15);

rGPJDAT=0x00;
DA9910_Wdata32(0x16,0x10000000);


Delay(10);
rGPJDAT=0x20;
DA9910_Wdata32(0x16,0x11000000);
Delay(10);

//DA9910_Wdata64(0x0F,0x08B50000,0x0);
//配置寄存器 单频profile1
//delay1us(10);
DA9910_Wdata32(0x07,0x00418937);
//配置寄存器 FTW-频率调谐字
delay1us(10);
//DA9910_Wdata16(0x08,0x0000); //配置寄存器
POW-相位偏移字
//delay1us(10);
//DA9910_Wdata32(0x09,0x007affff); //配置寄存器
ASF-振幅比例因子
//delay1us(10);
/*
DA9910_Wdata64(0x10,0x00000034,0x00240000);
//配置寄存器
profile2
delay1us(10);
//rGPJDAT=0X08;
//DA9910_Wdata32(0x16,0x19999999);
//delay1us(10);


DA9910_Wdata64(0x11,0x00000044,0x00340000); //配置寄存器
profile3
delay1us(10);
//rGPJDAT=0X28;
//DA9910_Wdata32(0x16,0x19999999);

//delay1us(10);

DA9910_Wdata64(0x12,0x00000054,0x00440000); //配置寄存器
profile4
delay1us(10);
//rGPJDAT=0X02;
//DA9910_Wdata32(0x16,0x19999999);

//delay1us(10);

DA9910_Wdata64(0x13,0x00000064,0x00540000); //配置寄存器
profile5
delay1us(10);
//rGPJDAT=0X22;
//DA9910_Wdata32(0x16,0x19999999);

//delay1us(10);

DA9910_Wdata64(0x14,0x00000074,0x00640000); //配置寄存器
profile6
delay1us(10);
//rGPJDAT=0X0A;
//DA9910_Wdata32(0x16,0x19999999);

//delay1us(10);

DA9910_Wdata64(0x15,0x00000084,0x00740000); //配置寄存器
profile7

delay1us(10);
//rGPJDAT=0X2A;
//DA9910_Wdata32(0x16,0x19999999);
//配置寄存器 RAM
//delay1us(10);
*/
rGPJDAT=0x00;
ad9910read();
//while(1){rGPJDAT=0x20; Delay(100);
rGPJDAT=0x00;Delay(100);} //选择profile1,0交替

delay1us(100000);
}

回帖(5)

张虎豹

2018-11-23 09:38:04
RAM操作方法:
1。先写CFR1使得RAM Enable为1,表示使能RAM;
2。写0x0E寄存器,设置RAM0 Profile0的起始地址和终止地址;
3。将管脚P0置0,表示选择RAM Profile0;
4。对0x16连续操作N次,N=终止地址-起始地址+1;;(如果起始和终止地址一样,那么只需要对0x16写一次)
5。写RAM完成。
6。此时可以读RAM,同样也是对0x16操作,依次读出RAM的值。
举报

胡皓

2018-11-23 09:48:39
引用: 尼克wo 发表于 2018-11-23 07:43
RAM操作方法:
1。先写CFR1使得RAM Enable为1,表示使能RAM;
2。写0x0E寄存器,设置RAM0 Profile0的起始地址和终止地址;

请问我对ram地址0x16重复写了N个频点值数据在这个地址。RAM使能,更新后,没有输出。连续循环读曲0x16地址的内容,SDO输出的数据都是写进去的最后一个数据是怎么回事?而读取其他寄存器的数据时,SDO输出都是写入时的数据。而发现再读寄存器的过程中,却有了很微弱的输出波形,而且还不知道这波形是否是想要的波形。
举报

胡皓

2018-11-23 10:02:25
引用: 尼克wo 发表于 2018-11-23 07:43
RAM操作方法:
1。先写CFR1使得RAM Enable为1,表示使能RAM;
2。写0x0E寄存器,设置RAM0 Profile0的起始地址和终止地址;

文档手册强调写RAM之前最好要禁止ram bit位。再写0x0E寄存器,设置RAM0 Profile0的起始地址和终止地址。请调通的解答一下啊。
举报

张虎豹

2018-11-23 10:10:18
"0x0f寄存器也配置不了,不知道是什么原因"可能是你问题的原因。
0x0f寄存器与0x0e是一样的,为什么不能配置?不对0x0e操作,是否能配置0x0f。还请多测试测试,提供详细信息。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分