?? ad9958.c
字號:
/*------------------------------------------------------
FILE NAME : AD9958.C
DESCRIPTION : AD9958 driver.
VERSION : 0.0.0 (C)aureole
AUTHOR : Aureole
CREATE DATE : 4.1.2006
MODIFY DATE : ---
LOGS :-\
1. First create for hardware test. 4.1.2006
--------------------------------------------------------*/
//-----------------Include files-------------------------//
#include "..\include\ad9958.h"
#include "..\include\spi.h"
#include "..\include\common.h"
#include "..\include\config.h"
//-----------------Function-------------------------------//
/*---------------------------------------------------------------
NAME : set_ad9958_sync
ENTRY TYPE: void
RETURN TYPE: void
PURPOSE : ---
VERSION : 0.5
DESCRIPTION:
CREATE DATE: 4.6.2006
LOGS : 1.first create;
-----------------------------------------------------------------*/
void set_ad9958_synchronization(void)
{
//Enable both channel clear phase accumulator
AD9958_CS_OFF
AD9958_UPDATE_OFF
send_data_to_spi(0x02);
send_data_to_spi(0x10);
send_data_to_spi(0x00);
AD9958_UPDATE_ON
AD9958_CS_ON
//Disable both channel clear phase accumulator
AD9958_CS_OFF
AD9958_UPDATE_OFF
send_data_to_spi(0x02);
send_data_to_spi(0x00);
send_data_to_spi(0x00);
AD9958_UPDATE_ON
AD9958_CS_ON
}
/*---------------------------------------------------------------
NAME : set_ad9958_pll
ENTRY TYPE: int
RETURN TYPE: unsigned int(pll multilpe sucess return 1,otherwise return 0)
PURPOSE : ---
VERSION : 0.1
DESCRIPTION:
CREATE DATE: 4.5.2006
LOGS : 1.first create;
-----------------------------------------------------------------*/
int set_ad9958_pll(unsigned int mult)
{
if(mult<3 || mult>21)return 0;
if(mult>(160/AD9958_CLOCK)){ //Set PLL VCO gain;
mult<<=2;
mult|=0x80;
}else {
mult<<=2;
}
AD9958_CS_OFF
AD9958_UPDATE_OFF
send_data_to_spi(0x01);
send_data_to_spi((unsigned char)mult);
send_data_to_spi(0x00);
send_data_to_spi(0x00);
AD9958_UPDATE_ON
AD9958_CS_ON
return 1;
}
/*---------------------------------------------------------------
NAME : initialize_ad9958
ENTRY TYPE: int
RETURN TYPE: void
PURPOSE : ---
VERSION : 0.1
DESCRIPTION:
CREATE DATE: 4.5.2006
LOGS : 1.first create;
-----------------------------------------------------------------*/
void initialize_ad9958(void)
{
INITIALIZE_AD9958_PORT
AD9958_DDSCR_ON
AD9958_DDSCR_OFF
set_ad9958_pll(AD9958_PLL_MULTIPLE);
}
/*---------------------------------------------------------------
NAME : set_frequency
ENTRY TYPE: int channel,double frequency;
RETURN TYPE: int(set frequency success return 1,else return 0);
PURPOSE : ---
VERSION : 0.1
DESCRIPTION: chan=0 channel a ;chan=1 channel b; chan=2 channel a&b;
CREATE DATE: 4.5.2006
LOGS : 1.first create;
-----------------------------------------------------------------*/
int set_frequency(int chan,double freq)
{
unsigned char chan_temp=0;
UN_INT freq_temp;
int i=0;
if(chan<0 || chan>2)return 0;
if(freq>MAX_OUTPUT_FREQUENCY || freq<0)return 0;
//select channel;
if(chan==0)chan_temp=0x40;
else if(chan==1)chan_temp=0x80;
else if(chan==2)chan_temp=0xf0;
freq*=(double)17.179869184;
freq_temp.int_value=(unsigned int)freq;
//Hardware operation
AD9958_CS_OFF
AD9958_UPDATE_OFF
send_data_to_spi(INSTRUCTION_CSR);
send_data_to_spi(chan_temp);
send_data_to_spi(INSTRUCTION_CTW0);
send_data_to_spi(freq_temp.char_value._4);
send_data_to_spi(freq_temp.char_value._3);
send_data_to_spi(freq_temp.char_value._2);
send_data_to_spi(freq_temp.char_value._1);
AD9958_UPDATE_ON
AD9958_CS_ON
set_ad9958_synchronization();
return 1;
}
/*---------------------------------------------------------------
NAME : set_phase
ENTRY TYPE: int chan,float pha;
RETURN TYPE: int(set phase success return 1,else return 0);
PURPOSE : ---
VERSION : 0.1
DESCRIPTION: chan=0 channel a ;chan=1 channel b; chan=2 channel a&b;
CREATE DATE: 4.6.2006
LOGS : 1.first create;
-----------------------------------------------------------------*/
int set_phase(int chan,double pha)
{
unsigned char chan_temp=0;
unsigned short pha_temp;
if(chan<0 || chan>2)return 0;
if(pha>359.9 || pha<0)return 0;
//select channel;
if(chan==0)chan_temp=0x40;
else if(chan==1)chan_temp=0x80;
else if(chan==2)chan_temp=0xf0;
pha*=45.511111111111111111111111111111;
pha_temp=(unsigned short)pha;
//Hardware operation
AD9958_CS_OFF
AD9958_UPDATE_OFF
send_data_to_spi(INSTRUCTION_CSR);
send_data_to_spi(chan_temp);
send_data_to_spi(INSTRUCTION_CPW0);
send_data_to_spi((unsigned char)((pha_temp&0xff00)>>8));
send_data_to_spi((unsigned char)(pha_temp&0x00ff));
AD9958_UPDATE_ON
AD9958_CS_ON
set_ad9958_synchronization();
return 1;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -