⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ad9954.h

📁 1、直接数字频率合成的单片机代码。 2、重要采用ADI公司提出的DDS芯片AD9954来实现直接数字频率合成。
💻 H
字号:
#ifndef _AD9954_H_
#define _AD9954_H_


//51引脚定义
sbit  IO_UPDATE = P0^0;
sbit  PS1 		= P0^1;
sbit  PS0 		= P0^2;
sbit  IO_SYNC 	= P0^3;
sbit  SDIO 		= P0^4;
sbit  SCLK 		= P0^5;
sbit  CS 		= P0^6;
sbit  SDO		= P0^7;
sbit  CS2       = P1^0;

/******************************************************************************
* 寄存器全局变量定义
* CFR1  :  address : 0x00;  4 BYTE  Control Function Register No.1
* CFR2  :  address : 0x01;  3 BYTE  Control Function Register No.2
* ASF   :  address : 0x02;  2 BYTE  Amplitude Scale Factor
* ARR   :  address : 0x03;  1 BYTE  Amplitude Ramp Rate
* FTW0  :  address : 0x04;  2 BYTE  Frequency Tuning Word NO.0
* POW0  :  address : 0x05;  4 BYTE  Phase Offset Word
* FTW1  :  address : 0x06;  4 BYTE  Frequency Tuning Word NO.1
* NLSCW :  address : 0x07;  5 BYTE  Negative Linear Sweep Control Word 
* PLSCW :  address : 0x08;  4 BYTE  Positive Linear Sweep Control Word
******************************************************************************/
 
extern unsigned long CFR1; 
extern unsigned long CFR2;                    
extern unsigned long ASF;
extern unsigned long ARR;
extern unsigned long FTW0;
extern unsigned long POW0;
extern unsigned long FTW1;
extern unsigned long NLSCW;
extern unsigned long PLSCW; 
extern unsigned long multfreq; 
extern unsigned int FMdata[64];
extern unsigned long AD9954data[64]; 
extern unsigned long CFR1SLAVE;


/************************************************************
* Control  Function Register1
************************************************************/
#define NO_SYNCCLK 0X0002    //no sync_clk output
#define LSNODWELL  0X0004    //linear sweep no dwell
#define EPDOWN     0X0008   //extern power down mode
#define CPDOWN     0X0040    //comparetor power dowm
#define SDIOIN     0X0200    //SDIO input only
#define SINEOUT    0X1000    //Sine/Cosine select bit  SINE=1
#define ACPA       0X2000    //Auto Clear phase acumulator bit
#define ACFA       0X4000    //Auto Clear frequency acumulator bit
#define LSRRLC     0X8000    //linear sweep ramp rate load control bit
#define LFSENABLE  0X00200000//Linear frequency sweep enable bit
#define SMSYN      0X00400000//software manual synchronization
#define ASYNEN     0X00800000//automatic syntronization enable bit
#define AOSK       0X01000000//Antomatic shaped On-Off Keying enable
#define OSKEN      0X02000000//shaped On-Off Keying enable bit
#define ARRLC      0X04000000 //Amplitude ramp rate load control bit
#define INPROCON_0 (0*0X08000000u)//Internal profile control bits
#define INPROCON_1 (1*0X08000000u) //Internal profile control bits
#define INPROCON_2 (2*0X08000000u)//Internal profile control bits
#define INPROCON_3 (3*0X08000000u)//Internal profile control bits
#define INPROCON_4 (4*0X08000000u)//Internal profile control bits
#define INPROCON_5 (5*0X08000000u)//Internal profile control bits
#define INPROCON_6 (6*0X08000000u)//Internal profile control bits
#define INPROCON_7 (7*0X08000000u)//Internal profile control bits
#define RAMDES     0X40000000//RAM destination bit =0 to phase accumulator;  =1 to phase offset adder
#define RAMEN      0X80000000//RAM enable bit

