原创 AD9851的驱动程序

2008-8-23 09:27 4119 3 4 分类: 软件与OS
//====================================================================
//                Copyright (C), 2006, HUST.
//    ----Filename:    AD9851.c
//    -Description:    AD9851驱动
//    -----History:        06/8/29    V1.0    Edit By L.F.
//====================================================================
//头文件
#include "SPCE061A.h"
//变量说明
unsigned long int Freq_Ctrl_Word = 0x051eb851;    //频率控制字    先传低位再传高位
unsigned int Phase_Ctrl_Word = 0x0000; //相位控制字        先传低位再传高位
unsigned int Order_Ctrl_Word = 0x0000;//b32:0 6倍频关闭 b33b34:00 电源工作模式
//定义AD9851与SPCE061A的接口
#define M_DATA    0x0001
#define M_UD            0x0002
#define M_CLK        0x0004
#define Set_IOA_Bit(x)        (*P_IOA_Data = *P_IOA_Buffer | x)                //置高
#define    Clear_IOA_Bit(x)    (*P_IOA_Data = *P_IOA_Buffer & ~x)            //置低
//====================================================================
// ----Function:    void Init_AD9851(void)
// -Description: 初始化与AD9851连接的IO口                                               
// --Parameters:    无
// ------Return:    无
// -------Notes:    不影响其他IO口
//====================================================================
void Init_AD9851(void)
{
    *P_IOA_Dir |= (M_DATA + M_UD + M_CLK);
    *P_IOA_Attrib |= (M_DATA + M_UD + M_CLK);
    *P_IOA_Data &= ~(M_DATA + M_UD + M_CLK);
}
//====================================================================
// ----Function: void Write_AD9851(void)
// -Description: 向AD9851写入频率控制字,命令控制字和相位控制字                                               
// --Parameters:    无
// ------Return:    无
// -------Notes:    无
//====================================================================
void Write_AD9851(void)
{
    unsigned long int mask = 0x0001;
    unsigned int i;
    Clear_IOA_Bit(M_UD);    //M_UD置低
    //送32位频率控制字
    for(i = 0;i < 32;i++)
    {
        Clear_IOA_Bit(M_CLK); //M_CLK置低
        if(Freq_Ctrl_Word & mask)
        {
            Set_IOA_Bit(M_DATA);
        }
        else
        {
            Clear_IOA_Bit(M_DATA);
        }
        Set_IOA_Bit(M_CLK);
        mask = mask << 1;
    }
    //送3位的命令控制字
    mask = 0x0001;
    for(i = 0;i < 3;i++)
    {
        Clear_IOA_Bit(M_CLK); //M_CLK置低
        if(Order_Ctrl_Word & mask)
        {
            Set_IOA_Bit(M_DATA);
        }
        else
        {
            Clear_IOA_Bit(M_DATA);
        }
        Set_IOA_Bit(M_CLK);
        mask = mask << 1;
    }
    //送5位相位控制字
    mask = 0x0001;
    for(i = 0;i < 5;i++)
    {
        Clear_IOA_Bit(M_CLK); //M_CLK置低
        if(Phase_Ctrl_Word & mask)
        {
            Set_IOA_Bit(M_DATA);
        }
        else
        {
            Clear_IOA_Bit(M_DATA);
        }
        Set_IOA_Bit(M_CLK);
        mask = mask << 1;
    }
    Set_IOA_Bit(M_UD);    //M_UD置高 ,产生上升沿 ,频率更新使能,输出有效
}
//====================================================================                         
// End of AD9851.c
//====================================================================

文章评论1条评论)

登录后参与讨论

用户461316 2008-8-23 12:33

是DDS的驱动
相关推荐阅读
用户461316 2009-08-17 17:57
Zigbee星型网络组网程序段
最近一直在做Zigbee的星型网络的组网试验,由于时间的原因,现在只是在最高的应用层上来编写程序。即协议栈的程序是2430的开发商(无限龙)编写的,我只是调用相应的函数来完成组网的,星型网络组网部分的...
用户461316 2009-08-17 17:14
VB6的标题栏使用上真彩色图标
模块 ModIcon.Bas 代码: Option Explicit Private Declare Function DrawIcon Lib "user32" (ByVal hdc As Long...
用户461316 2009-08-17 16:58
AppendToLog一个API方式存取日志文件的模块
'**************************************' 模块名称: AppendToLog' 功能描述:一个很不错的日志文件写入模块,不同于'     open/print/...
用户461316 2009-08-17 16:57
(VB自定义函数)去除字符串中的空格
'去除字符串中的空格(方法一)Public Function DelBlank(SearchString As String)   DelBlank = Replace(SearchString, C...
用户461316 2009-08-17 16:56
(VB自定义函数)对任意输入的汉字,可以得到它的拼音的第一个字母
调用方法:Command1.Caption = getHzPy("你")'//函数入口为汉字串,返回值为该汉字的第一个字母Public Function getHzPy(hzStr As String...
用户461316 2009-08-17 16:54
VB_代码执行速度测试
'**************************************'Windows API/Global Declarations for :[ '     A Simple] code ...
我要评论
1
3
关闭 站长推荐上一条 /2 下一条