[mw_shl_code=c,true]/*------------------------串行模式-------------------------*/
#ifdef MODE_SEIAL
/********************************************
函数名称:AD9850_Reset_Sreial
功 能:在串行模式】下复位AD9850
参 数:无
返回值 :无
*********************************************/
void AD9850_Reset_Sreial(void)
{
AD9850_WCLK_CLR ;
AD9850_FQUD_CLR ;
//RST信号
AD9850_RST_CLR ;
AD9850_RST_SET ;
AD9850_Delay(0xFFFF) ;
AD9850_RST_CLR ;
//WCLK信号
AD9850_WCLK_CLR ;
AD9850_WCLK_SET ;
AD9850_Delay(0xFFFF) ;
AD9850_WCLK_CLR ;
//FQUD信号
AD9850_FQUD_CLR ;
AD9850_FQUD_SET ;
AD9850_Delay(0xFFFF) ;
AD9850_FQUD_CLR ;
}
/********************************************
函数名称:AD9850_Write_Serial
功 能:在串行模式下写AD9850寄存器
参 数:W0 - W0寄存器的值
freq - 频率值
返回值 :无
*********************************************/
void AD9850_Write_Serial(unsigned char W0,unsigned long freq)
{
unsigned char i,wdata ;
unsigned long y ;
y=4294967296/50;
y*=(((int)freq)/1000000);
wdata = y>>0 ; //写w4
for(i=0 ;i<8 ;i++)
{
if(wdata & 0x01) //wdata转换为二进制。
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 ;
}
// W0=3;
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 */
/*------------------------串行模式-------------------------*/
/*---------------------------------------------------------*/
/********************************************
函数名称:Init_AD9834
功 能:初始化AD9834
参 数:无
返回值 :无
*********************************************/
void Init_AD9850(void)
{
#ifdef MODE_SEIAL //串行模式
GPIO_InitTypeDef GPIO_InitStructure ;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF , ENABLE);
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) ;
AD9850_Reset_Sreial() ;
#endif
#ifdef MODE_PARALLEL //并行模式
GPIO_InitTypeDef GPIO_InitStructure ;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO , ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE);
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
}[/mw_shl_code]
[mw_shl_code=c,true]int main(void)
{
RCC_DeInit(); /*将外设RCC寄存器重设为缺省值 */
RCC_HSICmd(ENABLE);
while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY)== RESET);//等待HSI就绪
RCC_HCLKConfig(RCC_SYSCLK_Div1); /*设置AHB时钟(HCLK) RCC_SYSCLK_Div1——AHB时钟 = 系统时*/
RCC_PCLK2Config(RCC_HCLK_Div1); /* 设置高速AHB时钟(PCLK2)RCC_HCLK_Div1——APB2时钟 = HCLK*/
RCC_PCLK1Config(RCC_HCLK_Div2); /*设置低速AHB时钟(PCLK1)RCC_HCLK_Div2——APB1时钟 = HCLK / 2*/
FLASH_SetLatency(FLASH_Latency_2); /*设置FLASH存储器延时时钟周期数FLASH_Latency_2 2延时周期*/
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); /*选择FLASH预取指缓存的模,预取指缓存使能*/
RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_16);/*设置PLL时钟源及倍频系数,频率为8/2*16=64Mhz*/
RCC_PLLCmd(ENABLE); /*使能PLL */
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) ; /*检查指定的RCC标志位(PLL准备好标志)设置与否*/
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); /*设置系统时钟(SYSCLK) */
while(RCC_GetSYSCLKSource() != 0x08); /*0x08:PLL作为系统时钟 */
//SystemInit(); //系统时钟初始化为72M SYSCLK_FREQ_72MHz
delay_init(72); //延时函数初始化
NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
LED_Init();
// AD9850_Write(0x00,8000000);
while(1)
{
AD9850_Write_Serial(0,8000000);
GPIO_SetBits(GPIOC,GPIO_Pin_0); //LED端口初始化
delay_ms(1000);
GPIO_ResetBits(GPIOC,GPIO_Pin_0);
GPIO_SetBits(GPIOC,GPIO_Pin_1);
delay_ms(1000);
GPIO_ResetBits(GPIOC,GPIO_Pin_1);
GPIO_SetBits(GPIOC,GPIO_Pin_2);
delay_ms(1000);
GPIO_ResetBits(GPIOC,GPIO_Pin_2);
}[/mw_shl_code]
|