/************************************************************
* Control  Function Register2
************************************************************/
#define CPCC_0     0X0000    //CHARG PUMP CURRENT CONTROL BIT
#define CPCC_1     0X0001    //CHARG PUMP CURRENT CONTROL BIT
#define CPCC_2     0X0002    //CHARG PUMP CURRENT CONTROL BIT
#define CPCC_3     0X0003    //CHARG PUMP CURRENT CONTROL BIT
#define VCORC      0X0004    //VCO range control bit  100-250M=0; 250M-400M=1
#define RCMC_0     (0*0X0008)//Reference clock multipler control bits
#define RCMC_4     (4*0X0008)//Reference clock multipler control bits
#define RCMC_5     (5*0X0008)//Reference clock multipler control bits
#define RCMC_6     (6*0X0008)//Reference clock multipler control bits
#define RCMC_7     (7*0X0008)//Reference clock multipler control bits
#define RCMC_8     (8*0X0008)//Reference clock multipler control bits
#define RCMC_9     (9*0X0008)//Reference clock multipler control bits
#define RCMC_10    (10*0X0008)//Reference clock multipler control bits
#define RCMC_11    (11*0X0008)//Reference clock multipler control bits
#define RCMC_12    (12*0X0008)//Reference clock multipler control bits
#define RCMC_13    (13*0X0008)//Reference clock multipler control bits
#define RCMC_14    (14*0X0008)//Reference clock multipler control bits
#define RCMC_15    (15*0X0008)//Reference clock multipler control bits
#define RCMC_16    (16*0X0008)//Reference clock multipler control bits
#define RCMC_17    (17*0X0008)//Reference clock multipler control bits
#define RCMC_18    (18*0X0008)//Reference clock multipler control bits
#define RCMC_19    (19*0X0008)//Reference clock multipler control bits
#define RCMC_20    (20*0X0008)//Reference clock multipler control bits
#define CRYOUTEN   0X0200   //Crystal output enable
#define HMSYNEN    0X0400    //Hadeware manual synchronical enable bit
#define HSSYNEN    0X0800    //High speed sync enable bit

/************************************************************
* RAM segment control word
************************************************************/
#define NODWELL    0X10       //NO dwell active bit
#define RAMSMC_0   (0*0x20)   //RAM Segment mode control  bits
#define RAMSMC_1   (1*0x20)   //RAM Segment mode control  bits
#define RAMSMC_2   (2*0x20)   //RAM Segment mode control  bits
#define RAMSMC_3   (3*0x20)   //RAM Segment mode control  bits
#define RAMSMC_4   (4*0x20)   //RAM Segment mode control  bits
#define RAMSMC_5   (5*0x20)   //RAM Segment mode control  bits
#define RAMSMC_6   (6*0x20)   //RAM Segment mode control  bits
#define RAMSMC_7   (7*0x20)   //RAM Segment mode control  bits
#define BABIT0      0X00000400//RAM segment beginning address bit0
#define BABIT1      0X00000800//RAM segment beginning address bit1
#define BABIT2      0X00001000//RAM segment beginning address bit2
#define BABIT3      0X00002000//RAM segment beginning address bit3
#define BABIT4      0X00004000//RAM segment beginning address bit4
#define BABIT5      0X00008000//RAM segment beginning address bit5
#define BABIT6      0X00000001//RAM segment beginning address bit6
#define BABIT7      0X00000002//RAM segment beginning address bit7
#define BABIT8      0X00000004//RAM segment beginning address bit8
#define BABIT9      0X00000008//RAM segment beginning address bit9
#define FABIT0      0X00010000//RAM segment final address bit0
#define FABIT1      0X00020000//RAM segment final address bit1
#define FABIT2      0X00040000//RAM segment final address bit2
#define FABIT3      0X00080000//RAM segment final address bit3
#define FABIT4      0X00100000//RAM segment final address bit4
#define FABIT5      0X00200000//RAM segment final address bit5
#define FABIT6      0X00400000//RAM segment final address bit6
#define FABIT7      0X00800000//RAM segment final address bit7
#define FABIT8      0X00000100//RAM segment final address bit8
#define FABIT9      0X00000200//RAM segment final address bit9

/***********************************************************************
*                     AD9954基本操作及初始化
***********************************************************************/


/***********************************************************************
** 函数名称: 	端口操作
** 功能描述: 	AD9954端口基本操作
** 输 入: 	无     
** 输 出:      无
** 全局变量:	无
** 调用模块: 	无
***********************************************************************/
extern void SCLK_0(void);
extern void SCLK_1(void);
extern void SDIO_0(void);
extern void SDIO_1(void);
extern void CS_Enable(void);
extern void CS_Disable(void);
extern void CS2_Enable(void);
extern void CS2_Disable(void);
extern void IO_UPDATE_0(void);
extern void IO_UPDATE_1(void);
extern void IO_SYNC_0(void);
extern void IO_SYNC_1(void);
extern void PS0_Set_High(void);
extern void PS0_Set_Low(void);
extern void PS1_Set_High(void);
extern void PS1_Set_Low(void);

/***********************************************************************
** 函数名称: 	IO9954_Init
** 功能描述: 	IO_Init
** 输 入: 	    无      
** 输 出:      无
** 全局变量:	无
** 调用模块: 	无
***********************************************************************/
extern void IO9954_Init();

