?? ad9854.c
字號:
#include <reg52.h>
#include <intrins.h>
#include <string.h>
#define uchar unsigned char
#define uint unsigned int
sbit RESET=P3^4; // master reset of AD9854
sbit SPSEL=P3^5; // serial/parrelel select pin
sbit FDATA=P2^7; // multi-function pin for different modes
sbit ORAMP=P2^6; // output shape pin
sbit WRITE=P3^6; // write signal
sbit READ=P3^7; // read signal
uchar data0;
//延時程序
void AD9854_delay(int time)
{
int i;
for(i = 0; i < time; i++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
//復位
void AD9854_reset(void)
{
reset=1;
AD9854_delay(5000);
reset=0;
}
//寫一個字節
void AD9854_ParallelSendByte(uchar addr,uchar data1)
{
P2=addr;
P0=data1;
WR_LOW=0;
WR_LOW=1;
}
uchar AD9854_ParallelReadByte(uchar addr)
{
uchar result;
RD_LOW=1;
P1=0xff;
P1 = (addr & 0x3f);
RD_LOW=0;
result = P2;
RD_LOW=1;
return result;
}
//相位寄存器1控制字
void AD9854_ParallelSetPhase1(uchar *phase)
{
data0=*phase;
AD9854_ParallelSendByte(0x00,data0);
AD9854_delay(5);
data0=*(phase+1);
AD9854_ParallelSendByte(0x01,data0);
AD9854_delay(5);
}
//相位寄存器2控制字
void AD9854_ParallelSetPhase2(uchar *phase)
{
data0=*phase;
AD9854_ParallelSendByte(0x02, data0);
AD9854_delay(5);
data0=*(phase+1);
AD9854_ParallelSendByte(0x03, data0);
AD9854_delay(5);
}
//頻率寄存器1控制字
void AD9854_ParallelSetFreq1(uchar *freq)
{
uchar i,freq_addr;
freq_addr=0x04;
for(i=0;i<6;i++)
{
data0=*(freq+i);
AD9854_ParallelSendByte(freq_addr+i,data0);
AD9854_delay(5);
}
}
//頻率寄存器2控制字
void AD9854_ParallelSetFreq2(uchar *freq)
{
uchar i,freq_addr,data0;
freq_addr=0x0A;
for(i=0;i<6;i++)
{
data0=*(freq+i);
AD9854_ParallelSendByte(freq_addr+i, data0);
AD9854_delay(5);
}
}
//DELTA Frequency Word
void AD9854_ParallelSetDFW(uchar *delta)
{
uchar i,delta_addr;
delta_addr=0x10;
for(i=0;i<6;i++)
{
data0=*(delta+i);
AD9854_ParallelSendByte(delta_addr, data0);
AD9854_delay(5);
}
}
//內部時鐘寄存器控制字
void AD9854_ParallelSetUDClk(uchar *uclk)
{
uchar i,uclk_addr;
uclk_addr=0x16;
for(i=0;i<4;i++)
{
data0=*(uclk+i);
AD9854_ParallelSendByte(uclk_addr,data0);
AD9854_delay(5);
}
}
//斜率寄存器控制字
void AD9854_ParallelSetRamp(uchar *ramp)
{
uchar i,ramp_addr;
ramp_addr=0x1A;
for(i=0;i<3;i++)
{
data0=*(ramp+i);
AD9854_ParallelSendByte(ramp_addr,data0);
AD9854_delay(5);
}
}
//特殊功能寄存器
void AD9854_ParallelSetSpecialWord(uchar *SWord)
{
uchar i,Special_addr;
Special_addr=0x1D;
for(i=0;i<4;i++)
{
data0=*(SWord+i);
AD9854_ParallelSendByte(Special_addr,data0);
AD9854_delay(5);
}
}
//輸出振幅寄存器控制字
void AD9854_ParallelSetOutkey(bit mark,uchar *key)
{
uchar i,Outkey_addr;
if(mark==0)
Outkey_addr=0x21; //輸出I振幅寄存器地址
else
Outkey_addr=0x23; //輸出Q振幅寄存器地址
for(i=0;i<2;i++)
{
data0=*(key+i);
AD9854_ParallelSendByte(Outkey_addr,data0);
AD9854_delay(5);
}
}
//輸出振幅斜率寄存器控制字
void ParallelSetOutkeyRamp(uchar Key_ramp)
{
AD9854_ParallelSendByte(0x25, Key_ramp);
AD9854_delay(5);
}
//QDAC
void AD9854_ParallelSetQDAC(uchar *QDAC)
{
uchar i,QDAC_addr;
QDAC_addr=0x26;
for(i=0;i<2;i++)
{
data0=*(QDAC+i);
AD9854_ParallelSendByte(QDAC_addr, data0);
AD9854_delay(5);
}
}
//初始化
void Init9854(void)
{
AD9854_reset();
WR_LOW=1;
RD_LOW=1;
}
void main(void)
{
uchar udclk[4]={0x00,0x00,0x09,0xc3};
uchar mode1[4]={0x10,0x44,0x01,0x00};
uchar frequency1[6]={0x05,0x1E,0xB8,0x51,0xEB,0x85};
uchar shape_key[2]={0x06,0x00};
uchar *data4;
Init9854();
/* uchar i;
P0=0x00;
Init9854();
AD9854_ParallelSendByte(0x04,0xAA);
AD9854_IOUpdate();
P0=AD9854_ParallelReadByte(0x04); */
while(1)
{
data4=udclk;
AD9854_ParallelSetUDClk(data4);
data4=mode1;
AD9854_ParallelSetSpecialWord(data4);
data4=frequency1;
AD9854_ParallelSetFreq1(data4);
AD9854_delay(500);
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -