📄 dds_ad9850.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 + -