📄 ad9856.c
字号:
#include "msp430x14x.h" // Standard Equations
#include "ad9856.h"
#include "bitmat.h"
//BIT DEFINE
#define LD_BIT BIT0//P1.0
#define CS_BIT BIT7//P2.7
#define SDIO_BIT BIT6//P2.6
#define SCLK_BIT BIT5//P2.5
#define TXEN_BIT BIT4//P2.4
#define PS2_BIT BIT3//P2.3
#define PS1_BIT BIT2//P2.2
#define RESET_BIT BIT1//P2.1
#define PD_BIT BIT0//P2.0
#define LI_BIT BIT5//P2.5
#define LQ_BIT BIT6//P2.6
//OUT DEFINE
#define LD_OUT P1OUT
#define CS_OUT P2OUT
#define SDIO_OUT P2OUT
#define SCLK_OUT P2OUT
#define TXEN_OUT P2OUT
#define PS2_OUT P2OUT
#define PS1_OUT P2OUT
#define RESET_OUT P2OUT
#define PD_OUT P2OUT
#define LI_OUT P2OUT
#define LQ_OUT P2OUT
//DIR DEFINE
#define LD_DIR P1DIR
#define CS_DIR P2DIR
#define SDIO_DIR P2DIR
#define SCLK_DIR P2DIR
#define TXEN_DIR P2DIR
#define PS2_DIR P2DIR
#define PS1_DIR P2DIR
#define RESET_DIR P2DIR
#define PD_DIR P2DIR
#define LI_DIR P2DIR
#define LQ_DIR P2DIR
//IN DEFINE
#define LD_IN P1IN
#define CS_IN P2IN
#define SDIO_IN P2IN
#define SCLK_IN P2IN
#define TXEN_IN P2IN
#define PS2_IN P2IN
#define PS1_IN P2IN
#define RESET_IN P2IN
#define PD_IN P2IN
#define LI_IN P2IN
#define LQ_IN P2IN
#define power_up_8320() sbi(PD_DIR,PD_BIT);sbi(PD_OUT,PD_BIT)
#define sel_ps0() cbi(PS1_OUT,PS1_BIT);cbi(PS2_OUT,PS2_BIT)
#define sel_ps1() cbi(PS1_OUT,PS1_BIT);sbi(PS2_OUT,PS2_BIT)
#define sel_ps2() sbi(PS1_OUT,PS1_BIT);cbi(PS2_OUT,PS2_BIT)
#define sel_ps3() sbi(PS1_OUT,PS1_BIT);sbi(PS2_OUT,PS2_BIT)
char I_data = 0xff,Q_data = 0x93;
static char cfg_word[26] =
{
0x20,0xd2,//16倍频 = 128MHz
//0x06,0x12,//3倍频 = 60MHz
0x66,0x66,0x66,0x15,//128 / 10.7
//0xda,0x40,0xa7,0x2d,//60 / 10.7
//0xab,0xaa,0xaa,0x2a,//120 / 20
0x80,0x00,//内插率4 X 32 X 2,Fiq = 500k
0x66,0x66,0x66,0x15,//128 / 10.7
0x82,0x00,//内插率4 X 32 X 2,Fiq = 500k
0x66,0x66,0x66,0x15,//128 / 10.7
0x82,0x00,//内插率4 X 32 X 2,Fiq = 500k
0x66,0x66,0x66,0x15,//128 / 10.7
0x80,0x00,//内插率4 X 32 X 2,Fiq = 500k
};
/*************************************************/
//写一个字节到AD9856
/*************************************************/
void AD9856WriteByte(char address, char *data,int lengh)
{
unsigned int ByteCounter,BitCounter;
address &= ~0xe0;
address += (((lengh - 1) & 0x03) << 5);
cbi(CS_OUT,CS_BIT);
for(BitCounter = 8;BitCounter;BitCounter --)
{
cbi(SCLK_OUT,SCLK_BIT);
if(address & (1 << (BitCounter - 1)))
{
sbi(SDIO_OUT,SDIO_BIT);
}
else
{
cbi(SDIO_OUT,SDIO_BIT);
}
sbi(SCLK_OUT,SCLK_BIT);
}
for(ByteCounter = 0;ByteCounter < lengh;ByteCounter ++)
{
for(BitCounter = 8;BitCounter;BitCounter --)
{
cbi(SCLK_OUT,SCLK_BIT);
if(data[ByteCounter] & (1 << (BitCounter - 1)))
{
sbi(SDIO_OUT,SDIO_BIT);
}
else
{
cbi(SDIO_OUT,SDIO_BIT);
}
sbi(SCLK_OUT,SCLK_BIT);
}
}
sbi(CS_OUT,CS_BIT);
}
void change_mode(char mode)
{
if(mode)//Single-tone Mode
{
cfg_word[1] |= 0x10;
}
else
{
cfg_word[1] &= ~0x10;
}
AD9856WriteByte(1,cfg_word + 1,1);
}
void set_in_rate(char rate)
{
cfg_word[6] &= 0x03;
cfg_word[6] |= rate << 2;
AD9856WriteByte(6,cfg_word + 6,1);
}
void delay(void)
{
char i;
for(i=0;i<200;i++);
}
void write_iq(char data_i,char data_q)
{
P1DIR = 0xff;
cbi(LI_OUT,LI_BIT);
P1OUT = data_i;
sbi(LI_OUT,LI_BIT);
cbi(LI_OUT,LI_BIT);
cbi(LQ_OUT,LQ_BIT);
P1OUT = data_q;
sbi(LQ_OUT,LQ_BIT);
cbi(LQ_OUT,LQ_BIT);
sbi(TXEN_OUT,TXEN_BIT);
//delay();
//cbi(TXEN_OUT,TXEN_BIT);
}
/*************************************************/
//初始化AD9856
/*************************************************/
void init_ad9856(void)
{
char i;
sbi(PS1_DIR,PS1_BIT);
sbi(PS2_DIR,PS2_BIT);
cbi(PS1_OUT,PS1_BIT);
cbi(PS2_OUT,PS2_BIT);
sbi(SDIO_DIR,SDIO_BIT);
sbi(CS_DIR,CS_BIT);
sbi(SCLK_DIR,SCLK_BIT);
sbi(TXEN_DIR,TXEN_BIT);
cbi(TXEN_OUT,TXEN_BIT);
sbi(LD_DIR,LD_BIT);
P1DIR = 0xff;
sbi(RESET_DIR,RESET_BIT);
sbi(RESET_OUT,RESET_BIT);
for(i = 0;i < 200;i ++)
{
delay();
}
cbi(RESET_OUT,RESET_BIT);
for(i = 0;i < 26;i ++)
{
AD9856WriteByte(i,cfg_word + i,1);
}
power_up_8320();
change_mode(0);//~ Single-tone Mode
write_iq(0xff,0x3f);
while(1)
{
//write_iq(0xff,0x3f);
sel_ps0();
delay();
sel_ps1();
delay();
}
sel_ps2();
sel_ps3();
sel_ps0();
}
/*************************************************/
//关闭AD9856
/*************************************************/
void un_init_ad9856(void)
{
cfg_word[1] |= 0x20;
AD9856WriteByte(1,cfg_word + 1,1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -