最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

DDS9851驱动程序

来源:动视网 责编:小OO 时间:2025-09-29 04:27:42
文档

DDS9851驱动程序

/*本驱动程序在STM32平台上测试通过,前面部分为头文件,后面部分为驱动主函数,如要用在51平台上,只需要#defineAD9851_W_FLK_HGPIO_ResetBits(GPIOB,GPIO_Pin_B)改为相应的引脚定义即可,比如可以换为sbitW_FLKP0^0;#defineAD9851_W_FLK_HW_FLK=0;引脚需做相应修改*/#ifndef_DDS_H#define_DDS_H#defineAD9851_W_FLK_HGPIO_ResetBits(GPIOB,GPI
推荐度:
导读/*本驱动程序在STM32平台上测试通过,前面部分为头文件,后面部分为驱动主函数,如要用在51平台上,只需要#defineAD9851_W_FLK_HGPIO_ResetBits(GPIOB,GPIO_Pin_B)改为相应的引脚定义即可,比如可以换为sbitW_FLKP0^0;#defineAD9851_W_FLK_HW_FLK=0;引脚需做相应修改*/#ifndef_DDS_H#define_DDS_H#defineAD9851_W_FLK_HGPIO_ResetBits(GPIOB,GPI
/*本驱动程序在STM32平台上测试通过,前面部分为头文件,后面部分为驱动主函数,如要用在51平台上,只需要#define AD9851_W_FLK_H GPIO_ResetBits(GPIOB,GPIO_Pin_B)改为相应的引脚定义即可,比如可以换为sbit W_FLK P0^0 ; #define AD9851_W_FLK_H W_FLK=0;引脚需做相应修改*/

#ifndef _DDS_H

#define _DDS_H

#define AD9851_W_FLK_H    GPIO_ResetBits(GPIOB,GPIO_Pin_10);

#define AD9851_W_FLK_L    GPIO_SetBits(GPIOB,GPIO_Pin_10);

#define AD9851_FQ_UD_L    GPIO_SetBits(GPIOB,GPIO_Pin_11);

#define AD9851_FQ_UD_H    GPIO_ResetBits(GPIOB,GPIO_Pin_11); 

#define AD9851_RESET_L    GPIO_SetBits(GPIOB,GPIO_Pin_13);

#define AD9851_RESET_H    GPIO_ResetBits(GPIOB,GPIO_Pin_13);

#define AD9851_Bit_Set    GPIO_SetBits(GPIOD,GPIO_Pin_15);

#define AD9851_Bit_Reset  GPIO_ResetBits(GPIOD,GPIO_Pin_15);

void AD9851_Reset(void);

void AD9851_Reset_Serial(void);

void AD9851_Write_Word(unsigned char Word);

void AD9851_WR_Parrel(unsigned char W0,double Frequence);

void AD9851_WR_Serial(unsigned char W0,double Frequence);

void Sweep_Frequency(double Start_Frequency,double End_Frequency,unsigned int Sweep_Speed_10Ms);

#endif

/*9851是最较简单的DDS,只有频率字跟相位字,将上面的头文件直接包含进工程的main文件里面,就可以直接调用下面的函数体了*/

#include "DDS.h"

#include

extern void Delay(vu32 nCount);

//---------------------------------------------------//

//              ad9851复位(并口模式)                 //

//---------------------------------------------------//

void AD9851_Reset(void)

{

    AD9851_W_FLK_L;

    AD9851_FQ_UD_L;

    AD9851_RESET_L;

    AD9851_RESET_H;

    Delay(1);

    AD9851_RESET_L;

    Delay(1);

}

//***************************************************//

//              ad9851复位(并口模式)                 //

//---------------------------------------------------//

void AD9851_Reset_Serial(void)

{

    AD9851_W_FLK_L;

    AD9851_FQ_UD_L;

     AD9851_Write_Word(0X03);

    //rest信号

    AD9851_RESET_L;

    AD9851_RESET_H;

    Delay(1);

    AD9851_RESET_L;

    Delay(1);

    //w_clk信号

    AD9851_W_FLK_H;

    Delay(1);

    AD9851_W_FLK_L;

    //fq_up信号

    AD9851_FQ_UD_H;

    Delay(1);

    AD9851_FQ_UD_L;

}

__inline void AD9851_Write_Word(unsigned char Word)

{

    u16 Port_Data;

    Port_Data=Word;

Port_Data=Port_Data<<8;

    GPIO_Write(GPIOD, Port_Data);

    Delay(1);

    AD9851_W_FLK_L;

    AD9851_W_FLK_H;

    Delay(1);

    AD9851_W_FLK_L;

}