/***********************************************************************
** 函数名称: 	nNop
** 功能描述: 	US级软件延时(不精确)
** 输 入: 	延时参数,值越大时延时越久      
** 输 出:      无
** 全局变量:	无
** 调用模块: 	无
***********************************************************************/
extern void nNop(unsigned long nValue);

/***********************************************************************
** 函数名称: 	WriteByte
** 功能描述: 	向AD9954发送一字节数据 MSB FIRST
** 输 入: 	unsigned char data   发送的数据     
** 输 出:      无
** 全局变量:	无
** 调用模块: 	端口操作 Delay_Us
***********************************************************************/
extern void WriteByte(unsigned char Data);


/***********************************************************************
** 函数名称: 	ReadByte
** 功能描述: 	从AD9954读取一字节数据 MSB FIRST
** 输 入: 	无   
** 输 出:      unsigned char 读回的数据
** 全局变量:	无
** 调用模块: 	端口操作 
***********************************************************************/
extern unsigned char ReadByte(void);

/***********************************************************************
** 函数名称: 	RW_Reg
** 功能描述: 	AD9954读写寄存器操作
** 输 入: 	unsigned char addr  寄存器地址
**              unsigned char *buf  写寄存器: 指向发送数据的指针
**                                  读寄存器: 指向读回数据的指针
**              unsigned char num   发送或读回的数据长度 num Byte
**              unsigned char rw    读写选择 0 读  1 写
** 输 出:      无
** 全局变量:	无
** 调用模块: 	ReadByte  WriteByte
***********************************************************************/
extern void RW_Reg(unsigned char addr,unsigned char *buf,unsigned char num,
            unsigned char rw);



/***********************************************************************
** 函数名称: 	AD9954_Write_Reg
** 功能描述: 	AD9954写寄存器操作
** 输 入: 	unsigned long command  写入寄存器的指令
**              unsigned char num      发送或读回的数据长度 num Byte
**              unsigned char addr     寄存器地址
** 输 出:      无
** 全局变量:	无
** 调用模块: 	RW_Reg
***********************************************************************/
extern void AD9954_Write_Reg(unsigned long command,unsigned char num,
                      unsigned char addr);


/***********************************************************************
** 函数名称: 	FTW_Float
** 功能描述: 	将浮点型频率值MHZ 转换成频率控制字
** 输 入: 	float freqfloat    浮点型频率值MHZ        
** 输 出:      unsigned long      4 byte 频率控制字
** 全局变量:	无
** 调用模块: 	无
***********************************************************************/
extern unsigned long FTW_Float(float freqfloat);


/***********************************************************************
** 函数名称: 	更新寄存器操作
** 功能描述: 	每次更新寄存器的固定操作
** 输 入: 	无      
** 输 出:      无
** 全局变量:	无
** 调用模块: 	无
***********************************************************************/
extern void AD9954_Updata_First(void);
extern void AD9954_Updata_Final(void);



/*****************************************************************************
*                               Single-Tone Mode
******************************************************************************/
/***********************************************************************
** 函数名称: 	AD9954_SingleTone_Init
** 功能描述: 	AD9954 Single-Tone Mode  初始化 
** 输 入: 	无       
** 输 出:      无
** 全局变量:	CFR1 CFR2   AD9954 功能控制寄存器
** 调用模块: 	AD9954_Write_Reg   更新寄存器操作
***********************************************************************/
extern void AD9954_SingleTone_Init(void);


/***********************************************************************
** 函数名称: 	AD9954_SingleTone_Freq
** 功能描述: 	更新频率控制
** 输 入: 	float freq   浮点型频率值MHZ         
** 输 出:      无
** 全局变量:	FTW0
** 调用模块: 	AD9954_Write_Reg   更新寄存器操作
***********************************************************************/
extern void AD9954_SingleTone_Freq(float freq);


/***********************************************************************
** 函数名称: 	AD9954_Amplitude_Change
** 功能描述: 	手动改变输出幅度
** 输 入: 	无       
** 输 出:      无
** 全局变量:	ASF
** 调用模块: 	AD9954_Write_Reg   更新寄存器操作
***********************************************************************/
extern void AD9954_Amplitude_Change(void);


/***********************************************************************
** 函数名称: 	AD9954_Phase_Change
** 功能描述: 	改变输出相角  0<=phase<=360
** 输 入: 	double phase  浮点型相角值      
** 输 出:      无
** 全局变量:	POW0
** 调用模块: 	AD9954_Write_Reg   更新寄存器操作
***********************************************************************/
extern void AD9954_Phase_Change(double phase);

#endif  //_AD9954_H_

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -