原子哥,我在做一个以AD9850为核心的信号源
驱动如下:
void AD9850_Write_Serial(unsigned char W0,unsigned long freq)
{
unsigned char i,wdata ;
unsigned long y ;
y = (unsigned long )268435456.0/AD9850_SYSTEM_COLCK*freq ;
wdata = y>>0 ; //写w4
for(i=0 ;i<8 ;i++)
{
if(wdata & 0x01)
AD9850_DATA_Write_1 ;
else
AD9850_DATA_Write_0 ;
AD9850_WCLK_SET ;
wdata >>= 1 ;
AD9850_WCLK_CLR ;
}
wdata = y>>8 ; //写w3
for(i=0 ;i<8 ;i++)
{
if(wdata & 0x01)
AD9850_DATA_Write_1 ;
else
AD9850_DATA_Write_0 ;
AD9850_WCLK_SET ;
wdata >>= 1 ;
AD9850_WCLK_CLR ;
}
wdata = y>>16 ; //写w2
for(i=0 ;i<8 ;i++)
{
if(wdata & 0x01)
AD9850_DATA_Write_1 ;
else
AD9850_DATA_Write_0 ;
AD9850_WCLK_SET ;
wdata >>= 1 ;
AD9850_WCLK_CLR ;
}
wdata = y>>24 ; //写w1
for(i=0 ;i<8 ;i++)
{
if(wdata & 0x01)
AD9850_DATA_Write_1 ;
else
AD9850_DATA_Write_0 ;
AD9850_WCLK_SET ;
wdata >>= 1 ;
AD9850_WCLK_CLR ;
}
wdata = W0 ; //写w0
for(i=0 ;i<8 ;i++)
{
if(wdata & 0x01)
AD9850_DATA_Write_1 ;
else
AD9850_DATA_Write_0 ;
AD9850_WCLK_SET ;
wdata >>= 1 ;
AD9850_WCLK_CLR ;
}
AD9850_FQUD_SET ; //移入使能
AD9850_Delay(0xFFFF) ;
AD9850_FQUD_CLR ;
}
#endif /* MODE_SERIAL */
-----------------------------------------------------------------------
void Init_AD9850(void)
{
#ifdef MODE_SEIAL //串行模式
// GPIO_InitTypeDef GPIO_InitStructure ;
// GPIO_InitStructure.GPIO_Pin = AD9850_WCLK | AD9850_FQUD | AD9850_RST | AD9850_DATA ;
// GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz ;
// GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
// GPIO_Init(AD9850_CONTROL_PORT ,&GPIO_InitStructure) ;
RCC->APB2ENR|=1<<2; //使能PORTA时钟
GPIOA->CRL&=0X000000FF;
GPIOA->CRL|=0X33333300;//PA2 , 3 , 4, 5 推挽输出
GPIOA->ODR|=1<<6;
GPIOA->ODR&=~(1<<7);
AD9850_Reset_Sreial() ;
#endif
#ifdef MODE_PARALLEL //并行模式
GPIO_InitTypeDef GPIO_InitStructure ;
GPIO_InitStructure.GPIO_Pin = AD9850_WCLK | AD9850_FQUD | AD9850_RST ;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz ;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(AD9850_CONTROL_PORT ,&GPIO_InitStructure) ;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All ;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz ;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(AD9850_DATA_PORT ,&GPIO_InitStructure) ;
AD9850_Reset_Parallel() ;
#endif
}
我发现AD9850的输出正弦波形(波形似乎下半个周期被翻上来了)而且频率相差很大,听说GPIO口的输出电平是TTL还是COMS对输出有很大影响,是不是这个问题呀?
|