搜索
bottom↓
回复: 30

方便移植的AD9851_DDS程序(基于msp430)

[复制链接]

出0入0汤圆

发表于 2009-6-24 22:52:46 | 显示全部楼层 |阅读模式
上午调通24L01无线模块,下午写了这个DDS程序,原本就非常简单,更改了一下,使移植到msp430上更简单。
为方便各位使用,增加了一些注释,也为日后方便自己。
详细请看程序注释,改天有空把24L01无线模块也整理发上来,欢迎拍砖。
/***********************************************************************
*           ADI's AD9851 DDS  driver
*                 READ THIS FIRST:
* These functions was implemented on TI‘s msp430f5438,but donot
* limitted to it,since it can be easily ports to other msp430 MCUs
* by just modifing the macros ahead accroading to your connections.
* You should use ad9851 by calling:  
*                    1、Init_AD9851();
*                    2、Set_DDS(phase,frequency,1/0) or Set_AD9851
*                    3、reset、power up/down functions if needed ...
* My compiler is IAR for msp430 V4.11b,
* below is a demo application:
* ************************
* #include<msp430x54x.h>
* #include"ad9851.h"
* int main( void )
* {
*   // Stop watchdog timer to prevent time out reset
*   WDTCTL = WDTPW + WDTHOLD;
*   Init_AD9851();
*   while(1){
*      for(unsigned char i=0;i<40;i++)
*           Set_DDS(22.5,10,1);
*     }
* }
* ************************
* I've tried to write this program as portable and flexible as possible,
* so you may find it's easy to pick it up.
*
* Author:     ZhouQiang
* University: UESTC
* Email:       zhouq3132@gmail.com
*************************************************************************/
/*****************************************
*          function prototype            *
******************************************/
void AD9851_RST();
void AD9851_PU();
void AD9851_PD();
void Init_AD9851();
void Set_AD9851(unsigned char cfg_byte,unsigned long freq_b);
void Set_DDS(float phase,float frequency,unsigned char is_m);
/*****************************************
*  Macros needed to modify when ports
******************************************/
#include<msp430x54x.h>
#define D_PORT P8OUT
#define D_DIR  P8DIR
#define D_BITS 0xFF
#define WCLK_PORT P5OUT
#define WCLK_DIR  P5DIR
#define WCLK_BIT  BIT6
#define FQUD_PORT P5OUT
#define FQUD_DIR  P5DIR
#define FQUD_BIT  BIT7
#define RST_PORT  P7OUT
#define RST_DIR   P7DIR
#define RST_BIT   BIT3
/**************************************
*    macros below is no need to       *
* modify when ports to other msp430   *
***************************************/
#define Init_AD9851_Port() \
  D_DIR|=D_BITS;\
    WCLK_DIR|=WCLK_BIT;\
      FQUD_DIR|=FQUD_BIT;\
        RST_DIR|=RST_BIT
#define WCLK_HIGH  WCLK_PORT|=WCLK_BIT
#define WCLK_LOW   WCLK_PORT&=~WCLK_BIT
#define FQUD_HIGH  FQUD_PORT|=FQUD_BIT
#define FQUD_LOW   FQUD_PORT&=~FQUD_BIT
#define RST_HIGH  RST_PORT|=RST_BIT
#define RST_LOW   RST_PORT&=~RST_BIT
/****************************
*        reset ad9851       *
*****************************/
void AD9851_RST()
{
  RST_HIGH;
  _NOP();
  _NOP();
  _NOP();
  RST_LOW;
  _NOP();
}
/****************************
*    power up function      *
*****************************/
void AD9851_PU()
{
  FQUD_LOW;
  D_PORT=0x00;
  WCLK_HIGH;
  WCLK_LOW;
  FQUD_HIGH;
  FQUD_LOW;
}
/****************************
*     power down function   *
*****************************/
void AD9851_PD()
{
  FQUD_LOW;
  D_PORT=0x40;
  WCLK_HIGH;
  WCLK_LOW;
  FQUD_HIGH;
  FQUD_LOW;
}
/****************************
*     initialize ad9851     *
*****************************/
void Init_AD9851()
{
  Init_AD9851_Port();
  AD9851_RST();
  WCLK_LOW;
  FQUD_HIGH;
}
/***************************************************************
*            setup ad9851 parameters                           *
*Parameters:                                                  *
*cfg_byte:  control byte 0(W0)                                 *
*freq_b:    the four frequency control bytes(W1W2W3W4)        *
*Return:   no                                                 *
****************************************************************/
void Set_AD9851(unsigned char cfg_byte,unsigned long freq_b)
{
  FQUD_LOW;
  D_PORT=cfg_byte;
  WCLK_HIGH;
  WCLK_LOW;
  for(int i=24;i>=0;i=i-8)
  {
    D_PORT=(unsigned char)(freq_b>>i);
    WCLK_HIGH;
    WCLK_LOW;
  }
  FQUD_HIGH;
}
/***************************************************************
*            setup ad9851 parameters directly                  *
*function:  configure ad9851 parameters easily                 *
*Parameters:                                                  *
*phase:  float value and must be n*360/32 (n<=32)              *
*freq_m: frequnecy in float value and MHZ unit                 *
*is_m:  MHZ or HZ unit                                         *
*Return:   no                                                 *
****************************************************************/
void Set_DDS(float phase,float frequency,unsigned char is_m)
{
  unsigned char ph=((unsigned char)(phase/11.25)<<3)+0x01;
  unsigned long fre;
  if(is_m==1)  
    fre=(unsigned long)(23860929.422*frequency);
  else  
    fre=(unsigned long)(22.755556*frequency);
  Set_AD9851(ph,fre);
}
/************  end  *********************/

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入4汤圆

