?? ad9851驅動程序.txt
字號:
/**************************************************
作者:陳曉濤
名稱:AD9851串行控制程序
說明:AD9851在復位時默認的狀態為并行輸入狀態,在該
狀態下先用一個W_CLK時鐘將“XXXXX011”寫入W0中
(通常在硬電路中將D2-D0接成011),并用一FQ_UD
時鐘將40位的控制字并入AD9851的內核,這樣便完
成了從并行轉到串行的工作模式下,但須注意的是
緊接著便須將有獎的控制字輸入到AD9851的內核,以
防其進入無效的工作狀態
**************************************************/
#include<iom16.h>
#include<intrinsics.h>
#define uchar unsigned char
#define DDS_CON_DDR DDRD
#define DDS_CON_DIR 0X8D
#define DDS_DATA_DDR DDRC
#define DDS_DATA_DIR 0X80
#define DDS_CON_PORT PORTD
#define DDS_DATA_PORT PORTC
#define DDS_CON_PIN PIND
#define SET_DDS_REST DDS_CON_PORT|=(1<<7) //RESET 接到PD7
#define CLR_DDS_REST DDS_CON_PORT&=~(1<<7)
#define SET_DDS_WCLK DDS_CON_PORT|=(1<<3) //WCLK 接到PD3
#define CLR_DDS_WCLK DDS_CON_PORT&=~(1<<3)
#define SET_DDS_FQUD DDS_CON_PORT|=(1<<2) //FQUD 接到PD2
#define CLR_DDS_FQUD DDS_CON_PORT&=~(1<<2)
#define DDS_DATA_BIT PORTC_Bit7 //位操作
uchar a[]={0x55,0x55,0x93,0x78,0x00};
uchar b[5]={0xf0,0x22,0x35,0x33,0x00};
void set_dds_to_serial(void);
void write_word(uchar *s);
void set_dds_to_serial(void)
{
DDS_CON_DDR |= DDS_CON_DIR; //設置控制端口的方向
DDS_CON_PORT &= ~DDS_CON_DIR; //各端口初始化為0
DDS_DATA_DDR |= DDS_DATA_DIR; //設置數據端口的方向
DDS_DATA_PORT &= ~DDS_DATA_DIR;//數據口初始化為0
SET_DDS_REST; //復位
delay_nus(5); //復位時間為5US
CLR_DDS_REST; //復位完畢
SET_DDS_WCLK; //將硬件電路設置的XXXXX011寫入W0中
delay_nus(2);
CLR_DDS_WCLK;
SET_DDS_FQUD; //將控制字送入內核
CLR_DDS_FQUD;
write_word(a); //調用write_word()用串行方式寫入數組a中的值,應該得到與輸入時鐘相同頻率的波形
}
void write_word(uchar *s)
{
uchar i,j;
uchar k,l;
for(i=0;i<5;i++) //40位的控制字保存在5個字節中
{
k=s[i];
for(j=0;j<8;j++)
{
l=k>>j;
l=l&0x01;
CLR_DDS_WCLK;
DDS_DATA_BIT=l;
SET_DDS_WCLK;
}
}
SET_DDS_FQUD;
CLR_DDS_FQUD;
}
void main()
{
set_dds_to_serial();
b[0]=0x55;
b[1]=0x44;
b[2]=0x33;
b[3]=0x22;
b[4]=0x00;
write_word(b);
while(1);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -