⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 使用2410实验箱对AD9852进行控制输出指定频率的正弦波
💻 C
📖 第 1 页 / 共 2 页
字号:
        
        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 + -