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

📄 ad9851.c

📁 ad9851的c语言51驱动
💻 C
字号:
#include "system.h"
#include <stdio.h>
#include "altera_avalon_pio_regs.h"

alt_u8 ad9851_pio=0;
 #define AD9851DELAY    50
/******************************************************
 * 说明:延时函数
 * **************************************************/
void ad9851_delay(alt_u32 time)
{
    alt_u32 i;
    for(i=0; i<time; i++);
}

/***************************************
 * 说明:拉高FQUD引脚
 * *************************************/
void ad9851_set_FQUD(void)
{
    ad9851_pio=ad9851_pio | 0x01;
    IOWR_ALTERA_AVALON_PIO_DATA(AD9851_PIO_BASE, ad9851_pio);
}

/**************************************
 * 说明:拉低FQUD引脚
 * ***********************************/
void ad9851_clr_FQUD(void)
{
    ad9851_pio=ad9851_pio & 0xFE;
    IOWR_ALTERA_AVALON_PIO_DATA(AD9851_PIO_BASE, ad9851_pio);
}

/*************************************
 * 说明:拉高WCLK引脚
 * **********************************/
void ad9851_set_WCLK(void)
{
    ad9851_pio=ad9851_pio | 0x02;
    IOWR_ALTERA_AVALON_PIO_DATA(AD9851_PIO_BASE, ad9851_pio);
}

/***************************************
 * 说明:拉低WCLK引脚
 * *************************************/
void ad9851_clr_WCLK(void)
{
    ad9851_pio=ad9851_pio & 0xFD;
    IOWR_ALTERA_AVALON_PIO_DATA(AD9851_PIO_BASE, ad9851_pio);
}

/***************************************
 * 说明:拉高RESET引脚
 * ************************************/
void ad9851_set_RESET(void)
{
    ad9851_pio=ad9851_pio | 0x04;
    IOWR_ALTERA_AVALON_PIO_DATA(AD9851_PIO_BASE, ad9851_pio);
}

/***************************************
 * 说明:拉低RESET引脚
 * ************************************/
void ad9851_clr_RESET(void)
{
    ad9851_pio=ad9851_pio & 0xFB;
    IOWR_ALTERA_AVALON_PIO_DATA(AD9851_PIO_BASE, ad9851_pio);
}

/***************************************
 * 说明:拉高D7引脚
 * ************************************/
void ad9851_set_D7(void)
{
    ad9851_pio=ad9851_pio | 0x08;
    IOWR_ALTERA_AVALON_PIO_DATA(AD9851_PIO_BASE, ad9851_pio);
}

/***************************************
 * 说明:拉低D7引脚
 * ************************************/
void ad9851_clr_D7(void)
{
    ad9851_pio=ad9851_pio & 0xF7;
    IOWR_ALTERA_AVALON_PIO_DATA(AD9851_PIO_BASE, ad9851_pio);   
}

/**************************************
 * 说明:初始化ad9851
 * ************************************/
void ad9851_init(void)
{
    ad9851_set_RESET();
    ad9851_delay(AD9851DELAY);
    ad9851_clr_RESET();
    ad9851_delay(AD9851DELAY);
    ad9851_clr_WCLK();
    ad9851_delay(AD9851DELAY);
    ad9851_clr_FQUD();
    ad9851_delay(AD9851DELAY);
    ad9851_set_WCLK();
    ad9851_delay(AD9851DELAY);
    ad9851_clr_WCLK();
    ad9851_delay(AD9851DELAY);
    ad9851_set_FQUD();
    ad9851_delay(AD9851DELAY);
    ad9851_clr_FQUD();
}


/************************************
 * 说明:发送ad9851控制字
 * *********************************/
void ad9851_send_ctrl(alt_u32 data)
{
    alt_u32 i;
    alt_u8 mode=0x01; 
    ad9851_clr_FQUD();
    ad9851_delay(AD9851DELAY);
    
    for(i=0; i<32; i++)
    {
        if(data&0x00000001)
            ad9851_set_D7();
        else
            ad9851_clr_D7();
        ad9851_delay(AD9851DELAY);
        ad9851_set_WCLK();
        ad9851_delay(AD9851DELAY);
        ad9851_clr_WCLK();
        ad9851_delay(AD9851DELAY);
        data=data>>1;
    }
    
    for(i=0; i<8; i++)
    {
        if(mode&0x01)
            ad9851_set_D7();
        else
            ad9851_clr_D7();
        ad9851_delay(AD9851DELAY);
        ad9851_set_WCLK();
       ad9851_delay(AD9851DELAY);
        ad9851_clr_WCLK();
       ad9851_delay(AD9851DELAY);
        mode=mode>>1;
    }
    
    ad9851_set_FQUD();
    ad9851_delay(AD9851DELAY);
    ad9851_clr_FQUD();
}

/****************************************
 * 说明:设置ad9851频率
****************************************/
void ad9851_set_freq(float freq)
{
    ad9851_send_ctrl((alt_u32)(23.8609294*freq));
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -