📄 main.c
字号:
unsigned char w[6];
double fre;
fre=(double)(freq*1407374.88355328);
w[0]=(int)(fre/1099511627776.0);
w[1]=(int)(fre/4294967296.0)%256;
w[2]=(long int)(fre/16777216.0)%256;
w[3]=(long int)(fre/65536.0)%256;
w[4]=(long int)(fre/256.0)%256;
w[5]=(long int)fre%256;
setWR();
if(which == 1)//设定FTW1
{
inputAddAndData(0x04,w[0]);
inputAddAndData(0x05,w[1]);
inputAddAndData(0x06,w[2]);
inputAddAndData(0x07,w[3]);
inputAddAndData(0x08,w[4]);
inputAddAndData(0x09,w[5]);
}
else if(which == 2)//设定FTW2
{
inputAddAndData(0x0a,w[0]);
inputAddAndData(0x0b,w[1]);
inputAddAndData(0x0c,w[2]);
inputAddAndData(0x0d,w[3]);
inputAddAndData(0x0e,w[4]);
inputAddAndData(0x0f,w[5]);
}
else if(which == 3)//设定DFW
{
inputAddAndData(0x10,w[0]);
inputAddAndData(0x11,w[1]);
inputAddAndData(0x12,w[2]);
inputAddAndData(0x13,w[3]);
inputAddAndData(0x14,w[4]);
inputAddAndData(0x15,w[5]);
}
}
/********************************************************************************************************
** 函数名称 :setPahse()
** 函数功能 :设置相位寄存器
** 入口参数 :phase 设置的相位值(取值范围0-360)
** which 需要设置哪一个寄存器 1-->PAR1, 2-->PAR2
** 出口参数 :无
*********************************************************************************************************/
void setPhase(fp64 phase, uint8 which)
{
uint8 w[2];
uint16 pha_temp = (uint16)(phase*45.51111111);
w[0] = pha_temp & 0xff;
w[1] = (pha_temp & 0x3f00)>>8;
setWR();
if(which == 1)//设定Phase Adjust Register #1
{
inputAddAndData(0x00,w[1]);
inputAddAndData(0x01,w[0]);
}
else if(which == 2)//设定Phase Adjust Register #2
{
inputAddAndData(0x02,w[1]);
inputAddAndData(0x03,w[0]);
}
}
/********************************************************************************************************
** 函数名称 :setClock()
** 函数功能 :设置ramp rate clock的时间
** 入口参数 :time ramp rate clock的周期(单位秒)
** 出口参数 :无
---------------------------------------------------------------------------------------------------------
说明: 因为使用外部单片机的update引脚,故不需要配置内部的update
*********************************************************************************************************/
void setClock(fp64 time)
{
uint8 w[3];
uint32 temp_t = (uint32)(SYSTEM_CLOCK*time - 1);
w[0] = temp_t & 0xff;
w[1] = (temp_t & 0xff00)>>8;
w[2] = (temp_t & 0xf0000)>>16;
setWR();
inputAddAndData(0x1a,w[2]);
inputAddAndData(0x1b,w[1]);
inputAddAndData(0x1c,w[0]);
}
/********************************************************************************************************
** 函数名称 :setOutputShapeKey()
** 函数功能 :设置output shape key multi的系数
** 入口参数 :shape 系数值
** which 设定哪一个的系数1-->I的系数,2-->Q的系数,3-->ramp rate的系数
** 出口参数 :无
*********************************************************************************************************/
void setOutputShapeKey(uint16 shape, uint8 which)
{
setWR();
if(which == 1)//output shape key I multi
{
inputAddAndData(0x22,(shape&0xff));
inputAddAndData(0x21,(shape&0xf00)>>8);
}
else if(which == 2)//output shape key Q multi
{
inputAddAndData(0x24,shape&0xff);
inputAddAndData(0x23,(shape&0xf00)>>8);
}
else if(which ==3)//output shape key ramp rate
{
inputAddAndData(0x25,shape&0xff);
}
}
/********************************************************************************************************
** 函数名称 :setQdac()
** 函数功能 :设置QDAC
** 入口参数 :qdac 设置值
** 出口参数 :无
*********************************************************************************************************/
void setQdac(uint16 qdac)
{
setWR();
inputAddAndData(0x27,(qdac&0xff));
inputAddAndData(0x28,(qdac&0xf00)>>8);
}
/********************************************************************************************************
** 函数名称 :singleStoneOutput()
** 函数功能 :输出定点信号
** 入口参数 :freq 指定输出信号的频率(单位Hz)
** phase 指定输出信号的相位(单位°)
** 出口参数 :无
*********************************************************************************************************/
void singleStoneOutput(long int freq, fp64 phase)
{
setMode(SINGLE_STONE_MODE);
DelayNS(10);
setFre(freq,1);
setPhase(phase,1);
update_9852();
}
/********************************************************************************************************
** 函数名称 :chirpOutput()
** 函数功能 :输出指定的扫频信号
** 入口参数 :freq_start 输出信号的频率起始点(单位Hz)
** delta_freq 扫频信号的步进频率(单位Hz)
** time 扫频信号的步进时间(单位s)
** direction 扫频信号频率的变化方向(为1,表示从freq_start开始先上增长,为-1表示从freq_start开始减少)
** 出口参数 :无
*********************************************************************************************************/
void chirpOutput(long int freq_start, long int delta_freq, fp64 time, int8 direction)
{
//需要判断delta_freq的增长方向是正还是负?
unsigned char w[6];
double fre;
fre=(double)(delta_freq*1407374.88355328);
if(direction == 1)//向上增长,最高位置为0
{
w[0]=(int)(fre/1099511627776.0) & ~(0x80);
}
else if(direction == -1)//向下增长,最高位置为1
{
w[0]=(int)(fre/1099511627776.0) | 0x80;
}
w[1]=(int)(fre/4294967296.0)%256;
w[2]=(long int)(fre/16777216.0)%256;
w[3]=(long int)(fre/65536.0)%256;
w[4]=(long int)(fre/256.0)%256;
w[5]=(long int)fre%256;
setMode(CHIRP_MODE);
DelayNS(10);
setFre(freq_start,1);
//设定freq_delta
inputAddAndData(0x10,w[0]);
inputAddAndData(0x11,w[1]);
inputAddAndData(0x12,w[2]);
inputAddAndData(0x13,w[3]);
inputAddAndData(0x14,w[4]);
inputAddAndData(0x15,w[5]);
//设置结束
setClock(time);
update_9852();
}
/*********************************************************************************************************
** 函数名称 :main()
** 函数功能 :控制DDS_AD9852
*********************************************************************************************************/
int main (void)
{
initSys();
DelayNS(10);
singleStoneOutput(10000,90);
while(1)
{
}
return 0;
}
/*********************************************************************************************************
** End Of File
********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -