【MSPM0G3519 系列】AD9959 DDS模块(凌智)移植

引言

看了清单,感觉仪表的频率会高一些啊,专门在m0上移植了AD9959程序,可能用来较高频的扫频。
AD9959在正常的频率范围内(100kHz - 150MHz以内),有最高840mVpp输出。
AD9959拥有四个通道,每一个通道的频率、相位和幅值独立且可调。
AD9959频率范围:40kHz - 200MHz;幅值范围:0mVpp - 840mVpp;相位范围:0° - 180°。

移植

引脚

由于用不上高频调制和自动扫频,所以就没用上P0~P3这四个引脚,其他引脚是都接上了的。(哦对了记得加一个散热片)
image

配置

这里就直接给代码,方便看,注意引脚拉高还是拉低。

image

文件

image

程序

AD9959.c

点击查看代码
#include "AD9959.h"

#if USE_AD9959

#define system_clk 500000000	 //AD9959工作频率设定为500MHz

#define uchar unsigned char
#define uint unsigned int


//----------------------------------------------------------------------------------------------//
// 板边缘引脚:																									CubeMX引脚命名(移植严格遵守):
// PDN —— PA7  —— 推挽输出:输出低 - LOW  - 超高速 —————————————— AD9959_PWR
// SD3 —— PC5  —— 推挽输出:输出低 - LOW  - 超高速 —————————————— AD9959_SDIO3
// SD1 —— PH14 —— 推挽输出:输出低 - LOW  - 超高速 —————————————— AD9959_SDIO1
// SCK —— PI2  —— 推挽输出:输出高 - HIGH - 超高速 控制位 ——————— AD9959_SCLK
// IU  —— PI0  —— 推挽输出:输出高 - HIGH - 超高速 控制位 ——————— AD9959_IO_updata
// P2  —— PI4  —— 推挽输出:输出低 - LOW  - 超高速 —————————————— AD9959_PS2
// P0  —— PI6  —— 推挽输出:输出低 - LOW  - 超高速 —————————————— AD9959_PS0
// 板靠内引脚:	
// RST —— PC4  —— 推挽输出:输出高 - HIGH - 超高速 复位位 ——————— AD9959_Reset
// SD2 —— PH13 —— 推挽输出:输出低 - LOW  - 超高速 —————————————— AD9959_SDIO2
// SD0 —— PH15 —— 推挽输出:输出高 - HIGH - 超高速 数据传输位 ——— AD9959_SDIO0
// CS  —— PI1  —— 推挽输出:输出高 - HIGH - 超高速 控制位 ——————— AD9959_CS
// NC  —— No Connect	
// P3  —— PI5  —— 推挽输出:输出低 - LOW - 超高速  —————————————— AD9959_PS3
// P1  —— PI7  —— 推挽输出:输出低 - LOW - 超高速  —————————————— AD9959_PS1
//----------------------------------------------------------------------------------------------//


//子程序-----------------------------------------------------------

//-----------------------------------------------------------------
// void Delay(__IO uint32_t nCount)
//-----------------------------------------------------------------
// 
// 函数功能: 粗略延时
// 入口参数: 延时长度 
// 返回参数: 无
// 注意事项: 
//   -__IO 就是volatile, 加上这个后可以避免延迟函数被编译器优化掉
//				一个系统时钟:1/72MHZ=13.89ns,经过23个周期:319ns
/*
  	j=1000,i=513,测得以下延时: (SYSCLK=72MHz)
										时钟个数					延时				 误差		实际
			Delay(1):		    22						305ns								639ns
			Delay(2):		    29					  402ns								736ns
			Delay(5):		    50						694ns								1.028us
			Delay(10):	  	85				 1.1805us								1.514us
			Delay(20):	   155	 			 2.1527us								2.486us
			Delay(40):	   295				 4.0972us								4.4305us
			Delay(100):	   715				 9.9305us								10.26us
*/
//-----------------------------------------------------------------
void Delay(__IO uint32_t nCount)
{
  for(; nCount != 0; nCount--);// 23个
}

void AD9959_Init(void)  //初始化
{
	CS_1;
	SCLK_0;
	IO_update_0;
	// PS0_0;
	// PS1_0;
	// PS2_0;
	// PS3_0;
	
	SDIO0_0;
	SDIO1_0;
	SDIO2_0;
	SDIO3_0;
	
 	Reset_0;
 	Delay(6);
 	Reset_1;
 	Delay(100);
 	Reset_0;
}

//设置频率转换字
void WrFrequencyTuningWorddata(double f,uchar *ChannelFrequencyTuningWorddata)
{
	unsigned char z;
	
	long int y;
	double x;					
	x=4294967296.0/system_clk;	//频率控制字计算
	f=f*x;                      
	y=(long int)f;				//强制转换类型
	
	z=(uchar)(y>>24);     //8位长整型数据强制转为8位字符型
	ChannelFrequencyTuningWorddata[0]=z;
	
	z=(uchar)(y>>16);
	ChannelFrequencyTuningWorddata[1]=z;
	
	z=(uchar)(y>>8);
	ChannelFrequencyTuningWorddata[2]=z;
	
	z=(uchar)(y>>0);
	ChannelFrequencyTuningWorddata[3]=z;
	
}

// 数据更新,通道使能位不需要IO更新
void IO_update(void)   
{
	IO_update_0;
	Delay(12);
	IO_update_1;
	Delay(24);
	IO_update_0;
}


//通信
void WriteToAD9959ViaSpi(uchar RegisterAddress, uchar NumberofRegisters, uchar *RegisterData,uchar temp) 
{
	uchar	ControlValue = 0;
	uchar		ValueToWrite = 0;
	uchar	RegisterIndex = 0;
	uchar	i = 0;

	//是ControlValue为一个8位数据
	ControlValue = RegisterAddress;

	SCLK_0;
	CS_0;	 //bring CS low
	
	//写控制字
	for(i=0; i<8; i++)
	{
		SCLK_0;
		if(0x80 == (ControlValue & 0x80))
		{
			SDIO0_1;	  //Send one to SDIO0pin
		}
		else
		{
			SDIO0_0;	  //Send zero to SDIO0pin
		}
		SCLK_1;
		ControlValue <<= 1;	//Rotate data
	}
	SCLK_0;
	
	//写数据
	for (RegisterIndex=0; RegisterIndex<NumberofRegisters; RegisterIndex++)
	{
		ValueToWrite = RegisterData[RegisterIndex];
		for (i=0; i<8; i++)
		{
			SCLK_0;
			if(0x80 == (ValueToWrite & 0x80))
			{
				SDIO0_1;	  //Send one to SDIO0pin
			}
			else
			{
				SDIO0_0;	  //Send zero to SDIO0pin
			}
			SCLK_1;
			ValueToWrite <<= 1;	//Rotate data
		}
		SCLK_0;		
	}	
	if(temp==1)
	  {
	  IO_update();
	  }	
  CS_1;	//bring CS high again
}

//设置相位转换字
void WrPhaseOffsetTuningWorddata(double f,uchar *ChannelPhaseOffsetTuningWorddata)
{
	unsigned char z;
	
	long int y;
	double x;					
	x=16384.0/360;	//相位控制字计算
	f=f*x;                      
	y=(long int)f;				//强制转换类型
	
	z=(uchar)(y>>8);     //8位长整型数据强制转为8位字符型
	ChannelPhaseOffsetTuningWorddata[0]=z;
	
	z=(uchar)(y>>0);
	ChannelPhaseOffsetTuningWorddata[1]=z;
	
// 	ChannelPhaseOffsetTuningWorddata[2]=0x00;//下次修改时加上这两句然后在修改数组的变化,扫相时出现不能扫360的情况可能与计算时数组分配
// 	ChannelPhaseOffsetTuningWorddata[3]=0x00;//错误导致的
	
}

void WrAmplitudeTuningWorddata(double f,uchar *ChannelAmplitudeTuningWorddata) // 幅度扫描时设置上升和下降的幅度
																																								//计算过程注意与计算频率区别
{
	unsigned char z;
	
	unsigned long int y;
	double x;					
	x=1024.0/1024;	//幅度控制字计算
	f=f*x;                      
	y=(unsigned long int)f;				//强制转换类型
	
	z=(uchar)(y>>2);     //8位长整型数据强制转为8位字符型
	ChannelAmplitudeTuningWorddata[0]= z ;
	z=(uchar)(y<<6);		// 取低2位
	ChannelAmplitudeTuningWorddata[1] = (z & 0xC0);
	ChannelAmplitudeTuningWorddata[2] = 0x00;
	ChannelAmplitudeTuningWorddata[3] = 0x00;

/* 
	z=(uchar)(y>>8);
	ChannelAmplitudeTuningWorddata[2]=z;
	
	z=(uchar)(y>>0);
	ChannelAmplitudeTuningWorddata[3]=z;
 */
}


void WrAmplitudeTuningWorddata1(double f, uchar *ChannelAmplitudeTuningWorddata, uchar *ASRAmplituteWordata) // 设置输出幅度的大小
																																								//计算过程注意与计算频率区别
{ 
	unsigned char z;
	
	unsigned long int y;
	double x;					
	x=1024.0/1024;	//幅度控制字计算
	f=f*x*2.1;                      
	y=(unsigned long int)f;				//强制转换类型
	
	ASRAmplituteWordata[0] = ChannelAmplitudeTuningWorddata[0] ;
// 	ASRAmplituteWordata[1] = ChannelAmplitudeTuningWorddata[1] ;
// 	ASRAmplituteWordata[2] = ChannelAmplitudeTuningWorddata[2] ;
	
	z=(uchar)(y>>8);     //8位长整型数据强制转为8位字符型
	ChannelAmplitudeTuningWorddata[1] = (ChannelAmplitudeTuningWorddata[1] & 0xfc );
	ASRAmplituteWordata[1] = (ChannelAmplitudeTuningWorddata[1] | z );
	z=(uchar)(y<<0);		
	ASRAmplituteWordata[2] = z;
	

}

#endif	// #if USE_AD9959

AD9959.h

点击查看代码
#ifndef _AD9959_H
#define _AD9959_H

#include "headers.h"

#if USE_AD9959

#define uchar unsigned char
#define uint unsigned int 
	
//----------------------------------------------------------------------------
// 使用方式
////------------------------------------------------
//// AD9959
////------------------------------------------------
//delay_ms(50);								/* 使 AD9959 先上电 */
//AD9959_Init();							/* AD9959 初始化 */
//AD9959_enablechannel0(); 					/* 使能通道0 */
//AD9959_Setwavefrequency(10000.0f);		/* AD9959 输出信号:频率 */
//AD9959_enablechannel1(); 					/* 使能通道1 */
//AD9959_Setwavefrequency(10000.0f);		/* AD9959 输出信号:频率 */
//AD9959_enablechannel2(); 					/* 使能通道2 */
//AD9959_Setwavefrequency(10000.0f);		/* AD9959 输出信号:频率 */
//AD9959_enablechannel3(); 					/* 使能通道3 */
//AD9959_Setwavefrequency(10000.0f);		/* AD9959 输出信号:频率 */
//----------------------------------------------------------------------------

//AD998 I/O控制总线

//端口C宏USE_AD9959定义

// 引脚操作宏

// CS 拉高 输出高
#define CS_1            DL_GPIO_setPins(AD9959_AD9959_CS_PORT, AD9959_AD9959_CS_PIN)        
#define CS_0            DL_GPIO_clearPins(AD9959_AD9959_CS_PORT, AD9959_AD9959_CS_PIN)
// SCK 拉高 输出高
#define SCLK_1          DL_GPIO_setPins(AD9959_AD9959_SCK_PORT, AD9959_AD9959_SCK_PIN)        
#define SCLK_0          DL_GPIO_clearPins(AD9959_AD9959_SCK_PORT, AD9959_AD9959_SCK_PIN)
// SD0 拉高 输出高
#define SDIO0_1         DL_GPIO_setPins(AD9959_AD9959_SD0_PORT, AD9959_AD9959_SD0_PIN)     
#define SDIO0_0         DL_GPIO_clearPins(AD9959_AD9959_SD0_PORT, AD9959_AD9959_SD0_PIN)
// IU 拉高 输出高
#define IO_update_1     DL_GPIO_setPins(AD9959_AD9959_IU_PORT, AD9959_AD9959_IU_PIN)       
#define IO_update_0     DL_GPIO_clearPins(AD9959_AD9959_IU_PORT, AD9959_AD9959_IU_PIN)
// RST 拉高 输出高
#define Reset_1         DL_GPIO_setPins(AD9959_AD9959_RST_PORT, AD9959_AD9959_RST_PIN)     
#define Reset_0         DL_GPIO_clearPins(AD9959_AD9959_RST_PORT, AD9959_AD9959_RST_PIN)
// PDN 拉低 输出低
#define PWR_1           DL_GPIO_setPins(AD9959_AD9959_PDN_PORT, AD9959_AD9959_PDN_PIN)     
#define PWR_0           DL_GPIO_clearPins(AD9959_AD9959_PDN_PORT, AD9959_AD9959_PDN_PIN)
// SD1 拉低 输出低
#define SDIO1_1         DL_GPIO_setPins(AD9959_AD9959_SD1_PORT, AD9959_AD9959_SD1_PIN)     
#define SDIO1_0         DL_GPIO_clearPins(AD9959_AD9959_SD1_PORT, AD9959_AD9959_SD1_PIN)
// SD2 拉低 输出低
#define SDIO2_1         DL_GPIO_setPins(AD9959_AD9959_SD2_PORT, AD9959_AD9959_SD2_PIN)     
#define SDIO2_0         DL_GPIO_clearPins(AD9959_AD9959_SD2_PORT, AD9959_AD9959_SD2_PIN)
// SD3 拉低 输出低
#define SDIO3_1  	    DL_GPIO_setPins(AD9959_AD9959_SD3_PORT, AD9959_AD9959_SD3_PIN)     
#define SDIO3_0         DL_GPIO_clearPins(AD9959_AD9959_SD3_PORT, AD9959_AD9959_SD3_PIN)

// #define PS0_1 (HAL_GPIO_WritePin(AD9959_PS0_GPIO_Port, AD9959_PS0_Pin, GPIO_PIN_SET)) 
// #define PS0_0 (HAL_GPIO_WritePin(AD9959_PS0_GPIO_Port, AD9959_PS0_Pin, GPIO_PIN_RESET)) 

// #define PS1_1 (HAL_GPIO_WritePin(AD9959_PS1_GPIO_Port, AD9959_PS1_Pin, GPIO_PIN_SET)) 
// #define PS1_0 (HAL_GPIO_WritePin(AD9959_PS1_GPIO_Port, AD9959_PS1_Pin, GPIO_PIN_RESET))

// #define PS2_1 (HAL_GPIO_WritePin(AD9959_PS2_GPIO_Port, AD9959_PS2_Pin, GPIO_PIN_SET)) 
// #define PS2_0 (HAL_GPIO_WritePin(AD9959_PS2_GPIO_Port, AD9959_PS2_Pin, GPIO_PIN_RESET))	

// #define PS3_1 (HAL_GPIO_WritePin(AD9959_PS3_GPIO_Port, AD9959_PS3_Pin, GPIO_PIN_SET)) 
// #define PS3_0 (HAL_GPIO_WritePin(AD9959_PS3_GPIO_Port, AD9959_PS3_Pin, GPIO_PIN_RESET))

//-----------------------------------------------------------------
// 外部函数声明
//-----------------------------------------------------------------
extern void AD9959_Init(void);  //复位
extern void WrFrequencyTuningWorddata(double f,uchar *ChannelFrequencyTuningWorddata);
extern void IO_update(void)  ;
extern void WriteToAD9959ViaSpi(uchar RegisterAddress, uchar NumberofRegisters, uchar *RegisterData,uchar temp) ;
extern void WrPhaseOffsetTuningWorddata(double f,uchar *ChannelPhaseOffsetTuningWorddata);
extern void WrAmplitudeTuningWorddata(double f,uchar *ChannelAmplitudeTuningWorddata);//计算过程注意与计算频率区别
extern void WrAmplitudeTuningWorddata1(double f,uchar *ChannelAmplitudeTuningWorddata,uchar *ASRAmplituteWordata);

#endif	// #if USE_AD9959

#endif	// #ifndef _AD9959_H

AD9959_Outset.c

点击查看代码
#include "AD9959_Outset.h"
#include "AD9959.h"

#if USE_AD9959

//--------通道寄存器地址宏定义---------------//
#define CSR 0x00               //通道选择寄存器
#define FR1 0x01               //功能寄存器1
#define FR2 0x02               //功能寄存器2
#define CFR 0x03               //通道功能寄存器
#define CFTW0 0x04             //32位通道频率转换字寄存器
#define CPOW0 0x05             //14位通道相位转换字寄存器
#define ACR 0x06               //幅度控制寄存器
#define SRR 0x07               //线性扫描定时器
#define RDW 0x08               //线性向上扫描定时器
#define FDW 0x09               //线性向下扫描定时器

#define uchar unsigned char
#define uint unsigned int
	
void AD9959_enablechannelall(void)               //全部通道使能
{
	uchar ChannelSelectRegisterdata0[1] = {0x10};  // 通道选择寄存器,3线传输,数据高位优先
	uchar ChannelSelectRegisterdata1[1] = {0x20};  // 通道选择寄存器,3线传输,数据高位优先
	uchar ChannelSelectRegisterdata2[1] = {0x40};  // 通道选择寄存器,3线传输,数据高位优先 
	uchar ChannelSelectRegisterdata3[1] = {0x80};  // 通道选择寄存器,3线传输,数据高位优先 

	
	WriteToAD9959ViaSpi(CSR,1,ChannelSelectRegisterdata0,0);
	WriteToAD9959ViaSpi(CSR,1,ChannelSelectRegisterdata1,0);
	WriteToAD9959ViaSpi(CSR,1,ChannelSelectRegisterdata2,0);
	WriteToAD9959ViaSpi(CSR,1,ChannelSelectRegisterdata3,0);
}


