📄 ad9851.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 + -