【MSPM0G3519 系列】AD9959 DDS模块(凌智)移植
引言
看了清单,感觉仪表的频率会高一些啊,专门在m0上移植了AD9959程序,可能用来较高频的扫频。
AD9959在正常的频率范围内(100kHz - 150MHz以内),有最高840mVpp输出。
AD9959拥有四个通道,每一个通道的频率、相位和幅值独立且可调。
AD9959频率范围:40kHz - 200MHz;幅值范围:0mVpp - 840mVpp;相位范围:0° - 180°。
移植
引脚
由于用不上高频调制和自动扫频,所以就没用上P0~P3这四个引脚,其他引脚是都接上了的。(哦对了记得加一个散热片)

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

文件

程序
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的时候,幅值已经明显衰减

最高频率波形
可以看到在200MHz的时候,幅值已经明显衰减

博客导航
本文来自博客园,作者:膝盖中箭卫兵,转载请注明原文链接:https://www.cnblogs.com/Skyrim-sssuuu/p/19003444

浙公网安备 33010602011771号
https://orcid.org/0000-0001-5102-772X