完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我在回读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个回答
|
|
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的值。 |
|
|
|
尼克wo 发表于 2018-11-23 07:43 请问我对ram地址0x16重复写了N个频点值数据在这个地址。RAM使能,更新后,没有输出。连续循环读曲0x16地址的内容,SDO输出的数据都是写进去的最后一个数据是怎么回事?而读取其他寄存器的数据时,SDO输出都是写入时的数据。而发现再读寄存器的过程中,却有了很微弱的输出波形,而且还不知道这波形是否是想要的波形。 |
|
|
|
尼克wo 发表于 2018-11-23 07:43 文档手册强调写RAM之前最好要禁止ram bit位。再写0x0E寄存器,设置RAM0 Profile0的起始地址和终止地址。请调通的解答一下啊。 |
|
|
|
"0x0f寄存器也配置不了,不知道是什么原因"可能是你问题的原因。
0x0f寄存器与0x0e是一样的,为什么不能配置?不对0x0e操作,是否能配置0x0f。还请多测试测试,提供详细信息。 |
|
|
|
尼克wo 发表于 2018-11-23 08:15 有写寄存器写进去之后无效是因为优先级的原因,具体请参考数据手册Table10关于在各种模式下优先级的顺序。下面是一个RAM扫频的例子,供您参考。 EXAMPLE . Linear Frequency Sweeping The system clock frequency =1GHz Frequency Sweeping Rang=10MHz~19.8469MHz RAM Playback Destination Bits CFR1[30:29] =00 RAM Profile Mode Control Bits =011 Internal Profile Control Bits (CFR1[20:17]) =0000 RAM Profile 0 waveform start address=0 RAM Profile 0 waveform end address=63 Then we can get the data source to load into the RAM, unsigned int RAMData[64] = { 0x28F5C29, 0x2999A70, 0x2A3D8B8, 0x2AE16FF, 0x2B85547, 0x2C2938E, 0x2CCD1D5, 0x2D7101D, 0x2E14E64, 0x2EB8CAB, 0x2F5CAF3, 0x300093A, 0x30A4782, 0x31485C9, 0x31EC410, 0x3290258, 0x333409F, 0x33D7EE7, 0x347BD2E, 0x351FB75, 0x35C39BD, 0x3667804, 0x370B64C, 0x37AF493, 0x38532DA, 0x38F7122, 0x399AF69, 0x3A3EDB0, 0x3AE2BF8, 0x3B86A3F, 0x3C2A887, 0x3CCE6CE, 0x3D72515, 0x3E1635D, 0x3EBA1A4, 0x3F5DFEC, 0x4001E33, 0x40A5C7A, 0x4149AC2, 0x41ED909, 0x4291750, 0x4335598, 0x43D93DF, 0x447D227, 0x452106E, 0x45C4EB5, 0x4668CFD, 0x470CB44, 0x47B098C, 0x48547D3, 0x48F861A, 0x499C462, 0x4A402A9, 0x4AE40F1, 0x4B87F38, 0x4C2BD7F, 0x4CCFBC7, 0x4D73A0E, 0x4E17855, 0x4EBB69D, 0x4F5F4E4, 0x500332C, 0x50A7173, 0x514AFBA}; Example Code in ADuC7026 ADuC7026_Initiate(); //ADuC7026 Initialization delay(10); SET_reset(); //Send a pulse to the Master_reset of the AD9910; delay(10); CLR_reset(); delay(1); RegisterData[0] =0x3D3F4150; //REF_CLK = 25MHz, PLL enable=1, N=40; WriteToAD9910ViaSpi(0x02,1,RegisterData); //System Clock = 1GHz RegisterData[1] = 0x08ffff0f; //RAM step rate, start and end address setup, and RegisterData[0] =0xC0000933; //mode control WriteToAD9910ViaSpi(0x0E,2,RegisterData); //To RAM Profile 0. The pin P0,P1, P2 should be tied to GND. delay(10); IO_Update(); //Send an pulse to the I/O_Update delay(10); WriteToAD9910ViaSpi(0x16,64,RAMData); //Load RAM date to 0x16 delay(10); IO_Update(); RegisterData[1] = 0x08ffff0f; RegisterData[0] =0xC0000933; //RAM profile reconfiguration, different configuration can be set WriteToAD9910ViaSpi(0x0E,2,RegisterData); delay(10); RegisterData[0] =0x80000000; // Enable RAM, the RAM playback destination is frequency WriteToAD9910ViaSpi(0x00,1,RegisterData); delay(10); IO_Update(); delay(10); |
|
|
|
只有小组成员才能发言,加入小组>>
给ADUM4223 增加信号驱动15V电压就不正常, 波动很大会被烧是什么情况?
1292 浏览 2 评论
ADP5092 SYS端口为2.09V,但是REG_OUT为0是什么原因?
1893 浏览 1 评论
ad7193差分输入ain1与ain2差是正值时,读到电压与实际值误差小,但为负值值,误差就变的很大
4235 浏览 2 评论
8991 浏览 1 评论
3137 浏览 1 评论
ADC3442采集,分析数据出现有规则毛刺,请问是哪方面的问题啊?
1419浏览 3评论
AD7190状态寄存器一直是0x80,连续转换模式下RDY不拉低
1640浏览 2评论
1611浏览 2评论
给ADUM4223 增加信号驱动15V电压就不正常, 波动很大会被烧是什么情况?
1295浏览 2评论
209浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 21:26 , Processed in 0.848110 second(s), Total 56, Slave 50 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号