发表于 2009-7-12 12:36:08 | 显示全部楼层
收藏,可能有用。呵呵

出0入0汤圆

发表于 2009-7-15 11:11:36 | 显示全部楼层
谢谢先收藏了

出0入0汤圆

发表于 2010-3-24 19:36:04 | 显示全部楼层
Thanks

出0入0汤圆

发表于 2010-4-13 12:28:00 | 显示全部楼层
谢谢!!

出0入0汤圆

发表于 2010-4-26 13:04:28 | 显示全部楼层
不错,MARK~

出0入0汤圆

发表于 2010-7-17 18:22:43 | 显示全部楼层
哈哈,刚好用上了

出0入0汤圆

发表于 2010-7-17 19:14:31 | 显示全部楼层
谢谢LZ咯!!

出0入0汤圆

发表于 2010-8-3 09:58:46 | 显示全部楼层
谢谢楼主,正在做DDS调频

出0入0汤圆

发表于 2010-8-3 10:16:28 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-8-12 12:30:33 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-8-18 15:06:35 | 显示全部楼层
很好的东东呀  先占着,以后用的着

出0入0汤圆

发表于 2010-9-11 21:04:13 | 显示全部楼层
mark!!!

出0入0汤圆

发表于 2010-10-27 22:31:48 | 显示全部楼层
mark!!!

出0入0汤圆

发表于 2010-11-16 23:59:30 | 显示全部楼层
请问楼主有用msp430的spi来驱动这个24L01吗

出0入0汤圆

发表于 2010-12-5 23:19:05 | 显示全部楼层
谢谢分享~

出0入0汤圆

发表于 2011-1-1 12:04:10 | 显示全部楼层
ding UESTC

出0入0汤圆

发表于 2011-3-28 15:36:23 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-3-29 15:58:19 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-8-15 17:18:13 | 显示全部楼层
感谢LZ无私奉献,我也用的MSP430F5438,希望能和您交流交流,QQ:506561997,能加QQ交流哈技术问题吗

出0入0汤圆

发表于 2011-8-24 18:58:34 | 显示全部楼层
*            setup ad9851 parameters directly                  *
*function:  configure ad9851 parameters easily                 *
*Parameters:                                                  *
*phase:  float value and must be n*360/32 (n<=32)              *  
*freq_m: frequnecy in float value and MHZ unit                 *
*is_m:  MHZ or HZ unit                                         *
*Return:   no                                                



请问phase指的是相位吗?这个芯片好像不可以设置相位吧?freq_m的单位是MHz,is_m的单位是MHZ或者HZ???这个怎么理解呢?楼主能否解答一二

出0入0汤圆

发表于 2011-8-24 19:00:45 | 显示全部楼层
记号

出0入0汤圆

发表于 2011-8-24 20:13:19 | 显示全部楼层
Thanks

出0入0汤圆

发表于 2011-8-25 22:36:35 | 显示全部楼层
very good

出0入0汤圆

发表于 2011-8-27 18:31:31 | 显示全部楼层
真是好东西,用得着啊。马克一下,顺便感谢楼主分享。

出0入0汤圆

发表于 2011-8-27 19:10:00 | 显示全部楼层
马克一下,谢谢楼主分享程序!

出0入0汤圆

发表于 2011-10-13 16:52:40 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-7-15 09:11:51 | 显示全部楼层
连注释都是英文的。。楼主给力

出0入0汤圆

发表于 2012-10-24 14:13:54 | 显示全部楼层
zhankyou !!!!

出0入0汤圆

发表于 2012-10-25 23:53:51 | 显示全部楼层
mark,谢楼主!

出0入0汤圆

发表于 2013-6-4 09:32:20 | 显示全部楼层
楼主你好,我用 的ad9959的sync_clk无时钟输出,是怎么回事,能帮解决下吗?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-22 19:34

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表