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

📄 dds_ad9850.c

📁 共享几个AVR单片机的常用代码
💻 C
字号:
#include "DDS_AD9850.h"

uint8_t DDS_FLAG_BYTE;
uint32_t DDS_DATA_DWORD;

uint32_t tmpFreq;

const prog_uint32_t DDS_125M_Word[7][16] =
{
	{
	0x00000000,	 //0x00000000
	0x00000022,	 //0x00000001
	0x00000044,	 //0x00000002
	0x00000067,	 //0x00000003
	0x00000089,	 //0x00000004
	0x000000AB,	 //0x00000005
	0x000000CE,	 //0x00000006
	0x000000F0,	 //0x00000007
	0x00000112,	 //0x00000008
	0x00000135,	 //0x00000009
	0x00000157,	 //0x0000000A
	0x00000179,	 //0x0000000B
	0x0000019C,	 //0x0000000C
	0x000001BE,	 //0x0000000D
	0x000001E1,	 //0x0000000E
	0x00000203	 //0x0000000F
	},
	{
	0x00000000,	 //0x00000000
	0x00000225,	 //0x00000010
	0x0000044B,	 //0x00000020
	0x00000671,	 //0x00000030
	0x00000897,	 //0x00000040
	0x00000ABC,	 //0x00000050
	0x00000CE2,	 //0x00000060
	0x00000F08,	 //0x00000070
	0x0000112E,	 //0x00000080
	0x00001353,	 //0x00000090
	0x00001579,	 //0x000000A0
	0x0000179F,	 //0x000000B0
	0x000019C5,	 //0x000000C0
	0x00001BEA,	 //0x000000D0
	0x00001E10,	 //0x000000E0
	0x00002036	 //0x000000F0
	},
	{
	0x00000000,	 //0x00000000
	0x0000225C,	 //0x00000100
	0x000044B8,	 //0x00000200
	0x00006714,	 //0x00000300
	0x00008970,	 //0x00000400
	0x0000ABCC,	 //0x00000500
	0x0000CE28,	 //0x00000600
	0x0000F084,	 //0x00000700
	0x000112E0,	 //0x00000800
	0x0001353C,	 //0x00000900
	0x00015798,	 //0x00000A00
	0x000179F5,	 //0x00000B00
	0x00019C51,	 //0x00000C00
	0x0001BEAD,	 //0x00000D00
	0x0001E109,	 //0x00000E00
	0x00020365	 //0x00000F00
	},
	{
	0x00000000,	 //0x00000000
	0x000225C1,	 //0x00001000
	0x00044B82,	 //0x00002000
	0x00067144,	 //0x00003000
	0x00089705,	 //0x00004000
	0x000ABCC7,	 //0x00005000
	0x000CE288,	 //0x00006000
	0x000F084A,	 //0x00007000
	0x00112E0B,	 //0x00008000
	0x001353CD,	 //0x00009000
	0x0015798E,	 //0x0000A000
	0x00179F50,	 //0x0000B000
	0x0019C511,	 //0x0000C000
	0x001BEAD3,	 //0x0000D000
	0x001E1094,	 //0x0000E000
	0x00203656	 //0x0000F000
	},
	{
	0x00000000,	 //0x00000000
	0x00225C17,	 //0x00010000
	0x0044B82F,	 //0x00020000
	0x00671447,	 //0x00030000
	0x0089705F,	 //0x00040000
	0x00ABCC77,	 //0x00050000
	0x00CE288E,	 //0x00060000
	0x00F084A6,	 //0x00070000
	0x0112E0BE,	 //0x00080000
	0x01353CD6,	 //0x00090000
	0x015798EE,	 //0x000A0000
	0x0179F505,	 //0x000B0000
	0x019C511D,	 //0x000C0000
	0x01BEAD35,	 //0x000D0000
	0x01E1094D,	 //0x000E0000
	0x02036565	 //0x000F0000
	},
	{
	0x00000000,	 //0x00000000
	0x0225C17D,	 //0x00100000
	0x044B82FA,	 //0x00200000
	0x06714477,	 //0x00300000
	0x089705F4,	 //0x00400000
	0x0ABCC771,	 //0x00500000
	0x0CE288EE,	 //0x00600000
	0x0F084A6B,	 //0x00700000
	0x112E0BE8,	 //0x00800000
	0x1353CD65,	 //0x00900000
	0x15798EE2,	 //0x00A00000
	0x179F505F,	 //0x00B00000
	0x19C511DC,	 //0x00C00000
	0x1BEAD359,	 //0x00D00000
	0x1E1094D6,	 //0x00E00000
	0x20365653	 //0x00F00000
	},
	{
	0x00000000,	 //0x00000000
	0x225C17D0,	 //0x01000000
	0x44B82FA0,	 //0x02000000
	0x67144770,	 //0x03000000
	0x89705F41,	 //0x04000000
	0xABCC7711,	 //0x05000000
	0xCE288EE1,	 //0x06000000
	0xF084A6B2,	 //0x07000000
	0x12E0BE82,	 //0x08000000
	0x353CD652,	 //0x09000000
	0x5798EE23,	 //0x0A000000
	0x79F505F3,	 //0x0B000000
	0x9C511DC3,	 //0x0C000000
	0xBEAD3593,	 //0x0D000000
	0xE1094D64,	 //0x0E000000
	0x03656534	 //0x0F000000
	}
};