//***************************************************//

//          向ad9851中写命令与数据(并口)             //

//---------------------------------------------------//

void AD9851_WR_Parrel(unsigned char W0,double Frequence)

{

    u8 Word;

    u32 Frequency_Hex;

    double Ratio;

    Ratio=4294967295/180;//适合180M晶振

    Frequence=Frequence/1000000;

    Frequence=Frequence*Ratio;

    Frequency_Hex=Frequence;

    //写w0数据

    Word=W0;  

    AD9851_Write_Word(Word);

    //写w1数据

Word=(Frequency_Hex>>24);

    AD9851_Write_Word(Word);

    //写w2数据

Word=(Frequency_Hex>>16);

    AD9851_Write_Word(Word);

    //写w3数据

Word=(Frequency_Hex>>8);

    AD9851_Write_Word(Word);

    //写w4数据

Word=(Frequency_Hex>>0);

    AD9851_Write_Word(Word);

    //移入始能

    AD9851_FQ_UD_L;

    AD9851_FQ_UD_H;

    Delay(1);

    AD9851_FQ_UD_L;

}

//***************************************************//

//          向ad9851中写命令与数据(串口)             //

//---------------------------------------------------//

void AD9851_WR_Serial(unsigned char W0,double Frequence)

{

    u8 Word;

    u32 Frequency_Hex;

    double Ratio;

    unsigned char i;

    Ratio=4294967295/180;//适合180M晶振

    Frequence=Frequence/1000000;

    Frequence=Frequence*Ratio;

    Frequency_Hex=Frequence;

    //写w4数据

Word=(Frequency_Hex>>=0);

for(i=0;i<8;i++)

    {

     if((Word>>i)&0x01)

        {    

            AD9851_Bit_Set;

        }

        else

        {

            AD9851_Bit_Reset;

        }                

        AD9851_W_FLK_H;

        Delay(1);

        AD9851_W_FLK_L;

    }

    //写w3数据

Word=(Frequency_Hex>>=8);

for(i=0;i<8;i++)

    {

     if((Word>>i)&0x01)

        {    

            AD9851_Bit_Set;

        }

        else

        {

            AD9851_Bit_Reset;

        }        

        AD9851_W_FLK_H;

        Delay(1);

        AD9851_W_FLK_L;

    }

    //写w2数据

Word=(Frequency_Hex>>=16);

for(i=0;i<8;i++)

    { if((Word>>i)&0x01)

        {    

            AD9851_Bit_Set;

        }

        else

        {

            AD9851_Bit_Reset;

        }                

        AD9851_W_FLK_H;

        Delay(1);

        AD9851_W_FLK_L;

    }

    //写w1数据

Word=(Frequency_Hex>>=24);

for(i=0;i<8;i++)

    {

if((Word>>i)&0x01)

        {    

            AD9851_Bit_Set;

        }

        else

        {

            AD9851_Bit_Reset;

        }                

        AD9851_W_FLK_H;

        Delay(1);

        AD9851_W_FLK_L;

    }

    //写w0数据

    Word=W0;   

for(i=0;i<8;i++)

    {

if((Word>>i)&0x01)

        {    

            AD9851_Bit_Set;

        }

        else

        {

            AD9851_Bit_Reset;

        }                

        AD9851_W_FLK_H;

        Delay(1);

        AD9851_W_FLK_L;

    }

    //移入始能

    AD9851_FQ_UD_H;

    Delay(1);

    AD9851_FQ_UD_L;

}

void Sweep_Frequency(double Start_Frequency,double End_Frequency,unsigned int Sweep_Speed_10Ms)

{

    double Frequency;

    unsigned int i;

    Frequency=Start_Frequency;    

    do

    {

        AD9851_WR_Parrel(0x01,Frequency);

     for(i=Sweep_Speed_10Ms;i>0;i--)

        {

            Delay(10000);

        }

        Frequency=Frequency+20;

    }

while(Frequency<=End_Frequency);    

            

}

文档

DDS9851驱动程序

/*本驱动程序在STM32平台上测试通过,前面部分为头文件,后面部分为驱动主函数,如要用在51平台上,只需要#defineAD9851_W_FLK_HGPIO_ResetBits(GPIOB,GPIO_Pin_B)改为相应的引脚定义即可,比如可以换为sbitW_FLKP0^0;#defineAD9851_W_FLK_HW_FLK=0;引脚需做相应修改*/#ifndef_DDS_H#define_DDS_H#defineAD9851_W_FLK_HGPIO_ResetBits(GPIOB,GPI
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top