📄 ad9954.lst
字号:
195 1 }
196
197
198
199 /***********************************************************************
200 ** 函数名称: RW_Reg
201 ** 功能描述: AD9954读写寄存器操作
202 ** 输 入: unsigned char addr 寄存器地址
203 ** unsigned char *buf 写寄存器: 指向发送数据的指针
204 ** 读寄存器: 指向读回数据的指针
205 ** unsigned char num 发送或读回的数据长度 num Byte
206 ** unsigned char rw 读写选择 1 读 0 写
207 ** 输 出: 无
208 ** 全局变量: 无
209 ** 调用模块: ReadByte WriteByte
210 ***********************************************************************/
211 void RW_Reg(unsigned char addr,unsigned char *buf,unsigned char num,
212 unsigned char rw)
213 {
214 1 unsigned char ins;// instruction byte
215 1 if(rw == 1)
216 1 {
217 2 ins = addr | 0x80;
218 2 WriteByte(ins);
219 2 do{
220 3 buf[num-1] = ReadByte();
221 3 num--;
222 3 nNop(5);
223 3 }
224 2 while(num);
225 2 }
226 1 else
227 1 {
228 2 ins = addr;
229 2 WriteByte(ins);
230 2 do{
231 3 WriteByte(buf[num-1]);
232 3 num--;
233 3 nNop(5);
234 3 }
235 2 while(num);
236 2 }
237 1 }
238
239
240 /***********************************************************************
241 ** 函数名称: AD9954_Write_Reg
C51 COMPILER V7.09 AD9954 08/24/2007 09:36:16 PAGE 5
242 ** 功能描述: AD9954写寄存器操作
243 ** 输 入: unsigned long command 写入寄存器的指令
244 ** unsigned char num 发送或读回的数据长度 num Byte
245 ** unsigned char addr 寄存器地址
246 ** 输 出: 无
247 ** 全局变量: 无
248 ** 调用模块: RW_Reg
249 ***********************************************************************/
250 void AD9954_Write_Reg(unsigned long command,unsigned char num,unsigned char addr)
251 {
252 1 unsigned char temp_com[5] = {0,0,0,0,0};
253 1 unsigned char i;
254 1 unsigned long temp;
255 1 temp = command;
256 1 for(i = 0;i < num;i++)
257 1 {
258 2 temp_com[i] = (temp & 0xff);
259 2 temp = temp >> 8;
260 2 }
261 1 RW_Reg(addr,temp_com,num,0);
262 1 }
263
264
265
266 /***********************************************************************
267 ** 函数名称: FTW_Float
268 ** 功能描述: 将浮点型频率值MHZ 转换成频率控制字
269 ** 输 入: float freqfloat 浮点型频率值MHZ
270 ** 输 出: unsigned long 4 byte 频率控制字
271 ** 全局变量: 无
272 ** 调用模块: 无
273 ***********************************************************************/
274 unsigned long FTW_Float(float freqfloat)
275 {
276 1 unsigned long temp = 0;
277 1 float freqf = 0;
278 1 freqf = freqfloat / 400; //AD9954主频400MHZ
279 1 temp = (freqf * multfreq);
280 1 return(temp);
281 1 }
282
283 /***********************************************************************
284 ** 函数名称: 更新寄存器操作
285 ** 功能描述: 每次更新寄存器的固定操作
286 ** 输 入: 无
287 ** 输 出: 无
288 ** 全局变量: 无
289 ** 调用模块: 无
290 ***********************************************************************/
291 void AD9954_Updata_First(void)
292 {
293 1 IO9954_Init();
294 1 CS_Enable();
295 1 IO_SYNC_1();
296 1 nNop(40);
297 1 IO_SYNC_0();
298 1 IO_UPDATE_0();
299 1 }
300
301 void AD9954_Updata_Final(void)
302 {
303 1 CS_Disable();
C51 COMPILER V7.09 AD9954 08/24/2007 09:36:16 PAGE 6
304 1 nNop(20);
305 1 IO_UPDATE_1();
306 1 }
307
308
309 /*****************************************************************************
310 * Single-Tone Mode
311 ******************************************************************************/
312 /***********************************************************************
313 ** 函数名称: AD9954_SingleTone_Init
314 ** 功能描述: AD9954 Single-Tone Mode 初始化
315 ** 输 入: 无
316 ** 输 出: 无
317 ** 全局变量: CFR1 CFR2 AD9954 功能控制寄存器
318 ** 调用模块: AD9954_Write_Reg
319 ***********************************************************************/
320 void AD9954_SingleTone_Init(void)
321 {
322 1 CFR1 = 0x00000000;
323 1 AD9954_Updata_First();
324 1 AD9954_Write_Reg(CFR2,3,0x01); //控制寄存器2
325 1 AD9954_Write_Reg(CFR1,4,0x00); //控制寄存器1
326 1 AD9954_Updata_Final();
327 1 }
328
329 /***********************************************************************
330 ** 函数名称: AD9954_SingleTone_Freq
331 ** 功能描述: 更新频率控制
332 ** 输 入: 无
333 ** 输 出: 无
334 ** 全局变量: FTW0
335 ** 调用模块: AD9954_Write_Reg 更新寄存器操作
336 ***********************************************************************/
337 void AD9954_SingleTone_Freq(float freq)
338 {
339 1 FTW0 = FTW_Float(freq);
340 1 AD9954_Updata_First();
341 1 AD9954_Write_Reg(FTW0,4,0x04); //设置全局输出频率
342 1 AD9954_Updata_Final();
343 1 }
344
345
346
347 /***********************************************************************
348 ** 函数名称: AD9954_Amplitude_Change
349 ** 功能描述: 手动改变输出幅度
350 ** 输 入: 无
351 ** 输 出: 无
352 ** 全局变量: ASF
353 ** 调用模块: AD9954_Write_Reg 更新寄存器操作
354 ***********************************************************************/
355 void AD9954_Amplitude_Change(void)
356 {
357 1 CFR1 |= OSKEN;
358 1 CFR1 &= ~AOSK;
359 1 AD9954_Updata_First();
360 1 AD9954_Write_Reg(CFR1,4,0x00);
361 1 AD9954_Write_Reg(ASF,2,0x02);
362 1 AD9954_Updata_Final();
363 1 }
364
365
C51 COMPILER V7.09 AD9954 08/24/2007 09:36:16 PAGE 7
366
367 /***********************************************************************
368 ** 函数名称: AD9954_Phase_Change
369 ** 功能描述: 改变输出相角 0<=phase<=360
370 ** 输 入: double phase 浮点型相角值
371 ** 输 出: 无
372 ** 全局变量: POW0
373 ** 调用模块: AD9954_Write_Reg 更新寄存器操作
374 ***********************************************************************/
375 void AD9954_Phase_Change(double phase) // 0<=phase<=360
376 {
377 1 POW0=(unsigned int)(phase*45.511111111);
378 1 AD9954_Updata_First();
379 1 AD9954_Write_Reg(POW0,2,0x05);
380 1 AD9954_Updata_Final();
381 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 738 ----
CONSTANT SIZE = 5 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 44 42
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -