最近在调试AD9854,弄了好多天都不行,有哪位大神进来帮忙看看吗?非常感谢

2019-07-20 14:26发布

int main(void)
{
//  
//         double frq_t = 30000000;
//        u16 fuzhi = 4095;
  Stm32_Clock_Init(336,8,2,7);
  delay_init(168);
  AD9854_Init();
  ad9854_initBPSK();
  chanshengBPSK(1000,8150,10000000);
//                AD9854_IOinit();
//        AD9854_Init(0x00);
//        AD9854_Sin(frq_t, ad9854_freq, fuzhi);
//        DDS_SP=1;
  while(1)
  {
     FDATA_H;
    delay_us(2);
     FDATA_L;
    delay_us(2);
  }
}


#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "ad9854.h"

uchar kongzhizi[6];
void AD9854_Init(void)
{
        RCC->AHB1ENR|=1<<2;
        RCC->AHB1ENR|=1<<5;
        RCC->AHB1ENR|=1<<6;
        GPIO_Set(GPIOC,PIN1|PIN2|PIN3|PIN4,GPIO_MODE_OUT,0,0,GPIO_PUPD_PU);
        GPIO_Set(GPIOF,PIN0|PIN1|PIN2|PIN3|PIN4|PIN5,GPIO_MODE_OUT,0,0,GPIO_PUPD_PU);
        GPIO_Set(GPIOG,PIN0|PIN1|PIN2|PIN3|PIN4|PIN5|PIN6|PIN7,GPIO_MODE_OUT,0,0,GPIO_PUPD_PU);
}


void write_byte(uchar addr,uchar data)
{
  AD9854_addr = (addr&0x3f)|(GPIOF->ODR & 0XC0);
  AD9854_data = data;
  WR_L;
  WR_H;
}
void ad9854_initBPSK(void)
{
//  P4DIR |= 0X3F;
//  P2DIR |= 0XFF;
//  P8DIR |= 0XFF;

  WR_H;
  RD_H;
  UDCLK_L;
  RESET_H;
  RESET_L;

  write_byte(0x1d,0x10);
  write_byte(0x1e,4);
  write_byte(0x1f,0x08);
  write_byte(0x20,0x60);

  UDCLK_L;
  UDCLK_L;
}
void freq_zhuanhuan(ulong data)
{
  uint i=0;
  ulong Freq=0;
  ulong temp=1407375;               //分频因子=2^N/时钟频率/倍频=2^48/50000000/4
  uchar adress=0x04;

  uchar array_freq[4];              //把频率分为4个字节
  array_freq[0]=(uchar)(data);      
  array_freq[1]=(uchar)(data>>8);
  array_freq[2]=(uchar)(data>>16);
  array_freq[3]=(uchar)(data>>24);

  Freq += temp*array_freq[0];       //频率低8位二进制计算  
  kongzhizi[0] = Freq;              //低8位频率控制字
  Freq>>=8;                         //清除低8位

  Freq += temp*array_freq[1];       //频率第8--16位二进制计算
  kongzhizi[1] = Freq;
  Freq>>=8;                         //清除第8--16位

  Freq += temp*array_freq[2];       //频率第16--24位二进制计算
  kongzhizi[2] = Freq;
  Freq>>=8;

  Freq += temp*array_freq[3];       //频率第24--32位二进制计算
  kongzhizi[3] = Freq;
  Freq>>=8;

  kongzhizi[4] = Freq;
  kongzhizi[5] = Freq>>8;
  for(i=6;i>0;)
  {
    write_byte(adress++,kongzhizi[--i]);
  }
}

void chanshengBPSK(uint phase1,uint phase2,ulong frequency)
{
  uint fudu=4000;


  write_byte(0x00,phase1>>8);
  write_byte(0x01,(uchar)(phase1&0xff));
  write_byte(0x02,phase2>>8);
  write_byte(0x03,(uchar)(phase2&0xff));

  freq_zhuanhuan(frequency);


  write_byte(0x21,fudu>>8);
  write_byte(0x22,(uchar)(fudu&0xff));
  write_byte(0x23,fudu>>8);
  write_byte(0x24,(uchar)(fudu&0xff));

  UDCLK_H;
  UDCLK_L;
}


#ifndef __AD9854_H
#define __AD9854_H
#include "sys.h"

#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
//#define GPIOBL_OUT() {GPIOG->ODR&=0X0000;GPIOG->ODR|=0XFFFF;}
////#define GPIOBH_OUT() {GPIOB->CRH&=0X00000000;GPIOB->CRH|=0X33333333;}
#define   AD9854_data   GPIOG->ODR
#define   AD9854_addr   GPIOF->ODR

#define   RESET_H       GPIOC->ODR|=1<<1
#define   RESET_L       GPIOC->ODR&=~(1<<1)

#define   UDCLK_H       GPIOC->ODR|=1<<2
#define   UDCLK_L       GPIOC->ODR&=~(1<<2)

#define   WR_H          GPIOC->ODR|=1<<3   
#define   WR_L          GPIOC->ODR&=~(1<<3)  

#define   RD_H          GPIOC->ODR|=1<<4   //AD9854读使能,低有效
#define   RD_L          GPIOC->ODR&=~(1<<4)   //AD9854读使能,低有效

#define   FDATA_H       GPIOC->ODR|=1<<5  
#define   FDATA_L       GPIOC->ODR&=~(1<<5)


void AD9854_Init(void);
//void AD9854_Send(u8 addr, u8 data);
void write_byte(uchar addr,uchar data);
void ad9854_initBPSK(void);
void freq_zhuanhuan(ulong data);
void chanshengBPSK(uint phase1,uint phase2,ulong frequency);

#endif

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。