void AD9959_enablechannel0(void)                 //通道0使能
{
	uchar ChannelSelectRegisterdata0[1] = {0x10};  // 通道选择寄存器,3线传输,数据高位优先
																			
	WriteToAD9959ViaSpi(CSR,1,ChannelSelectRegisterdata0,0); 
}

void AD9959_enablechannel1(void)                  //通道1使能
{
	uchar ChannelSelectRegisterdata1[1] = {0x20};   // 通道选择寄存器,3线传输,数据高位优先 
																									// SDIO0 数据输入 and SDIO2 数据输出
	WriteToAD9959ViaSpi(CSR,1,ChannelSelectRegisterdata1,0); 
}
void AD9959_enablechannel2(void)                  //通道1使能
{
	uchar ChannelSelectRegisterdata2[1] = {0x40};   // 通道选择寄存器,3线传输,数据高位优先 
																									// SDIO0 数据输入 and SDIO2 数据输出
	WriteToAD9959ViaSpi(CSR,1,ChannelSelectRegisterdata2,0); 
}
void AD9959_enablechannel3(void)                  //通道1使能
{
	uchar ChannelSelectRegisterdata3[1] = {0x80};   // 通道选择寄存器,3线传输,数据高位优先 
																									// SDIO0 数据输入 and SDIO2 数据输出
	WriteToAD9959ViaSpi(CSR,1,ChannelSelectRegisterdata3,0); 
}



void AD9959_Setwavefrequency (double f)  	                       //输出单个频率
{ 
 uchar ChannelFrequencyTuningWord1data[4];  
 uchar ChannelFunctionRegisterdata[3] = {0x00,0x23,0x35};        //单频模式时选择,启用正弦功能(sine)
 uchar FunctionRegister1data[3] = {0xD0,0x00,0x00};  
 
		
 WriteToAD9959ViaSpi(FR1,3,FunctionRegister1data,0);         	 	 //设置功能寄存器
 WriteToAD9959ViaSpi(CFR,3,ChannelFunctionRegisterdata,0);       //设置通道功能寄存器,目的是为了实现正余弦功能
																																 //(没有要求时可以不设置该寄存器同样也可以正常输出)
																																 //寄存器8、9位控制输出幅度,分四个档位
 WrFrequencyTuningWorddata(f,ChannelFrequencyTuningWord1data);   //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(CFTW0,4,ChannelFrequencyTuningWord1data,1); //写入频率控制字	
}

void AD9959_Setwavephase(double f,int p)													//输出相位程序可调
{
 uchar ChannelPhaseOffsetTuningWorddata[2];
 uchar ChannelFrequencyTuningWorddata[4];
 
 uchar ChannelFunctionRegisterdata[3] = {0x00,0x23,0x35};        //单频模式时选择,启用正弦功能(sine)
 uchar FunctionRegister1data[3] = {0xD0,0x00,0x00};   
 WriteToAD9959ViaSpi(FR1,3,FunctionRegister1data,0);         	 	  //设置功能寄存器
 
 WriteToAD9959ViaSpi(CFR,3,ChannelFunctionRegisterdata,0);       //设置通道功能寄存器,目的是为了实现正余弦功能
 
 WrPhaseOffsetTuningWorddata(p,ChannelPhaseOffsetTuningWorddata); //设置相位转换字
 WriteToAD9959ViaSpi(CPOW0,2,ChannelPhaseOffsetTuningWorddata,0); //写入相位控制字

 WrFrequencyTuningWorddata(f,ChannelFrequencyTuningWorddata);  	  //设置频率转换字
 WriteToAD9959ViaSpi(CFTW0,4,ChannelFrequencyTuningWorddata,1);		//写入频率控制字
 
 
}	

