打印

AD9851的驱动程序

[复制链接]
1830|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xnwxq|  楼主 | 2009-8-23 18:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
//====================================================================
//                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
//====================================================================

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:我们都是风雨中的孩子,手牵着手才不会跌倒

162

主题

294

帖子

1

粉丝