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
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>