void AD9959_Setwaveamplitute(double f,int a)                     //输出幅度可自定义调节
{
 uchar ChannelFrequencyTuningWorddata[4];
 uchar ASRAmplituteWordata[3];
 uchar AmplitudeControldata[3] = {0xff,0x17,0xff};               //手动控制输出幅度
 uchar ChannelFunctionRegisterdata[3] = {0x00,0x23,0x35};        //单频模式时选择,启用正弦功能(sine)
 
 uchar FunctionRegister1data[3] = {0xD0,0x00,0x00}; 
 WriteToAD9959ViaSpi(FR1,3,FunctionRegister1data,0);         	 	 //设置功能寄存器
 WriteToAD9959ViaSpi(CFR,3,ChannelFunctionRegisterdata,0);       //设置通道功能寄存器,目的是为了实现正余弦功能
 WrAmplitudeTuningWorddata1(a,AmplitudeControldata,ASRAmplituteWordata) ;
 WriteToAD9959ViaSpi(ACR,3,ASRAmplituteWordata,0);              //设置输出幅度控制模式

 WrFrequencyTuningWorddata(f,ChannelFrequencyTuningWorddata);   //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(CFTW0,4,ChannelFrequencyTuningWorddata,1); //写入频率转换字
}
//设置二阶调制
//////////////////////////////////////////////////////
void AD9959_SetFremodulation2(double f1,double f2)
{  
// 	 u8 a2 = 0;
 uchar ChannelFrequencyTuningWord0data[4];
 uchar ChannelFrequencyTuningWord1data[4];
 uchar ChannelFunctionRegisterdata[3] = {0x80,0x23,0x30};        //无RU/RD
 uchar FunctionRegister1data[3] = {0xD0,0x00,0x00}; 

 WriteToAD9959ViaSpi(FR1,3,FunctionRegister1data,0);         	 	 //设置功能寄存器 	 
 WriteToAD9959ViaSpi(CFR,3,ChannelFunctionRegisterdata,0);       //设置通道功能寄存器

	 //设置起始频率S0(0x0A)

 WrFrequencyTuningWorddata(f1,ChannelFrequencyTuningWord0data);   //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x0A,4,ChannelFrequencyTuningWord0data,0);  //写入频率控制字
	
	//设置终止频率E0(0x04)

 WrFrequencyTuningWorddata(f2,ChannelFrequencyTuningWord1data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(CFTW0,4,ChannelFrequencyTuningWord1data,1);  //写入频率控制字

}

void AD9959_SetPhamodulation2(double f,int p1,int p2)              //p1起始相位,p2终止相位
{
// 	 uchar ChannelFrequencyTuningWord0data[4];
 uchar ChannelFrequencyTuningWord1data[4];
 uchar ChannelPhaseOffsetTuningWord0data[2];
 uchar ChannelPhaseOffsetTuningWord1data[2];
 
 uchar ChannelFunctionRegisterdata[3] = {0xc0,0x03,0x34};  					//相位调制模式启用(连续扫描可能开启)
 uchar AmplitudeControldata[3] = {0x00,0x03,0xff};									//二级调制时启用,默认输出最大
 uchar FunctionRegister1data[3] = {0xD0,0x00,0x00}; 
// 	 uchar FunctionRegister1data[3] = {0xD0,0x54,0x00};    						//二级调制时需进行幅度RU/RD时选择
																																		//PO进行调频,P2进行幅度RU/RD
// 	 uchar AmplitudeControldata[3] = {0xff,0x1f,0xff}; 								//开启RU/RD
	 
 WriteToAD9959ViaSpi(FR1,3,FunctionRegister1data,0);         	 		  //设置功能寄存器
 
 WriteToAD9959ViaSpi(CFR,3,ChannelFunctionRegisterdata,0);    			//设置通道功能寄存器,即相位调制启动
//    WriteToAD9959ViaSpi(ACR,3,AmplitudeControldata,0);    					//需输出幅度RU/RD模式才选择,且要修改功能寄存器FR1
	//设置地址0x05(CPOW0) 的相位

 WrPhaseOffsetTuningWorddata(p1,ChannelPhaseOffsetTuningWord0data); //将十进制相位数转换为2进制相位控制字
 WriteToAD9959ViaSpi(CPOW0,2,ChannelPhaseOffsetTuningWord0data,0);	//写入相位控制字
 //设置地址0x0a(CW1) 的相位

 WrPhaseOffsetTuningWorddata(p2,ChannelPhaseOffsetTuningWord1data); //将十进制相位数转换为2进制相位控制字?
 WriteToAD9959ViaSpi(0x0a,4,ChannelPhaseOffsetTuningWord1data,0);		//写入相位控制字
// f=2000000;    //设置输出频率
 WrFrequencyTuningWorddata(f,ChannelFrequencyTuningWord1data);    	//将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(CFTW0,4,ChannelFrequencyTuningWord1data,1);		//写入频率控制字	
}

void AD9959_SetAM2(double f)
{ 
 uchar ChannelFrequencyTuningWord0data[4];
 uchar ChannelAmplitudeTuningWorddata[4]={0x1f,0x30,0x00,0x00}; //72mV
 uchar ChannelFunctionRegisterdata[3] = {0x40,0x03,0x30};
 uchar AmplitudeControldata[3]={0x00,0x03,0xff};  //500mV 
 uchar FunctionRegister1data[3]={0xD0,0x00,0x00}; 

 WriteToAD9959ViaSpi(FR1,3,FunctionRegister1data,0);         	 	 //设置功能寄存器
 WriteToAD9959ViaSpi(CFR,3,ChannelFunctionRegisterdata,0); 			 //设置通道功能寄存器

 WriteToAD9959ViaSpi(ACR,3,AmplitudeControldata,0); 						 //设置幅度大小(S1)
 
 WriteToAD9959ViaSpi(0x0a,4,ChannelAmplitudeTuningWorddata,0);	 // 设置幅度大小(S2)
																																	//设置输出频率大小
 WrFrequencyTuningWorddata(f,ChannelFrequencyTuningWord0data);   	//写频率控制字
 WriteToAD9959ViaSpi(CFTW0,4,ChannelFrequencyTuningWord0data,1);
 
}

/////////////////////////////////////////////////////////////////////

//四阶调制   CH0/1      
//////////////////////////////////////////////////////////////////////
void AD9959_SetFremodulation4(double f1,double f2,double f3,double f4)
{
// 	 u8 a = 0;
 uchar ChannelFrequencyTuningWord0data[4];
 uchar ChannelFrequencyTuningWord1data[4];
 uchar ChannelFrequencyTuningWord2data[4];
 uchar ChannelFrequencyTuningWord3data[4];
 uchar ChannelFunctionRegisterdata[3] = {0x80,0x23,0x30};        //无RU/RD
 uchar FunctionRegister1data[3] = {0xD0,0x01,0x00};  	 

 WriteToAD9959ViaSpi(FR1,3,FunctionRegister1data,0);         	 	 //设置功能寄存器	 
 WriteToAD9959ViaSpi(CFR,3,ChannelFunctionRegisterdata,0);       //设置通道功能寄存器


 WrFrequencyTuningWorddata(f1,ChannelFrequencyTuningWord0data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x04,4,ChannelFrequencyTuningWord0data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f2,ChannelFrequencyTuningWord1data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x0A,4,ChannelFrequencyTuningWord1data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f3,ChannelFrequencyTuningWord2data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x0B,4,ChannelFrequencyTuningWord2data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f4,ChannelFrequencyTuningWord3data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x0C,4,ChannelFrequencyTuningWord3data,1);  //写入频率控制字
}
void AD9959_SetPhamodulation4(double f,int p1,int p2,int p3,int p4)
{
// 	 u8 b = 0;
 uchar ChannelFrequencyTuningWord0data[4];
 uchar ChannelPhaseOffsetTuningWord0data[4];
 uchar ChannelPhaseOffsetTuningWord1data[4];
 uchar ChannelPhaseOffsetTuningWord2data[4];
 uchar ChannelPhaseOffsetTuningWord3data[4];
 
 uchar ChannelFunctionRegisterdata[3] = {0xc0,0x03,0x30};  					//相位调制模式启用(连续扫描可能开启)
 uchar AmplitudeControldata[3] = {0x00,0x03,0xff};									//四级调制时启用,默认输出最大
 uchar FunctionRegister1data[3] = {0xD0,0x01,0x00}; 

 WriteToAD9959ViaSpi(FR1,3,FunctionRegister1data,0);         	 		  //设置功能寄存器
 WriteToAD9959ViaSpi(CFR,3,ChannelFunctionRegisterdata,0);    			//设置通道功能寄存器,即相位调制启动
 
 WrPhaseOffsetTuningWorddata(p1,ChannelPhaseOffsetTuningWord0data); //将十进制相位数转换为2进制相位控制字
 WriteToAD9959ViaSpi(CPOW0,2,ChannelPhaseOffsetTuningWord0data,1);	//写入相位控制字

 WrPhaseOffsetTuningWorddata(p2,ChannelPhaseOffsetTuningWord1data); //将十进制相位数转换为2进制相位控制字?
 WriteToAD9959ViaSpi(0x0a,4,ChannelPhaseOffsetTuningWord1data,1);		//写入相位控制字

 WrPhaseOffsetTuningWorddata(p3,ChannelPhaseOffsetTuningWord2data); //将十进制相位数转换为2进制相位控制字
 WriteToAD9959ViaSpi(0x0b,4,ChannelPhaseOffsetTuningWord2data,1);	//写入相位控制字

 WrPhaseOffsetTuningWorddata(p4,ChannelPhaseOffsetTuningWord3data); //将十进制相位数转换为2进制相位控制字?
 WriteToAD9959ViaSpi(0x0c,4,ChannelPhaseOffsetTuningWord3data,1);		//写入相位控制字
 f=200000;
 WrFrequencyTuningWorddata(f,ChannelFrequencyTuningWord0data);    	//将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(CFTW0,4,ChannelFrequencyTuningWord0data,1);		//写入频率控制字
}
void AD9959_SetAM4(double f)
{
// 	 u8 cn = 0;
 uchar ChannelFrequencyTuningWord0data[4];
 uchar AmplitudeControldata[3]={0x00,0x03,0xff};
 uchar ChannelAmplitudeTuningWord1data[4]={0xdf,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord2data[4]={0x8f,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord3data[4]={0x5f,0x30,0x00,0x00};
 
 uchar ChannelFunctionRegisterdata[3] = {0x40,0x03,0x30};
 uchar FunctionRegister1data[3]={0xD0,0x01,0x00};

 WriteToAD9959ViaSpi(FR1,3,FunctionRegister1data,0);         	 	 //设置功能寄存器
 WriteToAD9959ViaSpi(CFR,3,ChannelFunctionRegisterdata,0); 			 //设置通道功能寄存器

 WriteToAD9959ViaSpi(ACR,3,AmplitudeControldata,0); 						 //设置幅度大小(S1)

 WriteToAD9959ViaSpi(0x0a,4,ChannelAmplitudeTuningWord1data,0);	 // 设置幅度大小(S2)

 WriteToAD9959ViaSpi(0x0b,4,ChannelAmplitudeTuningWord2data,0);

 WriteToAD9959ViaSpi(0x0c,4,ChannelAmplitudeTuningWord3data,0);
 
 WrFrequencyTuningWorddata(f,ChannelFrequencyTuningWord0data);   	//写频率控制字
 WriteToAD9959ViaSpi(CFTW0,4,ChannelFrequencyTuningWord0data,1);
}

/////////////////////////////////////////////////////////////////////////
//  四阶调制 CH2/3    
/////////////////////////////////////////////////////////////////////////

void AD9959_SetFremodulation42(double f1,double f2,double f3,double f4)
{
// 	 u8 a = 0;
 uchar ChannelFrequencyTuningWord0data[4];
 uchar ChannelFrequencyTuningWord1data[4];
 uchar ChannelFrequencyTuningWord2data[4];
 uchar ChannelFrequencyTuningWord3data[4];
 uchar ChannelFunctionRegisterdata[3] = {0x80,0x23,0x30};        //无RU/RD
 uchar FunctionRegister1data[3] = {0xD0,0x51,0x00};  	 

 WriteToAD9959ViaSpi(FR1,3,FunctionRegister1data,0);         	 	 //设置功能寄存器	 
 WriteToAD9959ViaSpi(CFR,3,ChannelFunctionRegisterdata,0);       //设置通道功能寄存器

 WrFrequencyTuningWorddata(f1,ChannelFrequencyTuningWord0data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x04,4,ChannelFrequencyTuningWord0data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f2,ChannelFrequencyTuningWord1data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x0A,4,ChannelFrequencyTuningWord1data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f3,ChannelFrequencyTuningWord2data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x0B,4,ChannelFrequencyTuningWord2data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f4,ChannelFrequencyTuningWord3data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x0C,4,ChannelFrequencyTuningWord3data,1);  //写入频率控制字
}
void AD9959_SetPhamodulation42(double f,int p1,int p2,int p3,int p4)
{
// 	 u8 b = 0;
 uchar ChannelFrequencyTuningWord0data[4];
 uchar ChannelPhaseOffsetTuningWord0data[4];
 uchar ChannelPhaseOffsetTuningWord1data[4];
 uchar ChannelPhaseOffsetTuningWord2data[4];
 uchar ChannelPhaseOffsetTuningWord3data[4];
 
 uchar ChannelFunctionRegisterdata[3] = {0xc0,0x03,0x30};  					//相位调制模式启用(连续扫描可能开启)
 uchar AmplitudeControldata[3] = {0x00,0x03,0xff};									//四级调制时启用,默认输出最大
 uchar FunctionRegister1data[3] = {0xD0,0x51,0x00}; 

 WriteToAD9959ViaSpi(FR1,3,FunctionRegister1data,0);         	 		  //设置功能寄存器
 WriteToAD9959ViaSpi(CFR,3,ChannelFunctionRegisterdata,0);    			//设置通道功能寄存器,即相位调制启动

 WrPhaseOffsetTuningWorddata(p1,ChannelPhaseOffsetTuningWord0data); //将十进制相位数转换为2进制相位控制字
 WriteToAD9959ViaSpi(CPOW0,2,ChannelPhaseOffsetTuningWord0data,1);	//写入相位控制字

 WrPhaseOffsetTuningWorddata(p2,ChannelPhaseOffsetTuningWord1data); //将十进制相位数转换为2进制相位控制字?
 WriteToAD9959ViaSpi(0x0a,4,ChannelPhaseOffsetTuningWord1data,1);		//写入相位控制字

 WrPhaseOffsetTuningWorddata(p3,ChannelPhaseOffsetTuningWord2data); //将十进制相位数转换为2进制相位控制字
 WriteToAD9959ViaSpi(0x0b,4,ChannelPhaseOffsetTuningWord2data,1);	//写入相位控制字

 WrPhaseOffsetTuningWorddata(p4,ChannelPhaseOffsetTuningWord3data); //将十进制相位数转换为2进制相位控制字?
 WriteToAD9959ViaSpi(0x0c,4,ChannelPhaseOffsetTuningWord3data,1);		//写入相位控制字
 f=200000;
 WrFrequencyTuningWorddata(f,ChannelFrequencyTuningWord0data);    	//将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(CFTW0,4,ChannelFrequencyTuningWord0data,1);		//写入频率控制字
}
void AD9959_SetAM42(double f)
{
// 	 u8 cn = 0;
 uchar ChannelFrequencyTuningWord0data[4];
 uchar AmplitudeControldata[3]={0x00,0x03,0xff};
 uchar ChannelAmplitudeTuningWord1data[4]={0xdf,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord2data[4]={0x8f,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord3data[4]={0x5f,0x30,0x00,0x00};
 
 uchar ChannelFunctionRegisterdata[3] = {0x40,0x03,0x30};
 uchar FunctionRegister1data[3]={0xD0,0x51,0x00};

 WriteToAD9959ViaSpi(FR1,3,FunctionRegister1data,0);         	 	 //设置功能寄存器
 WriteToAD9959ViaSpi(CFR,3,ChannelFunctionRegisterdata,0); 			 //设置通道功能寄存器

 WriteToAD9959ViaSpi(ACR,3,AmplitudeControldata,0); 						 //设置幅度大小(S1)

 WriteToAD9959ViaSpi(0x0a,4,ChannelAmplitudeTuningWord1data,0);	 // 设置幅度大小(S2)

 WriteToAD9959ViaSpi(0x0b,4,ChannelAmplitudeTuningWord2data,0);

 WriteToAD9959ViaSpi(0x0c,4,ChannelAmplitudeTuningWord3data,0);
 
 WrFrequencyTuningWorddata(f,ChannelFrequencyTuningWord0data);   	//写频率控制字
 WriteToAD9959ViaSpi(CFTW0,4,ChannelFrequencyTuningWord0data,1);
}

/////////////////////////////////////////////////////////////////////////
//  八阶调制 CH0  
/////////////////////////////////////////////////////////////////////////

void AD9959_SetFremodulation80(double f1,double f2,double f3,double f4,double f5,double f6,double f7,double f8)
{
// 	 u8 a = 0;
 uchar ChannelFrequencyTuningWord0data[4];
 uchar ChannelFrequencyTuningWord1data[4];
 uchar ChannelFrequencyTuningWord2data[4];
 uchar ChannelFrequencyTuningWord3data[4];
 uchar ChannelFrequencyTuningWord4data[4];
 uchar ChannelFrequencyTuningWord5data[4];
 uchar ChannelFrequencyTuningWord6data[4];
 uchar ChannelFrequencyTuningWord7data[4];
 uchar ChannelFunctionRegisterdata[3] = {0x80,0x23,0x30};        //无RU/RD
 uchar FunctionRegister1data[3] = {0xD0,0xc2,0x00};  	 

 WriteToAD9959ViaSpi(FR1,3,FunctionRegister1data,0);         	 	 //设置功能寄存器	 
 WriteToAD9959ViaSpi(CFR,3,ChannelFunctionRegisterdata,0);       //设置通道功能寄存器

 WrFrequencyTuningWorddata(f1,ChannelFrequencyTuningWord0data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x04,4,ChannelFrequencyTuningWord0data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f2,ChannelFrequencyTuningWord1data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x0A,4,ChannelFrequencyTuningWord1data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f3,ChannelFrequencyTuningWord2data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x0B,4,ChannelFrequencyTuningWord2data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f4,ChannelFrequencyTuningWord3data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x0C,4,ChannelFrequencyTuningWord3data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f5,ChannelFrequencyTuningWord4data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x0D,4,ChannelFrequencyTuningWord4data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f6,ChannelFrequencyTuningWord5data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x0E,4,ChannelFrequencyTuningWord5data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f7,ChannelFrequencyTuningWord6data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x0F,4,ChannelFrequencyTuningWord6data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f8,ChannelFrequencyTuningWord7data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x10,4,ChannelFrequencyTuningWord7data,1);  //写入频率控制字
}
void AD9959_SetPhamodulation80(double f,int p1,int p2,int p3,int p4,int p5,int p6,int p7,int p8)
{
// 	 u8 b = 0;
 uchar ChannelFrequencyTuningWord0data[4];
 uchar ChannelPhaseOffsetTuningWord0data[4];
 uchar ChannelPhaseOffsetTuningWord1data[4];
 uchar ChannelPhaseOffsetTuningWord2data[4];
 uchar ChannelPhaseOffsetTuningWord3data[4];
 uchar ChannelPhaseOffsetTuningWord4data[4];
 uchar ChannelPhaseOffsetTuningWord5data[4];
 uchar ChannelPhaseOffsetTuningWord6data[4];
 uchar ChannelPhaseOffsetTuningWord7data[4];
 
 uchar ChannelFunctionRegisterdata[3] = {0xc0,0x03,0x30};  					//相位调制模式启用(连续扫描可能开启)
 uchar AmplitudeControldata[3] = {0x00,0x03,0xff};									//八级调制时启用,默认输出最大
 uchar FunctionRegister1data[3] = {0xD0,0xc2,0x00}; 

 WriteToAD9959ViaSpi(FR1,3,FunctionRegister1data,0);         	 		  //设置功能寄存器
 WriteToAD9959ViaSpi(CFR,3,ChannelFunctionRegisterdata,0);    			//设置通道功能寄存器,即相位调制启动

 WrPhaseOffsetTuningWorddata(p1,ChannelPhaseOffsetTuningWord0data); //将十进制相位数转换为2进制相位控制字
 WriteToAD9959ViaSpi(CPOW0,2,ChannelPhaseOffsetTuningWord0data,1);	//写入相位控制字

 WrPhaseOffsetTuningWorddata(p2,ChannelPhaseOffsetTuningWord1data); //将十进制相位数转换为2进制相位控制字?
 WriteToAD9959ViaSpi(0x0a,4,ChannelPhaseOffsetTuningWord1data,1);		//写入相位控制字

 WrPhaseOffsetTuningWorddata(p3,ChannelPhaseOffsetTuningWord2data); //将十进制相位数转换为2进制相位控制字
 WriteToAD9959ViaSpi(0x0b,4,ChannelPhaseOffsetTuningWord2data,1);	//写入相位控制字

 WrPhaseOffsetTuningWorddata(p4,ChannelPhaseOffsetTuningWord3data); //将十进制相位数转换为2进制相位控制字?
 WriteToAD9959ViaSpi(0x0c,4,ChannelPhaseOffsetTuningWord3data,1);		//写入相位控制字

 WrPhaseOffsetTuningWorddata(p5,ChannelPhaseOffsetTuningWord4data); //将十进制相位数转换为2进制相位控制字
 WriteToAD9959ViaSpi(0x0d,4,ChannelPhaseOffsetTuningWord4data,1);	//写入相位控制字

 WrPhaseOffsetTuningWorddata(p6,ChannelPhaseOffsetTuningWord5data); //将十进制相位数转换为2进制相位控制字?
 WriteToAD9959ViaSpi(0x0e,4,ChannelPhaseOffsetTuningWord5data,1);		//写入相位控制字

 WrPhaseOffsetTuningWorddata(p7,ChannelPhaseOffsetTuningWord6data); //将十进制相位数转换为2进制相位控制字
 WriteToAD9959ViaSpi(0x0f,4,ChannelPhaseOffsetTuningWord6data,1);	//写入相位控制字

 WrPhaseOffsetTuningWorddata(p8,ChannelPhaseOffsetTuningWord7data); //将十进制相位数转换为2进制相位控制字?
 WriteToAD9959ViaSpi(0x10,4,ChannelPhaseOffsetTuningWord7data,1);		//写入相位控制字
 f=200000;
 WrFrequencyTuningWorddata(f,ChannelFrequencyTuningWord0data);    	//将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(CFTW0,4,ChannelFrequencyTuningWord0data,1);		//写入频率控制字
}
void AD9959_SetAM80(double f)
{
// 	 u8 cn = 0;
 uchar ChannelFrequencyTuningWord0data[4];

 uchar AmplitudeControldata[3]={0x00,0x03,0xff};
 uchar ChannelAmplitudeTuningWord1data[4]={0xdf,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord2data[4]={0xbf,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord3data[4]={0x9f,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord4data[4]={0x7f,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord5data[4]={0x5f,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord6data[4]={0x3f,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord7data[4]={0x1f,0x30,0x00,0x00};
 
 uchar ChannelFunctionRegisterdata[3] = {0x40,0x03,0x30};
 uchar FunctionRegister1data[3]={0xD0,0xc2,0x00};

 WriteToAD9959ViaSpi(FR1,3,FunctionRegister1data,0);         	 	 //设置功能寄存器
 WriteToAD9959ViaSpi(CFR,3,ChannelFunctionRegisterdata,0); 			 //设置通道功能寄存器

 WriteToAD9959ViaSpi(ACR,3,AmplitudeControldata,0); 						 //设置幅度大小(S1)

 WriteToAD9959ViaSpi(0x0a,4,ChannelAmplitudeTuningWord1data,0);	 // 设置幅度大小(S2)

 WriteToAD9959ViaSpi(0x0b,4,ChannelAmplitudeTuningWord2data,0);

 WriteToAD9959ViaSpi(0x0c,4,ChannelAmplitudeTuningWord3data,0);

 WriteToAD9959ViaSpi(0x0d,4,ChannelAmplitudeTuningWord4data,0); 						 //设置幅度大小(S1)

 WriteToAD9959ViaSpi(0x0e,4,ChannelAmplitudeTuningWord5data,0);	 // 设置幅度大小(S2)

 WriteToAD9959ViaSpi(0x0f,4,ChannelAmplitudeTuningWord6data,0);

 WriteToAD9959ViaSpi(0x10,4,ChannelAmplitudeTuningWord7data,0);
 
 WrFrequencyTuningWorddata(f,ChannelFrequencyTuningWord0data);   	//写频率控制字
 WriteToAD9959ViaSpi(CFTW0,4,ChannelFrequencyTuningWord0data,1);
}
/////////////////////////////////////////////////////////////////////////
//  八阶调制 CH1
/////////////////////////////////////////////////////////////////////////

void AD9959_SetFremodulation81(double f1,double f2,double f3,double f4,double f5,double f6,double f7,double f8)
{
// 	 u8 a = 0;
 uchar ChannelFrequencyTuningWord0data[4];
 uchar ChannelFrequencyTuningWord1data[4];
 uchar ChannelFrequencyTuningWord2data[4];
 uchar ChannelFrequencyTuningWord3data[4];
 uchar ChannelFrequencyTuningWord4data[4];
 uchar ChannelFrequencyTuningWord5data[4];
 uchar ChannelFrequencyTuningWord6data[4];
 uchar ChannelFrequencyTuningWord7data[4];
 uchar ChannelFunctionRegisterdata[3] = {0x80,0x23,0x30};        //无RU/RD
 uchar FunctionRegister1data[3] = {0xD0,0xd2,0x00};  	 

 WriteToAD9959ViaSpi(FR1,3,FunctionRegister1data,0);         	 	 //设置功能寄存器	 
 WriteToAD9959ViaSpi(CFR,3,ChannelFunctionRegisterdata,0);       //设置通道功能寄存器

 WrFrequencyTuningWorddata(f1,ChannelFrequencyTuningWord0data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x04,4,ChannelFrequencyTuningWord0data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f2,ChannelFrequencyTuningWord1data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x0A,4,ChannelFrequencyTuningWord1data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f3,ChannelFrequencyTuningWord2data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x0B,4,ChannelFrequencyTuningWord2data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f4,ChannelFrequencyTuningWord3data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x0C,4,ChannelFrequencyTuningWord3data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f5,ChannelFrequencyTuningWord4data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x0D,4,ChannelFrequencyTuningWord4data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f6,ChannelFrequencyTuningWord5data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x0E,4,ChannelFrequencyTuningWord5data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f7,ChannelFrequencyTuningWord6data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x0F,4,ChannelFrequencyTuningWord6data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f8,ChannelFrequencyTuningWord7data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x10,4,ChannelFrequencyTuningWord7data,1);  //写入频率控制字
}
void AD9959_SetPhamodulation81(double f,int p1,int p2,int p3,int p4,int p5,int p6,int p7,int p8)
{
// 	 u8 b = 0;
 uchar ChannelFrequencyTuningWord0data[4];
 uchar ChannelPhaseOffsetTuningWord0data[4];
 uchar ChannelPhaseOffsetTuningWord1data[4];
 uchar ChannelPhaseOffsetTuningWord2data[4];
 uchar ChannelPhaseOffsetTuningWord3data[4];
 uchar ChannelPhaseOffsetTuningWord4data[4];
 uchar ChannelPhaseOffsetTuningWord5data[4];
 uchar ChannelPhaseOffsetTuningWord6data[4];
 uchar ChannelPhaseOffsetTuningWord7data[4];
 
 uchar ChannelFunctionRegisterdata[3] = {0xc0,0x03,0x30};  					//相位调制模式启用(连续扫描可能开启)
 uchar AmplitudeControldata[3] = {0x00,0x03,0xff};									//八级调制时启用,默认输出最大
 uchar FunctionRegister1data[3] = {0xD0,0xd2,0x00}; 

 WriteToAD9959ViaSpi(FR1,3,FunctionRegister1data,0);         	 		  //设置功能寄存器
 WriteToAD9959ViaSpi(CFR,3,ChannelFunctionRegisterdata,0);    			//设置通道功能寄存器,即相位调制启动

 WrPhaseOffsetTuningWorddata(p1,ChannelPhaseOffsetTuningWord0data); //将十进制相位数转换为2进制相位控制字
 WriteToAD9959ViaSpi(CPOW0,2,ChannelPhaseOffsetTuningWord0data,1);	//写入相位控制字

 WrPhaseOffsetTuningWorddata(p2,ChannelPhaseOffsetTuningWord1data); //将十进制相位数转换为2进制相位控制字?
 WriteToAD9959ViaSpi(0x0a,4,ChannelPhaseOffsetTuningWord1data,1);		//写入相位控制字

 WrPhaseOffsetTuningWorddata(p3,ChannelPhaseOffsetTuningWord2data); //将十进制相位数转换为2进制相位控制字
 WriteToAD9959ViaSpi(0x0b,4,ChannelPhaseOffsetTuningWord2data,1);	//写入相位控制字

 WrPhaseOffsetTuningWorddata(p4,ChannelPhaseOffsetTuningWord3data); //将十进制相位数转换为2进制相位控制字?
 WriteToAD9959ViaSpi(0x0c,4,ChannelPhaseOffsetTuningWord3data,1);		//写入相位控制字

 WrPhaseOffsetTuningWorddata(p5,ChannelPhaseOffsetTuningWord4data); //将十进制相位数转换为2进制相位控制字
 WriteToAD9959ViaSpi(0x0d,4,ChannelPhaseOffsetTuningWord4data,1);	//写入相位控制字

 WrPhaseOffsetTuningWorddata(p6,ChannelPhaseOffsetTuningWord5data); //将十进制相位数转换为2进制相位控制字?
 WriteToAD9959ViaSpi(0x0e,4,ChannelPhaseOffsetTuningWord5data,1);		//写入相位控制字

 WrPhaseOffsetTuningWorddata(p7,ChannelPhaseOffsetTuningWord6data); //将十进制相位数转换为2进制相位控制字
 WriteToAD9959ViaSpi(0x0f,4,ChannelPhaseOffsetTuningWord6data,1);	//写入相位控制字

 WrPhaseOffsetTuningWorddata(p8,ChannelPhaseOffsetTuningWord7data); //将十进制相位数转换为2进制相位控制字?
 WriteToAD9959ViaSpi(0x10,4,ChannelPhaseOffsetTuningWord7data,1);		//写入相位控制字
 f=200000;
 WrFrequencyTuningWorddata(f,ChannelFrequencyTuningWord0data);    	//将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(CFTW0,4,ChannelFrequencyTuningWord0data,1);		//写入频率控制字
}
void AD9959_SetAM81(double f)
{
// 	 u8 cn = 0;
 uchar ChannelFrequencyTuningWord0data[4];

 uchar AmplitudeControldata[3]={0x00,0x03,0xff};
 uchar ChannelAmplitudeTuningWord1data[4]={0xdf,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord2data[4]={0xbf,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord3data[4]={0x9f,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord4data[4]={0x7f,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord5data[4]={0x5f,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord6data[4]={0x3f,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord7data[4]={0x1f,0x30,0x00,0x00};
 
 uchar ChannelFunctionRegisterdata[3] = {0x40,0x03,0x30};
 uchar FunctionRegister1data[3]={0xD0,0xd2,0x00};

 WriteToAD9959ViaSpi(FR1,3,FunctionRegister1data,0);         	 	 //设置功能寄存器
 WriteToAD9959ViaSpi(CFR,3,ChannelFunctionRegisterdata,0); 			 //设置通道功能寄存器
 
 WriteToAD9959ViaSpi(ACR,3,AmplitudeControldata,0); 						 //设置幅度大小(S1)

 WriteToAD9959ViaSpi(0x0a,4,ChannelAmplitudeTuningWord1data,0);	 // 设置幅度大小(S2)

 WriteToAD9959ViaSpi(0x0b,4,ChannelAmplitudeTuningWord2data,0);

 WriteToAD9959ViaSpi(0x0c,4,ChannelAmplitudeTuningWord3data,0);

 WriteToAD9959ViaSpi(0x0d,4,ChannelAmplitudeTuningWord4data,0); 						 //设置幅度大小(S1)

 WriteToAD9959ViaSpi(0x0e,4,ChannelAmplitudeTuningWord5data,0);	 // 设置幅度大小(S2)

 WriteToAD9959ViaSpi(0x0f,4,ChannelAmplitudeTuningWord6data,0);

 WriteToAD9959ViaSpi(0x10,4,ChannelAmplitudeTuningWord7data,0);
 
 WrFrequencyTuningWorddata(f,ChannelFrequencyTuningWord0data);   	//写频率控制字
 WriteToAD9959ViaSpi(CFTW0,4,ChannelFrequencyTuningWord0data,1);
}
/////////////////////////////////////////////////////////////////////////
//  八阶调制 CH2    
/////////////////////////////////////////////////////////////////////////

void AD9959_SetFremodulation82(double f1,double f2,double f3,double f4,double f5,double f6,double f7,double f8)
{
// 	 u8 a = 0;
 uchar ChannelFrequencyTuningWord0data[4];
 uchar ChannelFrequencyTuningWord1data[4];
 uchar ChannelFrequencyTuningWord2data[4];
 uchar ChannelFrequencyTuningWord3data[4];
 uchar ChannelFrequencyTuningWord4data[4];
 uchar ChannelFrequencyTuningWord5data[4];
 uchar ChannelFrequencyTuningWord6data[4];
 uchar ChannelFrequencyTuningWord7data[4];
 uchar ChannelFunctionRegisterdata[3] = {0x80,0x23,0x30};        //无RU/RD
 uchar FunctionRegister1data[3] = {0xD0,0xe2,0x00};  	 

 WriteToAD9959ViaSpi(FR1,3,FunctionRegister1data,0);         	 	 //设置功能寄存器	 
 WriteToAD9959ViaSpi(CFR,3,ChannelFunctionRegisterdata,0);       //设置通道功能寄存器

 WrFrequencyTuningWorddata(f1,ChannelFrequencyTuningWord0data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x04,4,ChannelFrequencyTuningWord0data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f2,ChannelFrequencyTuningWord1data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x0A,4,ChannelFrequencyTuningWord1data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f3,ChannelFrequencyTuningWord2data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x0B,4,ChannelFrequencyTuningWord2data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f4,ChannelFrequencyTuningWord3data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x0C,4,ChannelFrequencyTuningWord3data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f5,ChannelFrequencyTuningWord4data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x0D,4,ChannelFrequencyTuningWord4data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f6,ChannelFrequencyTuningWord5data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x0E,4,ChannelFrequencyTuningWord5data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f7,ChannelFrequencyTuningWord6data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x0F,4,ChannelFrequencyTuningWord6data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f8,ChannelFrequencyTuningWord7data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x10,4,ChannelFrequencyTuningWord7data,1);  //写入频率控制字
}
void AD9959_SetPhamodulation82(double f,int p1,int p2,int p3,int p4,int p5,int p6,int p7,int p8)
{
// 	 u8 b = 0;
 uchar ChannelFrequencyTuningWord0data[4];
 uchar ChannelPhaseOffsetTuningWord0data[4];
 uchar ChannelPhaseOffsetTuningWord1data[4];
 uchar ChannelPhaseOffsetTuningWord2data[4];
 uchar ChannelPhaseOffsetTuningWord3data[4];
 uchar ChannelPhaseOffsetTuningWord4data[4];
 uchar ChannelPhaseOffsetTuningWord5data[4];
 uchar ChannelPhaseOffsetTuningWord6data[4];
 uchar ChannelPhaseOffsetTuningWord7data[4];
 
 uchar ChannelFunctionRegisterdata[3] = {0xc0,0x03,0x30};  					//相位调制模式启用(连续扫描可能开启)
 uchar AmplitudeControldata[3] = {0x00,0x03,0xff};									//八级调制时启用,默认输出最大
 uchar FunctionRegister1data[3] = {0xD0,0xe2,0x00}; 

 WriteToAD9959ViaSpi(FR1,3,FunctionRegister1data,0);         	 		  //设置功能寄存器
 WriteToAD9959ViaSpi(CFR,3,ChannelFunctionRegisterdata,0);    			//设置通道功能寄存器,即相位调制启动

 WrPhaseOffsetTuningWorddata(p1,ChannelPhaseOffsetTuningWord0data); //将十进制相位数转换为2进制相位控制字
 WriteToAD9959ViaSpi(CPOW0,2,ChannelPhaseOffsetTuningWord0data,1);	//写入相位控制字

 WrPhaseOffsetTuningWorddata(p2,ChannelPhaseOffsetTuningWord1data); //将十进制相位数转换为2进制相位控制字?
 WriteToAD9959ViaSpi(0x0a,4,ChannelPhaseOffsetTuningWord1data,1);		//写入相位控制字

 WrPhaseOffsetTuningWorddata(p3,ChannelPhaseOffsetTuningWord2data); //将十进制相位数转换为2进制相位控制字
 WriteToAD9959ViaSpi(0x0b,4,ChannelPhaseOffsetTuningWord2data,1);	//写入相位控制字

 WrPhaseOffsetTuningWorddata(p4,ChannelPhaseOffsetTuningWord3data); //将十进制相位数转换为2进制相位控制字?
 WriteToAD9959ViaSpi(0x0c,4,ChannelPhaseOffsetTuningWord3data,1);		//写入相位控制字

 WrPhaseOffsetTuningWorddata(p5,ChannelPhaseOffsetTuningWord4data); //将十进制相位数转换为2进制相位控制字
 WriteToAD9959ViaSpi(0x0d,4,ChannelPhaseOffsetTuningWord4data,1);	//写入相位控制字

 WrPhaseOffsetTuningWorddata(p6,ChannelPhaseOffsetTuningWord5data); //将十进制相位数转换为2进制相位控制字?
 WriteToAD9959ViaSpi(0x0e,4,ChannelPhaseOffsetTuningWord5data,1);		//写入相位控制字

 WrPhaseOffsetTuningWorddata(p7,ChannelPhaseOffsetTuningWord6data); //将十进制相位数转换为2进制相位控制字
 WriteToAD9959ViaSpi(0x0f,4,ChannelPhaseOffsetTuningWord6data,1);	//写入相位控制字

 WrPhaseOffsetTuningWorddata(p8,ChannelPhaseOffsetTuningWord7data); //将十进制相位数转换为2进制相位控制字?
 WriteToAD9959ViaSpi(0x10,4,ChannelPhaseOffsetTuningWord7data,1);		//写入相位控制字
 f=200000;
 WrFrequencyTuningWorddata(f,ChannelFrequencyTuningWord0data);    	//将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(CFTW0,4,ChannelFrequencyTuningWord0data,1);		//写入频率控制字
}
void AD9959_SetAM82(double f)
{
// 	 u8 cn = 0;
 uchar ChannelFrequencyTuningWord0data[4];

 uchar AmplitudeControldata[3]={0x00,0x03,0xff};
 uchar ChannelAmplitudeTuningWord1data[4]={0xdf,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord2data[4]={0xbf,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord3data[4]={0x9f,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord4data[4]={0x7f,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord5data[4]={0x5f,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord6data[4]={0x3f,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord7data[4]={0x1f,0x30,0x00,0x00};
 
 uchar ChannelFunctionRegisterdata[3] = {0x40,0x03,0x30};
 uchar FunctionRegister1data[3]={0xD0,0xe2,0x00};

 WriteToAD9959ViaSpi(FR1,3,FunctionRegister1data,0);         	 	 //设置功能寄存器
 WriteToAD9959ViaSpi(CFR,3,ChannelFunctionRegisterdata,0); 			 //设置通道功能寄存器

 WriteToAD9959ViaSpi(ACR,3,AmplitudeControldata,0); 						 //设置幅度大小(S1)

 WriteToAD9959ViaSpi(0x0a,4,ChannelAmplitudeTuningWord1data,0);	 // 设置幅度大小(S2)

 WriteToAD9959ViaSpi(0x0b,4,ChannelAmplitudeTuningWord2data,0);

 WriteToAD9959ViaSpi(0x0c,4,ChannelAmplitudeTuningWord3data,0);

 WriteToAD9959ViaSpi(0x0d,4,ChannelAmplitudeTuningWord4data,0); 						 //设置幅度大小(S1)

 WriteToAD9959ViaSpi(0x0e,4,ChannelAmplitudeTuningWord5data,0);	 // 设置幅度大小(S2)

 WriteToAD9959ViaSpi(0x0f,4,ChannelAmplitudeTuningWord6data,0);

 WriteToAD9959ViaSpi(0x10,4,ChannelAmplitudeTuningWord7data,0);
 
 WrFrequencyTuningWorddata(f,ChannelFrequencyTuningWord0data);   	//写频率控制字
 WriteToAD9959ViaSpi(CFTW0,4,ChannelFrequencyTuningWord0data,1);
}

/////////////////////////////////////////////////////////////////////////
//  八阶调制 CH3    
/////////////////////////////////////////////////////////////////////////

void AD9959_SetFremodulation83(double f1,double f2,double f3,double f4,double f5,double f6,double f7,double f8)
{
// 	 u8 a = 0;
 uchar ChannelFrequencyTuningWord0data[4];
 uchar ChannelFrequencyTuningWord1data[4];
 uchar ChannelFrequencyTuningWord2data[4];
 uchar ChannelFrequencyTuningWord3data[4];
 uchar ChannelFrequencyTuningWord4data[4];
 uchar ChannelFrequencyTuningWord5data[4];
 uchar ChannelFrequencyTuningWord6data[4];
 uchar ChannelFrequencyTuningWord7data[4];
 uchar ChannelFunctionRegisterdata[3] = {0x80,0x23,0x30};        //无RU/RD
 uchar FunctionRegister1data[3] = {0xD0,0xf2,0x00};  	 

 WriteToAD9959ViaSpi(FR1,3,FunctionRegister1data,0);         	 	 //设置功能寄存器	 
 WriteToAD9959ViaSpi(CFR,3,ChannelFunctionRegisterdata,0);       //设置通道功能寄存器

 WrFrequencyTuningWorddata(f1,ChannelFrequencyTuningWord0data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x04,4,ChannelFrequencyTuningWord0data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f2,ChannelFrequencyTuningWord1data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x0A,4,ChannelFrequencyTuningWord1data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f3,ChannelFrequencyTuningWord2data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x0B,4,ChannelFrequencyTuningWord2data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f4,ChannelFrequencyTuningWord3data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x0C,4,ChannelFrequencyTuningWord3data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f5,ChannelFrequencyTuningWord4data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x0D,4,ChannelFrequencyTuningWord4data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f6,ChannelFrequencyTuningWord5data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x0E,4,ChannelFrequencyTuningWord5data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f7,ChannelFrequencyTuningWord6data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x0F,4,ChannelFrequencyTuningWord6data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f8,ChannelFrequencyTuningWord7data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x10,4,ChannelFrequencyTuningWord7data,1);  //写入频率控制字
}
void AD9959_SetPhamodulation83(double f,int p1,int p2,int p3,int p4,int p5,int p6,int p7,int p8)
{
// 	 u8 b = 0;
 uchar ChannelFrequencyTuningWord0data[4];
 uchar ChannelPhaseOffsetTuningWord0data[4];
 uchar ChannelPhaseOffsetTuningWord1data[4];
 uchar ChannelPhaseOffsetTuningWord2data[4];
 uchar ChannelPhaseOffsetTuningWord3data[4];
 uchar ChannelPhaseOffsetTuningWord4data[4];
 uchar ChannelPhaseOffsetTuningWord5data[4];
 uchar ChannelPhaseOffsetTuningWord6data[4];
 uchar ChannelPhaseOffsetTuningWord7data[4];
 
 uchar ChannelFunctionRegisterdata[3] = {0xc0,0x03,0x30};  					//相位调制模式启用(连续扫描可能开启)
 uchar AmplitudeControldata[3] = {0x00,0x03,0xff};									//八级调制时启用,默认输出最大
 uchar FunctionRegister1data[3] = {0xD0,0xf2,0x00}; 

 WriteToAD9959ViaSpi(FR1,3,FunctionRegister1data,0);         	 		  //设置功能寄存器
 WriteToAD9959ViaSpi(CFR,3,ChannelFunctionRegisterdata,0);    			//设置通道功能寄存器,即相位调制启动

 WrPhaseOffsetTuningWorddata(p1,ChannelPhaseOffsetTuningWord0data); //将十进制相位数转换为2进制相位控制字
 WriteToAD9959ViaSpi(CPOW0,2,ChannelPhaseOffsetTuningWord0data,1);	//写入相位控制字

 WrPhaseOffsetTuningWorddata(p2,ChannelPhaseOffsetTuningWord1data); //将十进制相位数转换为2进制相位控制字?
 WriteToAD9959ViaSpi(0x0a,4,ChannelPhaseOffsetTuningWord1data,1);		//写入相位控制字

 WrPhaseOffsetTuningWorddata(p3,ChannelPhaseOffsetTuningWord2data); //将十进制相位数转换为2进制相位控制字
 WriteToAD9959ViaSpi(0x0b,4,ChannelPhaseOffsetTuningWord2data,1);	//写入相位控制字

 WrPhaseOffsetTuningWorddata(p4,ChannelPhaseOffsetTuningWord3data); //将十进制相位数转换为2进制相位控制字?
 WriteToAD9959ViaSpi(0x0c,4,ChannelPhaseOffsetTuningWord3data,1);		//写入相位控制字

 WrPhaseOffsetTuningWorddata(p5,ChannelPhaseOffsetTuningWord4data); //将十进制相位数转换为2进制相位控制字
 WriteToAD9959ViaSpi(0x0d,4,ChannelPhaseOffsetTuningWord4data,1);	//写入相位控制字

 WrPhaseOffsetTuningWorddata(p6,ChannelPhaseOffsetTuningWord5data); //将十进制相位数转换为2进制相位控制字?
 WriteToAD9959ViaSpi(0x0e,4,ChannelPhaseOffsetTuningWord5data,1);		//写入相位控制字

 WrPhaseOffsetTuningWorddata(p7,ChannelPhaseOffsetTuningWord6data); //将十进制相位数转换为2进制相位控制字
 WriteToAD9959ViaSpi(0x0f,4,ChannelPhaseOffsetTuningWord6data,1);	//写入相位控制字

 WrPhaseOffsetTuningWorddata(p8,ChannelPhaseOffsetTuningWord7data); //将十进制相位数转换为2进制相位控制字?
 WriteToAD9959ViaSpi(0x10,4,ChannelPhaseOffsetTuningWord7data,1);		//写入相位控制字
 f=200000;
 WrFrequencyTuningWorddata(f,ChannelFrequencyTuningWord0data);    	//将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(CFTW0,4,ChannelFrequencyTuningWord0data,1);		//写入频率控制字
}
void AD9959_SetAM83(double f)
{
// 	 u8 cn = 0;
 uchar ChannelFrequencyTuningWord0data[4];

 uchar AmplitudeControldata[3]={0x00,0x03,0xff};
 uchar ChannelAmplitudeTuningWord1data[4]={0xdf,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord2data[4]={0xbf,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord3data[4]={0x9f,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord4data[4]={0x7f,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord5data[4]={0x5f,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord6data[4]={0x3f,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord7data[4]={0x1f,0x30,0x00,0x00};
 
 uchar ChannelFunctionRegisterdata[3] = {0x40,0x03,0x30};
 uchar FunctionRegister1data[3]={0xD0,0xf2,0x00};

 WriteToAD9959ViaSpi(FR1,3,FunctionRegister1data,0);         	 	 //设置功能寄存器
 WriteToAD9959ViaSpi(CFR,3,ChannelFunctionRegisterdata,0); 			 //设置通道功能寄存器

 WriteToAD9959ViaSpi(ACR,3,AmplitudeControldata,0); 						 //设置幅度大小(S1)

 WriteToAD9959ViaSpi(0x0a,4,ChannelAmplitudeTuningWord1data,0);	 // 设置幅度大小(S2)

 WriteToAD9959ViaSpi(0x0b,4,ChannelAmplitudeTuningWord2data,0);

 WriteToAD9959ViaSpi(0x0c,4,ChannelAmplitudeTuningWord3data,0);

 WriteToAD9959ViaSpi(0x0d,4,ChannelAmplitudeTuningWord4data,0); 						 //设置幅度大小(S1)

 WriteToAD9959ViaSpi(0x0e,4,ChannelAmplitudeTuningWord5data,0);	 // 设置幅度大小(S2)

 WriteToAD9959ViaSpi(0x0f,4,ChannelAmplitudeTuningWord6data,0);

 WriteToAD9959ViaSpi(0x10,4,ChannelAmplitudeTuningWord7data,0);
 
 WrFrequencyTuningWorddata(f,ChannelFrequencyTuningWord0data);   	//写频率控制字
 WriteToAD9959ViaSpi(CFTW0,4,ChannelFrequencyTuningWord0data,1);
}


/////////////////////////////////////////////////////////////////////////
//  十六阶调制 CH0   
/////////////////////////////////////////////////////////////////////////
void AD9959_SetFremodulation160(double f1,double f2,double f3,double f4,double f5,double f6,double f7,double f8,double f9,double f10,double f11,double f12,double f13,double f14,double f15,double f16)
{
// 	 u8 a = 0;
 uchar ChannelFrequencyTuningWord0data[4];
 uchar ChannelFrequencyTuningWord1data[4];
 uchar ChannelFrequencyTuningWord2data[4];
 uchar ChannelFrequencyTuningWord3data[4];
 uchar ChannelFrequencyTuningWord4data[4];
 uchar ChannelFrequencyTuningWord5data[4];
 uchar ChannelFrequencyTuningWord6data[4];
 uchar ChannelFrequencyTuningWord7data[4];
 uchar ChannelFrequencyTuningWord8data[4];
 uchar ChannelFrequencyTuningWord9data[4];
 uchar ChannelFrequencyTuningWord10data[4];
 uchar ChannelFrequencyTuningWord11data[4];
 uchar ChannelFrequencyTuningWord12data[4];
 uchar ChannelFrequencyTuningWord13data[4];
 uchar ChannelFrequencyTuningWord14data[4];
 uchar ChannelFrequencyTuningWord15data[4];
 uchar ChannelFunctionRegisterdata[3] = {0x80,0x23,0x30};        //无RU/RD
 uchar FunctionRegister1data[3] = {0xD0,0xc3,0x00};  	 

 WriteToAD9959ViaSpi(FR1,3,FunctionRegister1data,0);         	 	 //设置功能寄存器	 
 WriteToAD9959ViaSpi(CFR,3,ChannelFunctionRegisterdata,0);       //设置通道功能寄存器

 WrFrequencyTuningWorddata(f1,ChannelFrequencyTuningWord0data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x04,4,ChannelFrequencyTuningWord0data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f2,ChannelFrequencyTuningWord1data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x0A,4,ChannelFrequencyTuningWord1data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f3,ChannelFrequencyTuningWord2data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x0B,4,ChannelFrequencyTuningWord2data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f4,ChannelFrequencyTuningWord3data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x0C,4,ChannelFrequencyTuningWord3data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f5,ChannelFrequencyTuningWord4data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x0D,4,ChannelFrequencyTuningWord4data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f6,ChannelFrequencyTuningWord5data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x0E,4,ChannelFrequencyTuningWord5data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f7,ChannelFrequencyTuningWord6data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x0F,4,ChannelFrequencyTuningWord6data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f8,ChannelFrequencyTuningWord7data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x10,4,ChannelFrequencyTuningWord7data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f9,ChannelFrequencyTuningWord8data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x11,4,ChannelFrequencyTuningWord8data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f10,ChannelFrequencyTuningWord9data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x12,4,ChannelFrequencyTuningWord9data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f11,ChannelFrequencyTuningWord10data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x13,4,ChannelFrequencyTuningWord10data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f12,ChannelFrequencyTuningWord11data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x14,4,ChannelFrequencyTuningWord11data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f13,ChannelFrequencyTuningWord12data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x15,4,ChannelFrequencyTuningWord12data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f14,ChannelFrequencyTuningWord13data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x16,4,ChannelFrequencyTuningWord13data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f15,ChannelFrequencyTuningWord14data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x017,4,ChannelFrequencyTuningWord14data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f16,ChannelFrequencyTuningWord15data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x18,4,ChannelFrequencyTuningWord15data,1);  //写入频率控制字
}
void AD9959_SetPhamodulation160(double f,int p1,int p2,int p3,int p4,int p5,int p6,int p7,int p8,int p9,int p10,int p11,int p12,int p13,int p14,int p15,int p16)
{
// 	 u8 b = 0;
 uchar ChannelFrequencyTuningWord0data[4];
 uchar ChannelPhaseOffsetTuningWord0data[4];
 uchar ChannelPhaseOffsetTuningWord1data[4];
 uchar ChannelPhaseOffsetTuningWord2data[4];
 uchar ChannelPhaseOffsetTuningWord3data[4];
 uchar ChannelPhaseOffsetTuningWord4data[4];
 uchar ChannelPhaseOffsetTuningWord5data[4];
 uchar ChannelPhaseOffsetTuningWord6data[4];
 uchar ChannelPhaseOffsetTuningWord7data[4];
 uchar ChannelPhaseOffsetTuningWord8data[4];
 uchar ChannelPhaseOffsetTuningWord9data[4];
 uchar ChannelPhaseOffsetTuningWord10data[4];
 uchar ChannelPhaseOffsetTuningWord11data[4];
 uchar ChannelPhaseOffsetTuningWord12data[4];
 uchar ChannelPhaseOffsetTuningWord13data[4];
 uchar ChannelPhaseOffsetTuningWord14data[4];
 uchar ChannelPhaseOffsetTuningWord15data[4];
 
 uchar ChannelFunctionRegisterdata[3] = {0xc0,0x03,0x30};  					//相位调制模式启用(连续扫描可能开启)
 uchar AmplitudeControldata[3] = {0x00,0x03,0xff};									//十六级调制时启用,默认输出最大
 uchar FunctionRegister1data[3] = {0xD0,0xc3,0x00}; 

 WriteToAD9959ViaSpi(FR1,3,FunctionRegister1data,0);         	 		  //设置功能寄存器
 WriteToAD9959ViaSpi(CFR,3,ChannelFunctionRegisterdata,0);    			//设置通道功能寄存器,即相位调制启动

 WrPhaseOffsetTuningWorddata(p1,ChannelPhaseOffsetTuningWord0data); //将十进制相位数转换为2进制相位控制字
 WriteToAD9959ViaSpi(CPOW0,2,ChannelPhaseOffsetTuningWord0data,1);	//写入相位控制字

 WrPhaseOffsetTuningWorddata(p2,ChannelPhaseOffsetTuningWord1data); //将十进制相位数转换为2进制相位控制字?
 WriteToAD9959ViaSpi(0x0a,4,ChannelPhaseOffsetTuningWord1data,1);		//写入相位控制字

 WrPhaseOffsetTuningWorddata(p3,ChannelPhaseOffsetTuningWord2data); //将十进制相位数转换为2进制相位控制字
 WriteToAD9959ViaSpi(0x0b,4,ChannelPhaseOffsetTuningWord2data,1);	//写入相位控制字

 WrPhaseOffsetTuningWorddata(p4,ChannelPhaseOffsetTuningWord3data); //将十进制相位数转换为2进制相位控制字?
 WriteToAD9959ViaSpi(0x0c,4,ChannelPhaseOffsetTuningWord3data,1);		//写入相位控制字

 WrPhaseOffsetTuningWorddata(p5,ChannelPhaseOffsetTuningWord4data); //将十进制相位数转换为2进制相位控制字
 WriteToAD9959ViaSpi(0x0d,4,ChannelPhaseOffsetTuningWord4data,1);	//写入相位控制字

 WrPhaseOffsetTuningWorddata(p6,ChannelPhaseOffsetTuningWord5data); //将十进制相位数转换为2进制相位控制字?
 WriteToAD9959ViaSpi(0x0e,4,ChannelPhaseOffsetTuningWord5data,1);		//写入相位控制字

 WrPhaseOffsetTuningWorddata(p7,ChannelPhaseOffsetTuningWord6data); //将十进制相位数转换为2进制相位控制字
 WriteToAD9959ViaSpi(0x0f,4,ChannelPhaseOffsetTuningWord6data,1);	//写入相位控制字

 WrPhaseOffsetTuningWorddata(p8,ChannelPhaseOffsetTuningWord7data); //将十进制相位数转换为2进制相位控制字?
 WriteToAD9959ViaSpi(0x10,4,ChannelPhaseOffsetTuningWord7data,1);		//写入相位控制字

 WrPhaseOffsetTuningWorddata(p9,ChannelPhaseOffsetTuningWord8data); //将十进制相位数转换为2进制相位控制字
 WriteToAD9959ViaSpi(0x11,4,ChannelPhaseOffsetTuningWord8data,1);	//写入相位控制字

 WrPhaseOffsetTuningWorddata(p10,ChannelPhaseOffsetTuningWord9data); //将十进制相位数转换为2进制相位控制字?
 WriteToAD9959ViaSpi(0x12,4,ChannelPhaseOffsetTuningWord9data,1);		//写入相位控制字

 WrPhaseOffsetTuningWorddata(p11,ChannelPhaseOffsetTuningWord10data); //将十进制相位数转换为2进制相位控制字
 WriteToAD9959ViaSpi(0x13,4,ChannelPhaseOffsetTuningWord10data,1);	//写入相位控制字

 WrPhaseOffsetTuningWorddata(p12,ChannelPhaseOffsetTuningWord11data); //将十进制相位数转换为2进制相位控制字?
 WriteToAD9959ViaSpi(0x14,4,ChannelPhaseOffsetTuningWord11data,1);		//写入相位控制字

 WrPhaseOffsetTuningWorddata(p13,ChannelPhaseOffsetTuningWord12data); //将十进制相位数转换为2进制相位控制字
 WriteToAD9959ViaSpi(0x15,4,ChannelPhaseOffsetTuningWord12data,1);	//写入相位控制字

 WrPhaseOffsetTuningWorddata(p14,ChannelPhaseOffsetTuningWord13data); //将十进制相位数转换为2进制相位控制字?
 WriteToAD9959ViaSpi(0x16,4,ChannelPhaseOffsetTuningWord13data,1);		//写入相位控制字

 WrPhaseOffsetTuningWorddata(p15,ChannelPhaseOffsetTuningWord14data); //将十进制相位数转换为2进制相位控制字
 WriteToAD9959ViaSpi(0x17,4,ChannelPhaseOffsetTuningWord14data,1);	//写入相位控制字

 WrPhaseOffsetTuningWorddata(p16,ChannelPhaseOffsetTuningWord15data); //将十进制相位数转换为2进制相位控制字
 WriteToAD9959ViaSpi(0x18,4,ChannelPhaseOffsetTuningWord15data,1);		//写入相位控制字
 
 f=200000;
 WrFrequencyTuningWorddata(f,ChannelFrequencyTuningWord0data);    	//将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(CFTW0,4,ChannelFrequencyTuningWord0data,1);		//写入频率控制字
}
void AD9959_SetAM160(double f)
{
// 	 u8 cn = 0;
 uchar ChannelFrequencyTuningWord0data[4];

 uchar AmplitudeControldata[3]={0x00,0x03,0xff};
 uchar ChannelAmplitudeTuningWord1data[4]={0xef,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord2data[4]={0xdf,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord3data[4]={0xcf,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord4data[4]={0xbf,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord5data[4]={0xaf,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord6data[4]={0x9f,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord7data[4]={0x8f,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord8data[4]={0x7f,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord9data[4]={0x6f,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord10data[4]={0x5f,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord11data[4]={0x4f,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord12data[4]={0x3f,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord13data[4]={0x2f,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord14data[4]={0x1f,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord15data[4]={0x0f,0x30,0x00,0x00};
 uchar ChannelFunctionRegisterdata[3] = {0x40,0x03,0x30};
 uchar FunctionRegister1data[3]={0xD0,0xc3,0x00};

 WriteToAD9959ViaSpi(FR1,3,FunctionRegister1data,0);         	 	 //设置功能寄存器
 WriteToAD9959ViaSpi(CFR,3,ChannelFunctionRegisterdata,0); 			 //设置通道功能寄存器

 WriteToAD9959ViaSpi(ACR,3,AmplitudeControldata,0); 						 //设置幅度大小(S1)

 WriteToAD9959ViaSpi(0x0a,4,ChannelAmplitudeTuningWord1data,0);	 // 设置幅度大小(S2)

 WriteToAD9959ViaSpi(0x0b,4,ChannelAmplitudeTuningWord2data,0);

 WriteToAD9959ViaSpi(0x0c,4,ChannelAmplitudeTuningWord3data,0);

 WriteToAD9959ViaSpi(0x0d,4,ChannelAmplitudeTuningWord4data,0); 						 //设置幅度大小(S1)

 WriteToAD9959ViaSpi(0x0e,4,ChannelAmplitudeTuningWord5data,0);	 // 设置幅度大小(S2)

 WriteToAD9959ViaSpi(0x0f,4,ChannelAmplitudeTuningWord6data,0);

 WriteToAD9959ViaSpi(0x10,4,ChannelAmplitudeTuningWord7data,0);

 WriteToAD9959ViaSpi(0x11,4,ChannelAmplitudeTuningWord8data,0); 						 //设置幅度大小(S1)

 WriteToAD9959ViaSpi(0x12,4,ChannelAmplitudeTuningWord9data,0);	 // 设置幅度大小(S2)

 WriteToAD9959ViaSpi(0x13,4,ChannelAmplitudeTuningWord10data,0);

 WriteToAD9959ViaSpi(0x14,4,ChannelAmplitudeTuningWord11data,0);

 WriteToAD9959ViaSpi(0x15,4,ChannelAmplitudeTuningWord12data,0); 						 //设置幅度大小(S1)

 WriteToAD9959ViaSpi(0x16,4,ChannelAmplitudeTuningWord13data,0);	 // 设置幅度大小(S2)

 WriteToAD9959ViaSpi(0x17,4,ChannelAmplitudeTuningWord14data,0);

 WriteToAD9959ViaSpi(0x18,4,ChannelAmplitudeTuningWord15data,0);
 
 WrFrequencyTuningWorddata(f,ChannelFrequencyTuningWord0data);   	//写频率控制字
 WriteToAD9959ViaSpi(CFTW0,4,ChannelFrequencyTuningWord0data,1);
}
/////////////////////////////////////////////////////////////////////////
//  十六阶调制 CH1  
/////////////////////////////////////////////////////////////////////////
void AD9959_SetFremodulation161(double f1,double f2,double f3,double f4,double f5,double f6,double f7,double f8,double f9,double f10,double f11,double f12,double f13,double f14,double f15,double f16)
{
// 	 u8 a = 0;
 uchar ChannelFrequencyTuningWord0data[4];
 uchar ChannelFrequencyTuningWord1data[4];
 uchar ChannelFrequencyTuningWord2data[4];
 uchar ChannelFrequencyTuningWord3data[4];
 uchar ChannelFrequencyTuningWord4data[4];
 uchar ChannelFrequencyTuningWord5data[4];
 uchar ChannelFrequencyTuningWord6data[4];
 uchar ChannelFrequencyTuningWord7data[4];
 uchar ChannelFrequencyTuningWord8data[4];
 uchar ChannelFrequencyTuningWord9data[4];
 uchar ChannelFrequencyTuningWord10data[4];
 uchar ChannelFrequencyTuningWord11data[4];
 uchar ChannelFrequencyTuningWord12data[4];
 uchar ChannelFrequencyTuningWord13data[4];
 uchar ChannelFrequencyTuningWord14data[4];
 uchar ChannelFrequencyTuningWord15data[4];
 uchar ChannelFunctionRegisterdata[3] = {0x80,0x23,0x30};        //无RU/RD
 uchar FunctionRegister1data[3] = {0xD0,0xd3,0x00};  	 

 WriteToAD9959ViaSpi(FR1,3,FunctionRegister1data,0);         	 	 //设置功能寄存器	 
 WriteToAD9959ViaSpi(CFR,3,ChannelFunctionRegisterdata,0);       //设置通道功能寄存器

 WrFrequencyTuningWorddata(f1,ChannelFrequencyTuningWord0data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x04,4,ChannelFrequencyTuningWord0data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f2,ChannelFrequencyTuningWord1data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x0A,4,ChannelFrequencyTuningWord1data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f3,ChannelFrequencyTuningWord2data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x0B,4,ChannelFrequencyTuningWord2data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f4,ChannelFrequencyTuningWord3data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x0C,4,ChannelFrequencyTuningWord3data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f5,ChannelFrequencyTuningWord4data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x0D,4,ChannelFrequencyTuningWord4data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f6,ChannelFrequencyTuningWord5data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x0E,4,ChannelFrequencyTuningWord5data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f7,ChannelFrequencyTuningWord6data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x0F,4,ChannelFrequencyTuningWord6data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f8,ChannelFrequencyTuningWord7data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x10,4,ChannelFrequencyTuningWord7data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f9,ChannelFrequencyTuningWord8data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x11,4,ChannelFrequencyTuningWord8data,0);  //写入频率控制字
 
 WrFrequencyTuningWorddata(f10,ChannelFrequencyTuningWord9data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x12,4,ChannelFrequencyTuningWord9data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f11,ChannelFrequencyTuningWord10data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x13,4,ChannelFrequencyTuningWord10data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f12,ChannelFrequencyTuningWord11data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x14,4,ChannelFrequencyTuningWord11data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f13,ChannelFrequencyTuningWord12data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x15,4,ChannelFrequencyTuningWord12data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f14,ChannelFrequencyTuningWord13data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x16,4,ChannelFrequencyTuningWord13data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f15,ChannelFrequencyTuningWord14data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x017,4,ChannelFrequencyTuningWord14data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f16,ChannelFrequencyTuningWord15data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x18,4,ChannelFrequencyTuningWord15data,1);  //写入频率控制字
}
void AD9959_SetPhamodulation161(double f,int p1,int p2,int p3,int p4,int p5,int p6,int p7,int p8,int p9,int p10,int p11,int p12,int p13,int p14,int p15,int p16)
{
// 	 u8 b = 0;
 uchar ChannelFrequencyTuningWord0data[4];
 uchar ChannelPhaseOffsetTuningWord0data[4];
 uchar ChannelPhaseOffsetTuningWord1data[4];
 uchar ChannelPhaseOffsetTuningWord2data[4];
 uchar ChannelPhaseOffsetTuningWord3data[4];
 uchar ChannelPhaseOffsetTuningWord4data[4];
 uchar ChannelPhaseOffsetTuningWord5data[4];
 uchar ChannelPhaseOffsetTuningWord6data[4];
 uchar ChannelPhaseOffsetTuningWord7data[4];
 uchar ChannelPhaseOffsetTuningWord8data[4];
 uchar ChannelPhaseOffsetTuningWord9data[4];
 uchar ChannelPhaseOffsetTuningWord10data[4];
 uchar ChannelPhaseOffsetTuningWord11data[4];
 uchar ChannelPhaseOffsetTuningWord12data[4];
 uchar ChannelPhaseOffsetTuningWord13data[4];
 uchar ChannelPhaseOffsetTuningWord14data[4];
 uchar ChannelPhaseOffsetTuningWord15data[4];
 
 uchar ChannelFunctionRegisterdata[3] = {0xc0,0x03,0x30};  					//相位调制模式启用(连续扫描可能开启)
 uchar AmplitudeControldata[3] = {0x00,0x03,0xff};									//十六级调制时启用,默认输出最大
 uchar FunctionRegister1data[3] = {0xD0,0xd3,0x00}; 

 WriteToAD9959ViaSpi(FR1,3,FunctionRegister1data,0);         	 		  //设置功能寄存器
 WriteToAD9959ViaSpi(CFR,3,ChannelFunctionRegisterdata,0);    			//设置通道功能寄存器,即相位调制启动

 WrPhaseOffsetTuningWorddata(p1,ChannelPhaseOffsetTuningWord0data); //将十进制相位数转换为2进制相位控制字
 WriteToAD9959ViaSpi(CPOW0,2,ChannelPhaseOffsetTuningWord0data,1);	//写入相位控制字

 WrPhaseOffsetTuningWorddata(p2,ChannelPhaseOffsetTuningWord1data); //将十进制相位数转换为2进制相位控制字?
 WriteToAD9959ViaSpi(0x0a,4,ChannelPhaseOffsetTuningWord1data,1);		//写入相位控制字

 WrPhaseOffsetTuningWorddata(p3,ChannelPhaseOffsetTuningWord2data); //将十进制相位数转换为2进制相位控制字
 WriteToAD9959ViaSpi(0x0b,4,ChannelPhaseOffsetTuningWord2data,1);	//写入相位控制字

 WrPhaseOffsetTuningWorddata(p4,ChannelPhaseOffsetTuningWord3data); //将十进制相位数转换为2进制相位控制字?
 WriteToAD9959ViaSpi(0x0c,4,ChannelPhaseOffsetTuningWord3data,1);		//写入相位控制字

 WrPhaseOffsetTuningWorddata(p5,ChannelPhaseOffsetTuningWord4data); //将十进制相位数转换为2进制相位控制字
 WriteToAD9959ViaSpi(0x0d,4,ChannelPhaseOffsetTuningWord4data,1);	//写入相位控制字

 WrPhaseOffsetTuningWorddata(p6,ChannelPhaseOffsetTuningWord5data); //将十进制相位数转换为2进制相位控制字?
 WriteToAD9959ViaSpi(0x0e,4,ChannelPhaseOffsetTuningWord5data,1);		//写入相位控制字

 WrPhaseOffsetTuningWorddata(p7,ChannelPhaseOffsetTuningWord6data); //将十进制相位数转换为2进制相位控制字
 WriteToAD9959ViaSpi(0x0f,4,ChannelPhaseOffsetTuningWord6data,1);	//写入相位控制字

 WrPhaseOffsetTuningWorddata(p8,ChannelPhaseOffsetTuningWord7data); //将十进制相位数转换为2进制相位控制字?
 WriteToAD9959ViaSpi(0x10,4,ChannelPhaseOffsetTuningWord7data,1);		//写入相位控制字

 WrPhaseOffsetTuningWorddata(p9,ChannelPhaseOffsetTuningWord8data); //将十进制相位数转换为2进制相位控制字
 WriteToAD9959ViaSpi(0x11,4,ChannelPhaseOffsetTuningWord8data,1);	//写入相位控制字

 WrPhaseOffsetTuningWorddata(p10,ChannelPhaseOffsetTuningWord9data); //将十进制相位数转换为2进制相位控制字?
 WriteToAD9959ViaSpi(0x12,4,ChannelPhaseOffsetTuningWord9data,1);		//写入相位控制字

 WrPhaseOffsetTuningWorddata(p11,ChannelPhaseOffsetTuningWord10data); //将十进制相位数转换为2进制相位控制字
 WriteToAD9959ViaSpi(0x13,4,ChannelPhaseOffsetTuningWord10data,1);	//写入相位控制字

 WrPhaseOffsetTuningWorddata(p12,ChannelPhaseOffsetTuningWord11data); //将十进制相位数转换为2进制相位控制字?
 WriteToAD9959ViaSpi(0x14,4,ChannelPhaseOffsetTuningWord11data,1);		//写入相位控制字

 WrPhaseOffsetTuningWorddata(p13,ChannelPhaseOffsetTuningWord12data); //将十进制相位数转换为2进制相位控制字
 WriteToAD9959ViaSpi(0x15,4,ChannelPhaseOffsetTuningWord12data,1);	//写入相位控制字

 WrPhaseOffsetTuningWorddata(p14,ChannelPhaseOffsetTuningWord13data); //将十进制相位数转换为2进制相位控制字?
 WriteToAD9959ViaSpi(0x16,4,ChannelPhaseOffsetTuningWord13data,1);		//写入相位控制字

 WrPhaseOffsetTuningWorddata(p15,ChannelPhaseOffsetTuningWord14data); //将十进制相位数转换为2进制相位控制字
 WriteToAD9959ViaSpi(0x17,4,ChannelPhaseOffsetTuningWord14data,1);	//写入相位控制字

 WrPhaseOffsetTuningWorddata(p16,ChannelPhaseOffsetTuningWord15data); //将十进制相位数转换为2进制相位控制字
 WriteToAD9959ViaSpi(0x18,4,ChannelPhaseOffsetTuningWord15data,1);		//写入相位控制字
 
 f=200000;
 WrFrequencyTuningWorddata(f,ChannelFrequencyTuningWord0data);    	//将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(CFTW0,4,ChannelFrequencyTuningWord0data,1);		//写入频率控制字
}
void AD9959_SetAM161(double f)
{
// 	 u8 cn = 0;
 uchar ChannelFrequencyTuningWord0data[4];

 uchar AmplitudeControldata[3]={0x00,0x03,0xff};
 uchar ChannelAmplitudeTuningWord1data[4]={0xef,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord2data[4]={0xdf,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord3data[4]={0xcf,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord4data[4]={0xbf,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord5data[4]={0xaf,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord6data[4]={0x9f,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord7data[4]={0x8f,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord8data[4]={0x7f,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord9data[4]={0x6f,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord10data[4]={0x5f,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord11data[4]={0x4f,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord12data[4]={0x3f,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord13data[4]={0x2f,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord14data[4]={0x1f,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord15data[4]={0x0f,0x30,0x00,0x00};
 uchar ChannelFunctionRegisterdata[3] = {0x40,0x03,0x30};
 uchar FunctionRegister1data[3]={0xD0,0xd3,0x00};

 WriteToAD9959ViaSpi(FR1,3,FunctionRegister1data,0);         	 	 //设置功能寄存器
 WriteToAD9959ViaSpi(CFR,3,ChannelFunctionRegisterdata,0); 			 //设置通道功能寄存器

 WriteToAD9959ViaSpi(ACR,3,AmplitudeControldata,0); 						 //设置幅度大小(S1)

 WriteToAD9959ViaSpi(0x0a,4,ChannelAmplitudeTuningWord1data,0);	 // 设置幅度大小(S2)

 WriteToAD9959ViaSpi(0x0b,4,ChannelAmplitudeTuningWord2data,0);

 WriteToAD9959ViaSpi(0x0c,4,ChannelAmplitudeTuningWord3data,0);

 WriteToAD9959ViaSpi(0x0d,4,ChannelAmplitudeTuningWord4data,0); 						 //设置幅度大小(S1)

 WriteToAD9959ViaSpi(0x0e,4,ChannelAmplitudeTuningWord5data,0);	 // 设置幅度大小(S2)

 WriteToAD9959ViaSpi(0x0f,4,ChannelAmplitudeTuningWord6data,0);

 WriteToAD9959ViaSpi(0x10,4,ChannelAmplitudeTuningWord7data,0);

 WriteToAD9959ViaSpi(0x11,4,ChannelAmplitudeTuningWord8data,0); 						 //设置幅度大小(S1)

 WriteToAD9959ViaSpi(0x12,4,ChannelAmplitudeTuningWord9data,0);	 // 设置幅度大小(S2)

 WriteToAD9959ViaSpi(0x13,4,ChannelAmplitudeTuningWord10data,0);

 WriteToAD9959ViaSpi(0x14,4,ChannelAmplitudeTuningWord11data,0);

 WriteToAD9959ViaSpi(0x15,4,ChannelAmplitudeTuningWord12data,0); 						 //设置幅度大小(S1)

 WriteToAD9959ViaSpi(0x16,4,ChannelAmplitudeTuningWord13data,0);	 // 设置幅度大小(S2)

 WriteToAD9959ViaSpi(0x17,4,ChannelAmplitudeTuningWord14data,0);

 WriteToAD9959ViaSpi(0x18,4,ChannelAmplitudeTuningWord15data,0);
 
 WrFrequencyTuningWorddata(f,ChannelFrequencyTuningWord0data);   	//写频率控制字
 WriteToAD9959ViaSpi(CFTW0,4,ChannelFrequencyTuningWord0data,1);
}

/////////////////////////////////////////////////////////////////////////
//  十六阶调制 CH2 
/////////////////////////////////////////////////////////////////////////
void AD9959_SetFremodulation162(double f1,double f2,double f3,double f4,double f5,double f6,double f7,double f8,double f9,double f10,double f11,double f12,double f13,double f14,double f15,double f16)
{
// 	 u8 a = 0;
 uchar ChannelFrequencyTuningWord0data[4];
 uchar ChannelFrequencyTuningWord1data[4];
 uchar ChannelFrequencyTuningWord2data[4];
 uchar ChannelFrequencyTuningWord3data[4];
 uchar ChannelFrequencyTuningWord4data[4];
 uchar ChannelFrequencyTuningWord5data[4];
 uchar ChannelFrequencyTuningWord6data[4];
 uchar ChannelFrequencyTuningWord7data[4];
 uchar ChannelFrequencyTuningWord8data[4];
 uchar ChannelFrequencyTuningWord9data[4];
 uchar ChannelFrequencyTuningWord10data[4];
 uchar ChannelFrequencyTuningWord11data[4];
 uchar ChannelFrequencyTuningWord12data[4];
 uchar ChannelFrequencyTuningWord13data[4];
 uchar ChannelFrequencyTuningWord14data[4];
 uchar ChannelFrequencyTuningWord15data[4];
 uchar ChannelFunctionRegisterdata[3] = {0x80,0x23,0x30};        //无RU/RD
 uchar FunctionRegister1data[3] = {0xD0,0xe3,0x00};  	 

 WriteToAD9959ViaSpi(FR1,3,FunctionRegister1data,0);         	 	 //设置功能寄存器	 
 WriteToAD9959ViaSpi(CFR,3,ChannelFunctionRegisterdata,0);       //设置通道功能寄存器

 WrFrequencyTuningWorddata(f1,ChannelFrequencyTuningWord0data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x04,4,ChannelFrequencyTuningWord0data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f2,ChannelFrequencyTuningWord1data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x0A,4,ChannelFrequencyTuningWord1data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f3,ChannelFrequencyTuningWord2data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x0B,4,ChannelFrequencyTuningWord2data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f4,ChannelFrequencyTuningWord3data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x0C,4,ChannelFrequencyTuningWord3data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f5,ChannelFrequencyTuningWord4data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x0D,4,ChannelFrequencyTuningWord4data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f6,ChannelFrequencyTuningWord5data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x0E,4,ChannelFrequencyTuningWord5data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f7,ChannelFrequencyTuningWord6data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x0F,4,ChannelFrequencyTuningWord6data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f8,ChannelFrequencyTuningWord7data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x10,4,ChannelFrequencyTuningWord7data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f9,ChannelFrequencyTuningWord8data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x11,4,ChannelFrequencyTuningWord8data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f10,ChannelFrequencyTuningWord9data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x12,4,ChannelFrequencyTuningWord9data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f11,ChannelFrequencyTuningWord10data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x13,4,ChannelFrequencyTuningWord10data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f12,ChannelFrequencyTuningWord11data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x14,4,ChannelFrequencyTuningWord11data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f13,ChannelFrequencyTuningWord12data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x15,4,ChannelFrequencyTuningWord12data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f14,ChannelFrequencyTuningWord13data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x16,4,ChannelFrequencyTuningWord13data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f15,ChannelFrequencyTuningWord14data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x017,4,ChannelFrequencyTuningWord14data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f16,ChannelFrequencyTuningWord15data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x18,4,ChannelFrequencyTuningWord15data,1);  //写入频率控制字
}
void AD9959_SetPhamodulation162(double f,int p1,int p2,int p3,int p4,int p5,int p6,int p7,int p8,int p9,int p10,int p11,int p12,int p13,int p14,int p15,int p16)
{
// 	 u8 b = 0;
 uchar ChannelFrequencyTuningWord0data[4];
 uchar ChannelPhaseOffsetTuningWord0data[4];
 uchar ChannelPhaseOffsetTuningWord1data[4];
 uchar ChannelPhaseOffsetTuningWord2data[4];
 uchar ChannelPhaseOffsetTuningWord3data[4];
 uchar ChannelPhaseOffsetTuningWord4data[4];
 uchar ChannelPhaseOffsetTuningWord5data[4];
 uchar ChannelPhaseOffsetTuningWord6data[4];
 uchar ChannelPhaseOffsetTuningWord7data[4];
 uchar ChannelPhaseOffsetTuningWord8data[4];
 uchar ChannelPhaseOffsetTuningWord9data[4];
 uchar ChannelPhaseOffsetTuningWord10data[4];
 uchar ChannelPhaseOffsetTuningWord11data[4];
 uchar ChannelPhaseOffsetTuningWord12data[4];
 uchar ChannelPhaseOffsetTuningWord13data[4];
 uchar ChannelPhaseOffsetTuningWord14data[4];
 uchar ChannelPhaseOffsetTuningWord15data[4];
 
 uchar ChannelFunctionRegisterdata[3] = {0xc0,0x03,0x30};  					//相位调制模式启用(连续扫描可能开启)
 uchar AmplitudeControldata[3] = {0x00,0x03,0xff};									//十六级调制时启用,默认输出最大
 uchar FunctionRegister1data[3] = {0xD0,0xe3,0x00}; 

 WriteToAD9959ViaSpi(FR1,3,FunctionRegister1data,0);         	 		  //设置功能寄存器
 WriteToAD9959ViaSpi(CFR,3,ChannelFunctionRegisterdata,0);    			//设置通道功能寄存器,即相位调制启动

 WrPhaseOffsetTuningWorddata(p1,ChannelPhaseOffsetTuningWord0data); //将十进制相位数转换为2进制相位控制字
 WriteToAD9959ViaSpi(CPOW0,2,ChannelPhaseOffsetTuningWord0data,1);	//写入相位控制字

 WrPhaseOffsetTuningWorddata(p2,ChannelPhaseOffsetTuningWord1data); //将十进制相位数转换为2进制相位控制字?
 WriteToAD9959ViaSpi(0x0a,4,ChannelPhaseOffsetTuningWord1data,1);		//写入相位控制字

 WrPhaseOffsetTuningWorddata(p3,ChannelPhaseOffsetTuningWord2data); //将十进制相位数转换为2进制相位控制字
 WriteToAD9959ViaSpi(0x0b,4,ChannelPhaseOffsetTuningWord2data,1);	//写入相位控制字

 WrPhaseOffsetTuningWorddata(p4,ChannelPhaseOffsetTuningWord3data); //将十进制相位数转换为2进制相位控制字?
 WriteToAD9959ViaSpi(0x0c,4,ChannelPhaseOffsetTuningWord3data,1);		//写入相位控制字

 WrPhaseOffsetTuningWorddata(p5,ChannelPhaseOffsetTuningWord4data); //将十进制相位数转换为2进制相位控制字
 WriteToAD9959ViaSpi(0x0d,4,ChannelPhaseOffsetTuningWord4data,1);	//写入相位控制字

 WrPhaseOffsetTuningWorddata(p6,ChannelPhaseOffsetTuningWord5data); //将十进制相位数转换为2进制相位控制字?
 WriteToAD9959ViaSpi(0x0e,4,ChannelPhaseOffsetTuningWord5data,1);		//写入相位控制字

 WrPhaseOffsetTuningWorddata(p7,ChannelPhaseOffsetTuningWord6data); //将十进制相位数转换为2进制相位控制字
 WriteToAD9959ViaSpi(0x0f,4,ChannelPhaseOffsetTuningWord6data,1);	//写入相位控制字

 WrPhaseOffsetTuningWorddata(p8,ChannelPhaseOffsetTuningWord7data); //将十进制相位数转换为2进制相位控制字?
 WriteToAD9959ViaSpi(0x10,4,ChannelPhaseOffsetTuningWord7data,1);		//写入相位控制字

 WrPhaseOffsetTuningWorddata(p9,ChannelPhaseOffsetTuningWord8data); //将十进制相位数转换为2进制相位控制字
 WriteToAD9959ViaSpi(0x11,4,ChannelPhaseOffsetTuningWord8data,1);	//写入相位控制字

 WrPhaseOffsetTuningWorddata(p10,ChannelPhaseOffsetTuningWord9data); //将十进制相位数转换为2进制相位控制字?
 WriteToAD9959ViaSpi(0x12,4,ChannelPhaseOffsetTuningWord9data,1);		//写入相位控制字

 WrPhaseOffsetTuningWorddata(p11,ChannelPhaseOffsetTuningWord10data); //将十进制相位数转换为2进制相位控制字
 WriteToAD9959ViaSpi(0x13,4,ChannelPhaseOffsetTuningWord10data,1);	//写入相位控制字

 WrPhaseOffsetTuningWorddata(p12,ChannelPhaseOffsetTuningWord11data); //将十进制相位数转换为2进制相位控制字?
 WriteToAD9959ViaSpi(0x14,4,ChannelPhaseOffsetTuningWord11data,1);		//写入相位控制字

 WrPhaseOffsetTuningWorddata(p13,ChannelPhaseOffsetTuningWord12data); //将十进制相位数转换为2进制相位控制字
 WriteToAD9959ViaSpi(0x15,4,ChannelPhaseOffsetTuningWord12data,1);	//写入相位控制字

 WrPhaseOffsetTuningWorddata(p14,ChannelPhaseOffsetTuningWord13data); //将十进制相位数转换为2进制相位控制字?
 WriteToAD9959ViaSpi(0x16,4,ChannelPhaseOffsetTuningWord13data,1);		//写入相位控制字

 WrPhaseOffsetTuningWorddata(p15,ChannelPhaseOffsetTuningWord14data); //将十进制相位数转换为2进制相位控制字
 WriteToAD9959ViaSpi(0x17,4,ChannelPhaseOffsetTuningWord14data,1);	//写入相位控制字

 WrPhaseOffsetTuningWorddata(p16,ChannelPhaseOffsetTuningWord15data); //将十进制相位数转换为2进制相位控制字
 WriteToAD9959ViaSpi(0x18,4,ChannelPhaseOffsetTuningWord15data,1);		//写入相位控制字
 
 f=200000;
 WrFrequencyTuningWorddata(f,ChannelFrequencyTuningWord0data);    	//将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(CFTW0,4,ChannelFrequencyTuningWord0data,1);		//写入频率控制字
}
void AD9959_SetAM162(double f)
{
// 	 u8 cn = 0;
 uchar ChannelFrequencyTuningWord0data[4];

 uchar AmplitudeControldata[3]={0x00,0x03,0xff};
 uchar ChannelAmplitudeTuningWord1data[4]={0xef,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord2data[4]={0xdf,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord3data[4]={0xcf,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord4data[4]={0xbf,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord5data[4]={0xaf,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord6data[4]={0x9f,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord7data[4]={0x8f,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord8data[4]={0x7f,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord9data[4]={0x6f,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord10data[4]={0x5f,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord11data[4]={0x4f,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord12data[4]={0x3f,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord13data[4]={0x2f,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord14data[4]={0x1f,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord15data[4]={0x0f,0x30,0x00,0x00};
 uchar ChannelFunctionRegisterdata[3] = {0x40,0x03,0x30};
 uchar FunctionRegister1data[3]={0xD0,0xe3,0x00};

 WriteToAD9959ViaSpi(FR1,3,FunctionRegister1data,0);         	 	 //设置功能寄存器
 WriteToAD9959ViaSpi(CFR,3,ChannelFunctionRegisterdata,0); 			 //设置通道功能寄存器

 WriteToAD9959ViaSpi(ACR,3,AmplitudeControldata,0); 						 //设置幅度大小(S1)

 WriteToAD9959ViaSpi(0x0a,4,ChannelAmplitudeTuningWord1data,0);	 // 设置幅度大小(S2)

 WriteToAD9959ViaSpi(0x0b,4,ChannelAmplitudeTuningWord2data,0);

 WriteToAD9959ViaSpi(0x0c,4,ChannelAmplitudeTuningWord3data,0);

 WriteToAD9959ViaSpi(0x0d,4,ChannelAmplitudeTuningWord4data,0); 						 //设置幅度大小(S1)

 WriteToAD9959ViaSpi(0x0e,4,ChannelAmplitudeTuningWord5data,0);	 // 设置幅度大小(S2)

 WriteToAD9959ViaSpi(0x0f,4,ChannelAmplitudeTuningWord6data,0);

 WriteToAD9959ViaSpi(0x10,4,ChannelAmplitudeTuningWord7data,0);

 WriteToAD9959ViaSpi(0x11,4,ChannelAmplitudeTuningWord8data,0); 						 //设置幅度大小(S1)

 WriteToAD9959ViaSpi(0x12,4,ChannelAmplitudeTuningWord9data,0);	 // 设置幅度大小(S2)

 WriteToAD9959ViaSpi(0x13,4,ChannelAmplitudeTuningWord10data,0);

 WriteToAD9959ViaSpi(0x14,4,ChannelAmplitudeTuningWord11data,0);

 WriteToAD9959ViaSpi(0x15,4,ChannelAmplitudeTuningWord12data,0); 						 //设置幅度大小(S1)

 WriteToAD9959ViaSpi(0x16,4,ChannelAmplitudeTuningWord13data,0);	 // 设置幅度大小(S2)

 WriteToAD9959ViaSpi(0x17,4,ChannelAmplitudeTuningWord14data,0);

 WriteToAD9959ViaSpi(0x18,4,ChannelAmplitudeTuningWord15data,0);
 
 WrFrequencyTuningWorddata(f,ChannelFrequencyTuningWord0data);   	//写频率控制字
 WriteToAD9959ViaSpi(CFTW0,4,ChannelFrequencyTuningWord0data,1);
}




/////////////////////////////////////////////////////////////////////////
//  十六阶调制 CH3   
/////////////////////////////////////////////////////////////////////////

void AD9959_SetFremodulation163(double f1,double f2,double f3,double f4,double f5,double f6,double f7,double f8,double f9,double f10,double f11,double f12,double f13,double f14,double f15,double f16)
{
// 	 u8 a = 0;
 uchar ChannelFrequencyTuningWord0data[4];
 uchar ChannelFrequencyTuningWord1data[4];
 uchar ChannelFrequencyTuningWord2data[4];
 uchar ChannelFrequencyTuningWord3data[4];
 uchar ChannelFrequencyTuningWord4data[4];
 uchar ChannelFrequencyTuningWord5data[4];
 uchar ChannelFrequencyTuningWord6data[4];
 uchar ChannelFrequencyTuningWord7data[4];
 uchar ChannelFrequencyTuningWord8data[4];
 uchar ChannelFrequencyTuningWord9data[4];
 uchar ChannelFrequencyTuningWord10data[4];
 uchar ChannelFrequencyTuningWord11data[4];
 uchar ChannelFrequencyTuningWord12data[4];
 uchar ChannelFrequencyTuningWord13data[4];
 uchar ChannelFrequencyTuningWord14data[4];
 uchar ChannelFrequencyTuningWord15data[4];
 uchar ChannelFunctionRegisterdata[3] = {0x80,0x23,0x30};        //无RU/RD
 uchar FunctionRegister1data[3] = {0xD0,0xf3,0x00};  	 

 WriteToAD9959ViaSpi(FR1,3,FunctionRegister1data,0);         	 	 //设置功能寄存器	 
 WriteToAD9959ViaSpi(CFR,3,ChannelFunctionRegisterdata,0);       //设置通道功能寄存器

 WrFrequencyTuningWorddata(f1,ChannelFrequencyTuningWord0data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x04,4,ChannelFrequencyTuningWord0data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f2,ChannelFrequencyTuningWord1data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x0A,4,ChannelFrequencyTuningWord1data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f3,ChannelFrequencyTuningWord2data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x0B,4,ChannelFrequencyTuningWord2data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f4,ChannelFrequencyTuningWord3data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x0C,4,ChannelFrequencyTuningWord3data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f5,ChannelFrequencyTuningWord4data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x0D,4,ChannelFrequencyTuningWord4data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f6,ChannelFrequencyTuningWord5data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x0E,4,ChannelFrequencyTuningWord5data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f7,ChannelFrequencyTuningWord6data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x0F,4,ChannelFrequencyTuningWord6data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f8,ChannelFrequencyTuningWord7data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x10,4,ChannelFrequencyTuningWord7data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f9,ChannelFrequencyTuningWord8data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x11,4,ChannelFrequencyTuningWord8data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f10,ChannelFrequencyTuningWord9data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x12,4,ChannelFrequencyTuningWord9data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f11,ChannelFrequencyTuningWord10data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x13,4,ChannelFrequencyTuningWord10data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f12,ChannelFrequencyTuningWord11data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x14,4,ChannelFrequencyTuningWord11data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f13,ChannelFrequencyTuningWord12data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x15,4,ChannelFrequencyTuningWord12data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f14,ChannelFrequencyTuningWord13data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x16,4,ChannelFrequencyTuningWord13data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f15,ChannelFrequencyTuningWord14data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x017,4,ChannelFrequencyTuningWord14data,0);  //写入频率控制字

 WrFrequencyTuningWorddata(f16,ChannelFrequencyTuningWord15data);    //将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(0x18,4,ChannelFrequencyTuningWord15data,1);  //写入频率控制字
}
void AD9959_SetPhamodulation163(double f,int p1,int p2,int p3,int p4,int p5,int p6,int p7,int p8,int p9,int p10,int p11,int p12,int p13,int p14,int p15,int p16)
{
// 	 u8 b = 0;
 uchar ChannelFrequencyTuningWord0data[4];
 uchar ChannelPhaseOffsetTuningWord0data[4];
 uchar ChannelPhaseOffsetTuningWord1data[4];
 uchar ChannelPhaseOffsetTuningWord2data[4];
 uchar ChannelPhaseOffsetTuningWord3data[4];
 uchar ChannelPhaseOffsetTuningWord4data[4];
 uchar ChannelPhaseOffsetTuningWord5data[4];
 uchar ChannelPhaseOffsetTuningWord6data[4];
 uchar ChannelPhaseOffsetTuningWord7data[4];
 uchar ChannelPhaseOffsetTuningWord8data[4];
 uchar ChannelPhaseOffsetTuningWord9data[4];
 uchar ChannelPhaseOffsetTuningWord10data[4];
 uchar ChannelPhaseOffsetTuningWord11data[4];
 uchar ChannelPhaseOffsetTuningWord12data[4];
 uchar ChannelPhaseOffsetTuningWord13data[4];
 uchar ChannelPhaseOffsetTuningWord14data[4];
 uchar ChannelPhaseOffsetTuningWord15data[4];
 
 uchar ChannelFunctionRegisterdata[3] = {0xc0,0x03,0x30};  					//相位调制模式启用(连续扫描可能开启)
 uchar AmplitudeControldata[3] = {0x00,0x03,0xff};									//十六级调制时启用,默认输出最大
 uchar FunctionRegister1data[3] = {0xD0,0xf3,0x00}; 

 WriteToAD9959ViaSpi(FR1,3,FunctionRegister1data,0);         	 		  //设置功能寄存器
 WriteToAD9959ViaSpi(CFR,3,ChannelFunctionRegisterdata,0);    			//设置通道功能寄存器,即相位调制启动

 WrPhaseOffsetTuningWorddata(p1,ChannelPhaseOffsetTuningWord0data); //将十进制相位数转换为2进制相位控制字
 WriteToAD9959ViaSpi(CPOW0,2,ChannelPhaseOffsetTuningWord0data,1);	//写入相位控制字

 WrPhaseOffsetTuningWorddata(p2,ChannelPhaseOffsetTuningWord1data); //将十进制相位数转换为2进制相位控制字?
 WriteToAD9959ViaSpi(0x0a,4,ChannelPhaseOffsetTuningWord1data,1);		//写入相位控制字

 WrPhaseOffsetTuningWorddata(p3,ChannelPhaseOffsetTuningWord2data); //将十进制相位数转换为2进制相位控制字
 WriteToAD9959ViaSpi(0x0b,4,ChannelPhaseOffsetTuningWord2data,1);	//写入相位控制字

 WrPhaseOffsetTuningWorddata(p4,ChannelPhaseOffsetTuningWord3data); //将十进制相位数转换为2进制相位控制字?
 WriteToAD9959ViaSpi(0x0c,4,ChannelPhaseOffsetTuningWord3data,1);		//写入相位控制字

 WrPhaseOffsetTuningWorddata(p5,ChannelPhaseOffsetTuningWord4data); //将十进制相位数转换为2进制相位控制字
 WriteToAD9959ViaSpi(0x0d,4,ChannelPhaseOffsetTuningWord4data,1);	//写入相位控制字

 WrPhaseOffsetTuningWorddata(p6,ChannelPhaseOffsetTuningWord5data); //将十进制相位数转换为2进制相位控制字?
 WriteToAD9959ViaSpi(0x0e,4,ChannelPhaseOffsetTuningWord5data,1);		//写入相位控制字

 WrPhaseOffsetTuningWorddata(p7,ChannelPhaseOffsetTuningWord6data); //将十进制相位数转换为2进制相位控制字
 WriteToAD9959ViaSpi(0x0f,4,ChannelPhaseOffsetTuningWord6data,1);	//写入相位控制字

 WrPhaseOffsetTuningWorddata(p8,ChannelPhaseOffsetTuningWord7data); //将十进制相位数转换为2进制相位控制字?
 WriteToAD9959ViaSpi(0x10,4,ChannelPhaseOffsetTuningWord7data,1);		//写入相位控制字

 WrPhaseOffsetTuningWorddata(p9,ChannelPhaseOffsetTuningWord8data); //将十进制相位数转换为2进制相位控制字
 WriteToAD9959ViaSpi(0x11,4,ChannelPhaseOffsetTuningWord8data,1);	//写入相位控制字

 WrPhaseOffsetTuningWorddata(p10,ChannelPhaseOffsetTuningWord9data); //将十进制相位数转换为2进制相位控制字?
 WriteToAD9959ViaSpi(0x12,4,ChannelPhaseOffsetTuningWord9data,1);		//写入相位控制字

 WrPhaseOffsetTuningWorddata(p11,ChannelPhaseOffsetTuningWord10data); //将十进制相位数转换为2进制相位控制字
 WriteToAD9959ViaSpi(0x13,4,ChannelPhaseOffsetTuningWord10data,1);	//写入相位控制字

 WrPhaseOffsetTuningWorddata(p12,ChannelPhaseOffsetTuningWord11data); //将十进制相位数转换为2进制相位控制字?
 WriteToAD9959ViaSpi(0x14,4,ChannelPhaseOffsetTuningWord11data,1);		//写入相位控制字

 WrPhaseOffsetTuningWorddata(p13,ChannelPhaseOffsetTuningWord12data); //将十进制相位数转换为2进制相位控制字
 WriteToAD9959ViaSpi(0x15,4,ChannelPhaseOffsetTuningWord12data,1);	//写入相位控制字

 WrPhaseOffsetTuningWorddata(p14,ChannelPhaseOffsetTuningWord13data); //将十进制相位数转换为2进制相位控制字?
 WriteToAD9959ViaSpi(0x16,4,ChannelPhaseOffsetTuningWord13data,1);		//写入相位控制字

 WrPhaseOffsetTuningWorddata(p15,ChannelPhaseOffsetTuningWord14data); //将十进制相位数转换为2进制相位控制字
 WriteToAD9959ViaSpi(0x17,4,ChannelPhaseOffsetTuningWord14data,1);	//写入相位控制字

 WrPhaseOffsetTuningWorddata(p16,ChannelPhaseOffsetTuningWord15data); //将十进制相位数转换为2进制相位控制字
 WriteToAD9959ViaSpi(0x18,4,ChannelPhaseOffsetTuningWord15data,1);		//写入相位控制字
 
 f=200000;
 WrFrequencyTuningWorddata(f,ChannelFrequencyTuningWord0data);    	//将十进制频率数转换为2进制频率控制字
 WriteToAD9959ViaSpi(CFTW0,4,ChannelFrequencyTuningWord0data,1);		//写入频率控制字
}
void AD9959_SetAM163(double f)
{
// 	 u8 cn = 0;
 uchar ChannelFrequencyTuningWord0data[4];

 uchar AmplitudeControldata[3]={0x00,0x03,0xff};
 uchar ChannelAmplitudeTuningWord1data[4]={0xef,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord2data[4]={0xdf,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord3data[4]={0xcf,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord4data[4]={0xbf,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord5data[4]={0xaf,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord6data[4]={0x9f,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord7data[4]={0x8f,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord8data[4]={0x7f,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord9data[4]={0x6f,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord10data[4]={0x5f,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord11data[4]={0x4f,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord12data[4]={0x3f,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord13data[4]={0x2f,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord14data[4]={0x1f,0x30,0x00,0x00};
 uchar ChannelAmplitudeTuningWord15data[4]={0x0f,0x30,0x00,0x00};
 uchar ChannelFunctionRegisterdata[3] = {0x40,0x03,0x30};
 uchar FunctionRegister1data[3]={0xD0,0xf3,0x00};

 WriteToAD9959ViaSpi(FR1,3,FunctionRegister1data,0);         	 	 //设置功能寄存器
 WriteToAD9959ViaSpi(CFR,3,ChannelFunctionRegisterdata,0); 			 //设置通道功能寄存器

 WriteToAD9959ViaSpi(ACR,3,AmplitudeControldata,0); 						 //设置幅度大小(S1)

 WriteToAD9959ViaSpi(0x0a,4,ChannelAmplitudeTuningWord1data,0);	 // 设置幅度大小(S2)

 WriteToAD9959ViaSpi(0x0b,4,ChannelAmplitudeTuningWord2data,0);

 WriteToAD9959ViaSpi(0x0c,4,ChannelAmplitudeTuningWord3data,0);

 WriteToAD9959ViaSpi(0x0d,4,ChannelAmplitudeTuningWord4data,0); 						 //设置幅度大小(S1)

 WriteToAD9959ViaSpi(0x0e,4,ChannelAmplitudeTuningWord5data,0);	 // 设置幅度大小(S2)

 WriteToAD9959ViaSpi(0x0f,4,ChannelAmplitudeTuningWord6data,0);

 WriteToAD9959ViaSpi(0x10,4,ChannelAmplitudeTuningWord7data,0);

 WriteToAD9959ViaSpi(0x11,4,ChannelAmplitudeTuningWord8data,0); 						 //设置幅度大小(S1)

 WriteToAD9959ViaSpi(0x12,4,ChannelAmplitudeTuningWord9data,0);	 // 设置幅度大小(S2)

 WriteToAD9959ViaSpi(0x13,4,ChannelAmplitudeTuningWord10data,0);

 WriteToAD9959ViaSpi(0x14,4,ChannelAmplitudeTuningWord11data,0);

 WriteToAD9959ViaSpi(0x15,4,ChannelAmplitudeTuningWord12data,0); 						 //设置幅度大小(S1)

 WriteToAD9959ViaSpi(0x16,4,ChannelAmplitudeTuningWord13data,0);	 // 设置幅度大小(S2)

 WriteToAD9959ViaSpi(0x17,4,ChannelAmplitudeTuningWord14data,0);

 WriteToAD9959ViaSpi(0x18,4,ChannelAmplitudeTuningWord15data,0);
 
 WrFrequencyTuningWorddata(f,ChannelFrequencyTuningWord0data);   	//写频率控制字
 WriteToAD9959ViaSpi(CFTW0,4,ChannelFrequencyTuningWord0data,1);
}

/////////////////////////////////////////////////////////////////////////
void AD9959_Frequency_Sweep(double f1,double f2,double a1,double a2) //f1起始频率,f2终止频率,a1上升δ,a2下降δ
{ 
uchar ChannelFrequencyTuningWorddata1[4];
uchar ChannelFrequencyTuningWorddata2[4];
uchar ChannelFrequencyTuningWorddata3[4];
uchar ChannelFrequencyTuningWorddata4[4];
uchar FunctionRegister1data[3] = {0xD0,0x00,0x00};    							//默认情况下选择   
uchar ChannelFunctionRegisterdata[3] = {0x80,0x43,0x20};						//扫频模式时选择;连续扫描没有启用,无RU/RD
uchar SweepRampRatedata[2] = {0xff,0xff};														//默认单位扫描时间最长
//uchar FunctionRegister1data[3] = {0xD0,0x04,0x00};    							//线性扫描时需要RU/RD时选择开启 
// uchar AmplitudeControldata[3] = {0xff,0x1f,0xff};									//开启RU/RD

WriteToAD9959ViaSpi(FR1,3,FunctionRegister1data,0);        		 	 	  //设置功能寄存器
WriteToAD9959ViaSpi(CFR,3,ChannelFunctionRegisterdata,0);  					//  设置通道功能寄存器
// 	WriteToAD9959ViaSpi(ACR,3,AmplitudeControldata,1); 								//需输出幅度RU/RD模式才选择,且要修改功能寄存器FR1
// 	f=500000;    // 设置起始频率S0(0x04)


WrFrequencyTuningWorddata(f1,ChannelFrequencyTuningWorddata1);   		//写频率控制字
WriteToAD9959ViaSpi(CFTW0,4,ChannelFrequencyTuningWorddata1,0);
// 	f=5000000; //设置终止频率(0x0A)

WrFrequencyTuningWorddata(f2,ChannelFrequencyTuningWorddata2);  	 //写频率控制字
WriteToAD9959ViaSpi(0x0A,4,ChannelFrequencyTuningWorddata2,0); 
// 	f=100;   //设置上升δ
	
WrFrequencyTuningWorddata(a1,ChannelFrequencyTuningWorddata3);   	 //写频率控制字
WriteToAD9959ViaSpi(RDW,4,ChannelFrequencyTuningWorddata3,0);

//   f=100;  //设置下降δ
WrFrequencyTuningWorddata(a2,ChannelFrequencyTuningWorddata4);   	 //写频率控制字
WriteToAD9959ViaSpi(FDW,4,ChannelFrequencyTuningWorddata4,0);
	
WriteToAD9959ViaSpi(SRR,2,SweepRampRatedata,1);										 //设置单位步进时间	

}

void AD9959_Phase_Sweep(int p1,int p2,int a1,int a2,double f)       //p1起始相位,p2终止相位,a1设置上升δ,a2设置下降δ
{
uchar ChannelPhaseOffsetTuningWorddata1[2];
uchar ChannelPhaseOffsetTuningWorddata2[2];
uchar ChannelPhaseOffsetTuningWorddata3[2];
uchar ChannelPhaseOffsetTuningWorddata4[2];
uchar ChannelFrequencyTuningWord0data[4];

uchar FunctionRegister1data[3] = {0xD0,0x00,0x00};   							 //默认情况下选择   
uchar ChannelFunctionRegisterdata[3] = {0xc0,0xC3,0x30};					 //扫相模式时选择,连续扫描没有启用,无RU/RD
uchar SweepRampRatedata[2] = {0xff,0xff};													 //默认单位扫描时间最长
//uchar FunctionRegister1data[3] = {0xD0,0x04,0x00};    						 //线性扫描时需要RU/RD时选择开启 
// uchar AmplitudeControldata[3] = {0xff,0x1f,0xff};								 //开启RU/RD

WriteToAD9959ViaSpi(FR1,3,FunctionRegister1data,0);         		 	 //设置功能寄存器
 WriteToAD9959ViaSpi(CFR,3,ChannelFunctionRegisterdata,0);				 //  设置通道功能寄存器
// 	 WriteToAD9959ViaSpi(ACR,3,AmplitudeControldata,1); 						 //需输出幅度RU/RD模式才选择,且要修改功能寄存器FR1
// 	 p=0;// 设置起始相位S0(0x04)   数据类型与子函数里面不一样
 WrPhaseOffsetTuningWorddata(p1,ChannelPhaseOffsetTuningWorddata1);
 WriteToAD9959ViaSpi(CPOW0,2,ChannelPhaseOffsetTuningWorddata1,0);
//    p=360;//设置终止相位E0(0x0A)
 WrPhaseOffsetTuningWorddata(p2,ChannelPhaseOffsetTuningWorddata2);
 WriteToAD9959ViaSpi(0x0a,4,ChannelPhaseOffsetTuningWorddata2,0);
//    p=10;//设置上升δ
 WrPhaseOffsetTuningWorddata(a1,ChannelPhaseOffsetTuningWorddata3);
 WriteToAD9959ViaSpi(RDW,4,ChannelPhaseOffsetTuningWorddata3,0);
//    p=10;//设置下降δ
 WrPhaseOffsetTuningWorddata(a2,ChannelPhaseOffsetTuningWorddata4);
 WriteToAD9959ViaSpi(FDW,4,ChannelPhaseOffsetTuningWorddata4,0);
 WriteToAD9959ViaSpi(SRR,2,SweepRampRatedata,0);										//写单位步进时间
// 	 f=400000;    //设置输出频率大小
 WrFrequencyTuningWorddata(f,ChannelFrequencyTuningWord0data); 		  //写频率控制字
 WriteToAD9959ViaSpi(CFTW0,4,ChannelFrequencyTuningWord0data,1);

}

void AD9959_Amplitute_Sweep(int a,int a1,int a2,double f)   					//a终止幅度,a1上升δ,a2下降δ,f输出频率
{
uchar ChannelAmplitudeTuningWorddata1[4];
uchar ChannelAmplitudeTuningWorddata2[4];
uchar ChannelAmplitudeTuningWorddata3[4];
uchar ChannelFrequencyTuningWorddata4[4];

uchar FunctionRegister1data[3] = {0xD0,0x00,0x00};    						//默认情况下选择   
uchar ChannelFunctionRegisterdata[3] = {0x40,0x43,0x20};					//幅度扫描位启动
uchar AmplitudeControldata[3] = {0x00,0x0,0x3f};  								//幅度扫描模式时启用
uchar SweepRampRatedata[2] = {0xff,0xff};													//默认单位扫描时间最长

WriteToAD9959ViaSpi(FR1,3,FunctionRegister1data,0);         	 	  //设置功能寄存器
WriteToAD9959ViaSpi(CFR,3,ChannelFunctionRegisterdata,0);
//写起始幅度S0
WriteToAD9959ViaSpi(ACR,3,AmplitudeControldata,0);
//写终止幅度E0
// 	a=1023; //写上升δ,不能写到1024,最大为1023
WrAmplitudeTuningWorddata(a,ChannelAmplitudeTuningWorddata1);
WriteToAD9959ViaSpi(0x0a,4,ChannelAmplitudeTuningWorddata1,0); 		//CTW0 address 0x04.输出10MHZ频率
// 	a=10; //写上升δ
WrAmplitudeTuningWorddata(a1,ChannelAmplitudeTuningWorddata2);    //写频率控制字
WriteToAD9959ViaSpi(RDW,4,ChannelAmplitudeTuningWorddata2,0);
//   a=10;  //写下降δ
WrAmplitudeTuningWorddata(a2,ChannelAmplitudeTuningWorddata3);    //写频率控制字
WriteToAD9959ViaSpi(FDW,4,ChannelAmplitudeTuningWorddata3,0);
WriteToAD9959ViaSpi(SRR,2,SweepRampRatedata,0);										//写单位步进时间
// 	f=400000;    
WrFrequencyTuningWorddata(f,ChannelFrequencyTuningWorddata4);   	//写频率控制字
WriteToAD9959ViaSpi(CFTW0,4,ChannelFrequencyTuningWorddata4,1);

}

#endif	// #if USE_AD9959

AD9959_Outset.h

点击查看代码
#ifndef _AD9959_Outset_H
#define _AD9959_Outset_H

#define uchar unsigned char
#define uint unsigned int 

#include "headers.h"

#if USE_AD9959

/** 通道使能 ********************************************************************************************************************************************************/
/********************************************************************************************************************************************************************/
// extern void AllChannl_init();
extern void AD9959_enablechannelall(void);	/* 使能全部通道(不可用)*/
extern void AD9959_enablechannel0(void);		/* 使能通道 0*/
extern void AD9959_enablechannel1(void);		/* 使能通道 0*/
extern void AD9959_enablechannel2(void);		/* 使能通道 0*/
extern void AD9959_enablechannel3(void);		/* 使能通道 0*/


/** 正弦波设置 ********************************************************************************************************************************************************/
/**********************************************************************************************************************************************************************/
/* 频率幅度相位独立可调 */
/* 设置输出信号的 频率 */
extern void AD9959_Setwavefrequency(double f);	// 55 kHz - 200 MHz			
/* 设置输出信号的 频率和相位 */
extern void AD9959_Setwavephase(double f,int p);    // 0 - 180 °
/* 设置输出信号的 频率和幅度 */
extern void AD9959_Setwaveamplitute(double f,int a);    // 幅值范围 0 - 16383   0 - 840 mV


/** 二阶调制波设置 ********************************************************************************************************************************************************/
/**************************************************************************************************************************************************************************/
/* 设置二阶调制波的 两个信号频率 */
extern void AD9959_SetFremodulation2(double f1,double f2);		
/* 设置二阶调制波的 两个信号频率和相位 */
extern void AD9959_SetPhamodulation2(double f,int p1,int p2);	
/* 设置二阶调制波的 信号幅度 */
extern void AD9959_SetAM2(double f);		


/** 四阶调制波设置 ********************************************************************************************************************************************************/
/**************************************************************************************************************************************************************************/
//-------------------------------------------------------------------
// CH0/1
//-------------------------------------------------------------------
/* 设置 CH 0/1 四阶调制波的 四个信号频率 */																																																					
extern void AD9959_SetFremodulation4(double f1,double f2,double f3,double f4);	
/* 设置 CH 0/1 四阶调制波的 频率和四个信号的相位 */
extern void AD9959_SetPhamodulation4(double f,int p1,int p2,int p3,int p4); 
/* 设置 CH 0/1 四阶调制波的 信号幅度 */
extern void AD9959_SetAM4(double f);           
//-------------------------------------------------------------------
// CH3/4
//-------------------------------------------------------------------
/* 设置 CH 3/4 四阶调制波的 四个信号频率 */
extern void AD9959_SetFremodulation42(double f1,double f2,double f3,double f4);	
/* 设置 CH 3/4 四阶调制波的 频率和四个信号的相位 */
extern void AD9959_SetPhamodulation42(double f,int p1,int p2,int p3,int p4);
/* 设置 CH 3/4 四阶调制波的 信号幅度 */
extern void AD9959_SetAM42(double f);                                           


/** 八阶调制波设置 ********************************************************************************************************************************************************/
/**************************************************************************************************************************************************************************/
//-------------------------------------------------------------------
// CH0
//-------------------------------------------------------------------
/* 设置 CH0 八阶调制波的 八个信号频率 */
extern void AD9959_SetFremodulation80(double f1,double f2,double f3,double f4,double f5,double f6,double f7,double f8);
/* 设置 CH0 八阶调制波的 频率和八个信号的相位 */
extern void AD9959_SetPhamodulation80(double f,int p1,int p2,int p3,int p4,int p5,int p6,int p7,int p8);
/* 设置 CH0 八阶调制波的 信号幅度 */
extern void AD9959_SetAM80(double f);
//-------------------------------------------------------------------
// CH1
//-------------------------------------------------------------------
/* 设置 CH1 八阶调制波的 八个信号频率 */
extern void AD9959_SetFremodulation81(double f1,double f2,double f3,double f4,double f5,double f6,double f7,double f8);
/* 设置 CH1 八阶调制波的 频率和八个信号的相位 */
extern void AD9959_SetPhamodulation81(double f,int p1,int p2,int p3,int p4,int p5,int p6,int p7,int p8);
/* 设置 CH1 八阶调制波的 信号幅度 */
extern void AD9959_SetAM81(double f);
//-------------------------------------------------------------------
// CH2
//-------------------------------------------------------------------
/* 设置 CH2 八阶调制波的 八个信号频率 */
extern void AD9959_SetFremodulation82(double f1,double f2,double f3,double f4,double f5,double f6,double f7,double f8);
/* 设置 CH2 八阶调制波的 频率和八个信号的相位 */
extern void AD9959_SetPhamodulation82(double f,int p1,int p2,int p3,int p4,int p5,int p6,int p7,int p8);
/* 设置 CH2 八阶调制波的 信号幅度 */
extern void AD9959_SetAM82(double f);
//-------------------------------------------------------------------
// CH 3
//-------------------------------------------------------------------
/* 设置 CH3 八阶调制波的 八个信号频率 */
extern void AD9959_SetFremodulation83(double f1,double f2,double f3,double f4,double f5,double f6,double f7,double f8);
/* 设置 CH3 八阶调制波的 频率和八个信号的相位 */
extern void AD9959_SetPhamodulation83(double f,int p1,int p2,int p3,int p4,int p5,int p6,int p7,int p8);
/* 设置 CH3 八阶调制波的 信号幅度 */
extern void AD9959_SetAM83(double f);


/** 十六阶调制波设置 *****************************************************************************************************************************************************************************************************/
/*************************************************************************************************************************************************************************************************************************/
//-------------------------------------------------------------------
// CH0
//-------------------------------------------------------------------
/* 设置 CH0 十六阶调制波的 十六个信号频率 */
extern void AD9959_SetFremodulation160(double f1,double f2,double f3,double f4,double f5,double f6,double f7,double f8,double f9,double f10,double f11,double f12,double f13,double f14,double f15,double f16);
/* 设置 CH0 十六阶调制波的 频率和十六个信号的相位 */
extern void AD9959_SetPhamodulation160(double f,int p1,int p2,int p3,int p4,int p5,int p6,int p7,int p8,int p9,int p10,int p11,int p12,int p13,int p14,int p15,int p16);
/* 设置 CH0 十六阶调制波的 信号幅度 */
extern void AD9959_SetAM160(double f);

//-------------------------------------------------------------------
// CH 1
//-------------------------------------------------------------------
/* 设置 CH1 十六阶调制波的 十六个信号频率 */
extern void AD9959_SetFremodulation161(double f1,double f2,double f3,double f4,double f5,double f6,double f7,double f8,double f9,double f10,double f11,double f12,double f13,double f14,double f15,double f16);
/* 设置 CH1 十六阶调制波的 频率和十六个信号的相位 */
extern void AD9959_SetPhamodulation161(double f,int p1,int p2,int p3,int p4,int p5,int p6,int p7,int p8,int p9,int p10,int p11,int p12,int p13,int p14,int p15,int p16);
/* 设置 CH1 十六阶调制波的 信号幅度 */
extern void AD9959_SetAM161(double f);

//-------------------------------------------------------------------
// CH 2
//-------------------------------------------------------------------
/* 设置 CH2 十六阶调制波的 十六个信号频率 */
extern void AD9959_SetFremodulation162(double f1,double f2,double f3,double f4,double f5,double f6,double f7,double f8,double f9,double f10,double f11,double f12,double f13,double f14,double f15,double f16);
/* 设置 CH2 十六阶调制波的 频率和十六个信号的相位 */
extern void AD9959_SetPhamodulation162(double f,int p1,int p2,int p3,int p4,int p5,int p6,int p7,int p8,int p9,int p10,int p11,int p12,int p13,int p14,int p15,int p16);
/* 设置 CH2 十六阶调制波的 信号幅度 */
extern void AD9959_SetAM162(double f);

//-------------------------------------------------------------------
// CH 3
//-------------------------------------------------------------------
/* 设置 CH3 十六阶调制波的 十六个信号频率 */
extern void AD9959_SetFremodulation163(double f1,double f2,double f3,double f4,double f5,double f6,double f7,double f8,double f9,double f10,double f11,double f12,double f13,double f14,double f15,double f16);
/* 设置 CH3 十六阶调制波的 频率和十六个信号的相位 */
extern void AD9959_SetPhamodulation163(double f,int p1,int p2,int p3,int p4,int p5,int p6,int p7,int p8,int p9,int p10,int p11,int p12,int p13,int p14,int p15,int p16);
/* 设置 CH3 十六阶调制波的 信号幅度 */
extern void AD9959_SetAM163(double f);


/** 扫频设置 ********************************************************************************************************************************************************/
/********************************************************************************************************************************************************************/
/* 设置扫频的 起始频率、终止频率、上升δ、下降δ */
extern void AD9959_Frequency_Sweep(double f1,double f2,double a1,double a2);
/* 设置扫频的 起始相位、终止相位、上升δ、下降δ */
extern void AD9959_Phase_Sweep(int p1,int p2,int a1,int a2,double f);	
/* 设置扫频的 终止幅度、上升δ、下降δ、输出频率 */
extern void AD9959_Amplitute_Sweep(int a,int a1,int a2,double f);

#endif	// #if USE_AD9959

#endif	// #ifndef _AD9959_Outset_H


波形

最低频率波形(并非最低)

可以看到在40kHz的时候,幅值已经明显衰减

image

最高频率波形

可以看到在200MHz的时候,幅值已经明显衰减

image

博客导航

博客导航

posted @ 2025-07-24 20:05  膝盖中箭卫兵  阅读(472)  评论(8)    收藏  举报
ORCID iD icon https://orcid.org/0000-0001-5102-772X