void DDS_SEND_DATA_SERIAL(void)
{
	uint8_t i;
	uint32_t BitMask;

	BitMask = 1;
	if(DDS_DATA_DWORD)
	{
		while(BitMask)
		{
			if(DDS_DATA_DWORD&BitMask)
				DDS_DATA_SETH;
			else
				DDS_DATA_SETL;
			DDS_WCLK_SETH;
			DDS_WCLK_SETL;
			BitMask <<= 1;
		}
	}
	else	//Send 0....0(32 bit)
	{
		DDS_DATA_SETL;
		for(i=0;i<32;i++)
		{	
			DDS_WCLK_SETH;
			DDS_WCLK_SETL;
		}
	}
	BitMask = 1;
	if(DDS_FLAG_BYTE)
	{
		for(i=0;i<8;i++)
		{
			if(DDS_FLAG_BYTE&BitMask)
				DDS_DATA_SETH;
			else
				DDS_DATA_SETL;
			
			DDS_WCLK_SETH;
			DDS_WCLK_SETL;
			BitMask <<= 1;
		}
	}
	else	//Send 0....0(8 bit)
	{
		DDS_DATA_SETL;
		for(i=0;i<8;i++)
		{	
			DDS_WCLK_SETH;
			DDS_WCLK_SETL;
		}
	}
	DDS_FQUD_SETH;
	DDS_FQUD_SETL;
}

void DDS_Init(void)	//Enter Serial Mode + Power Down
{
	DDS_SET_PORT_OUT;
	
	DDS_DATA_DWORD = 0;
	DDS_FLAG_BYTE= 0;
	
	DDS_WCLK_SETL;
	DDS_DATA_SETL;
	DDS_FQUD_SETL;
	
	DDS_RESET_ENABLE;
	__asm__ __volatile__ ("nop"::);
	__asm__ __volatile__ ("nop"::);
	__asm__ __volatile__ ("nop"::);
	__asm__ __volatile__ ("nop"::);
	DDS_RESET_DISABLE;

	DDS_WCLK_SETH;
	DDS_WCLK_SETL;
	
	DDS_FQUD_SETH;
	DDS_FQUD_SETL;
	
}

void DDS_POWER_DOWN(void)
{}

void DDS_POWER_UP(void)
{}

void DDS_UpdateFL(void)
{
	DDS_DATA_DWORD	=	pgm_read_dword(DDS_125M_Word[0]+(tmpFreq & 0x0f));
	tmpFreq >>= 4;
	DDS_DATA_DWORD	+=	pgm_read_dword(DDS_125M_Word[1]+(tmpFreq & 0x0f));
	tmpFreq >>= 4;
	DDS_DATA_DWORD	+=	pgm_read_dword(DDS_125M_Word[2]+(tmpFreq & 0x0f));
	tmpFreq >>= 4;
	DDS_DATA_DWORD	+=	pgm_read_dword(DDS_125M_Word[3]+(tmpFreq & 0x0f));
}


void DDS_UpdateFH(void)
{
	tmpFreq >>= 4;
	DDS_DATA_DWORD	+=	pgm_read_dword(DDS_125M_Word[4]+(tmpFreq & 0x0f));
	tmpFreq >>= 4;
	DDS_DATA_DWORD	+=	pgm_read_dword(DDS_125M_Word[5]+(tmpFreq & 0x0f));
	tmpFreq >>= 4;
	DDS_DATA_DWORD	+=	pgm_read_dword(DDS_125M_Word[6]+(tmpFreq & 0x0f));
}

void DDS_UpdateFreq(uint32_t freq) 
{
	tmpFreq = freq;		// To solve a compiler's bug 
	DDS_UpdateFL();
	DDS_UpdateFH();
	
	DDS_SEND_DATA_SERIAL();
}



⌨️ 快捷键说明

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