|
这两天看了ad9951资料,写了点程序想产生频率为1520000Hz的正弦波,可看不到波形,硬件电路是没有问题的,别人写的能跑。请帮忙看看是什么问题。
void run(void)
{
CLR_IOUPDATE;
delay(100);
SET_IOUPDATE;
}
/*****************************************************************************
函数名: write_a_byte
功能描述: 通过串口写一个字节,MSB first,上升延有效
*****************************************************************************/
void write_a_byte(u08 w_data)
{
u08 i;
for(i=0;i<8;i++)
{
if(w_data & 0x80)SET_SDIO;
else CLR_SDIO;
w_data <<= 1;
SET_DDSSCLK;
CLR_DDSSCLK;
}
}
/*****************************************************************************
函数名: write_CSR
功能描述: 写CSR寄存器:
*****************************************************************************/
void write_CFR1(void)//u08 w_data1,u08 w_data2,u08 w_data3,u08 w_data4)//h~l
{
CLR_SDIO;
CLR_DDSCS;
write_a_byte(0x00); //write address 0. CFR1's address is 0.
write_a_byte(0x07); //msb first
write_a_byte(0x80);
write_a_byte(0x37);
write_a_byte(0x22);
SET_DDSCS;
SET_SDIO;
}
void write_CFR2(void)//u08 w_data1,u08 w_data2)
{
CLR_SDIO;
CLR_DDSCS;
write_a_byte(0x01); //write address 1. FR1's address is 0x01
write_a_byte(0x00);
write_a_byte(0x04);
write_a_byte(0x63);
SET_DDSCS;
SET_SDIO;
}
void write_ASF(u16 ASF_Word) //Amplitude Scale Factor Register
{
CLR_SDIO;
CLR_DDSCS;
write_a_byte(0x02);
write_a_byte(((unsigned char *)(&ASF_Word))[1]);
write_a_byte(((unsigned char *)(&ASF_Word))[0]);
SET_DDSCS;
SET_SDIO;
}
void write_ARR(u08 w_data1) //Amplitude Ramp Rate Register
{
CLR_SDIO;
CLR_DDSCS;
write_a_byte(0x03);
write_a_byte(w_data1);
SET_DDSCS;
SET_SDIO;
}
void write_FTW0(u32 F_word) //Channel Frequency Tuning Word (FTW0)
{
CLR_SDIO;
CLR_DDSCS;
write_a_byte(0x04);
write_a_byte(((unsigned char *)(&F_word))[3]);
write_a_byte(((unsigned char *)(&F_word))[2]);
write_a_byte(((unsigned char *)(&F_word))[1]);
write_a_byte(((unsigned char *)(&F_word))[0]);
SET_DDSCS;
SET_SDIO;
}
void write_POW0(u16 P_word) //Channel Phase1 Offset Word (POW0) (0x05)
{
CLR_SDIO;
CLR_DDSCS;
write_a_byte(0x05);
write_a_byte(((unsigned char *)(&P_word))[1]&0x3F);
write_a_byte((((unsigned char *)(&P_word))[0]));
SET_DDSCS;
SET_SDIO;
}
#define PLL_DIV 12
#define systemp_frequency (10*1000000*PLL_DIV)
void set_frequency(u32 f)
{
unsigned long int temp;
temp=(unsigned long int)f*(0xFFFFFFFF/(float)systemp_frequency+1.0/systemp_frequency);
write_FTW0(temp);
}
void set_Amplitude(u16 amp)
{
unsigned long int temp;
temp=(unsigned long int)amp*(0x3fff/1.8);
write_ASF(temp);
}
void AD9951_init(void)
{
u16 i;
// DDS_DDR = 0xff;
CLR_DDSRESET;
for(i=0;i<10000;i++);
SET_DDSCS;
CLR_DDSSCLK;
SET_SDIO;
SET_DDSRESET;
for(i=0;i<10000;i++);
CLR_DDSRESET;
for(i=0;i<100;i++);
}
void main()
{
sei();
AvrInit();
AD9951_init();
CLR_DDSPD;
CLR_DDSCS;
write_CFR1();
write_CFR2();
SET_DDSCS;
run();
for(;;)
{
CLR_DDSCS;
set_frequency(152000000);
set_Amplitude(1);
SET_DDSCS;
run();
}
} |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|