找了好久,终于找到了相关资料,AD9958 AD9959 DDS模块,希望对大家有帮助
单片机源程序如下:
- #include "stm32f10x.h"
- #include "stdint.h"
- #include "Delay.h"
- #include "Timer.h"
- #include "InternalFlash.h"
- #include "AD9958.h"
- /* 晶振频率 */
- #define AD9958_CRYSTAL_OSCILLATOR 25000000
- AD9958TypeDef Extern_ad9958_data;
- int32_t Extern_channel0_frequency_rising_delta = 0; /* 扫频模式下上升时每次改变的频率量 */
- int32_t Extern_channel0_frequency_falling_delta = 0; /* 扫频模式下下降时每次改变的频率量 */
- int32_t Extern_channel0_frequency_start = 0; /* 扫频模式下起始频率 */
- int32_t Extern_channel0_frequency_stop = 0; /* 扫频模式下上升终止频率 */
- int32_t Extern_channel0_frequency_now = 0; /* 扫频模式下上升实时频率 */
- int32_t Extern_channel1_frequency_rising_delta = 0; /* 扫频模式下上升时每次改变的频率量 */
- int32_t Extern_channel1_frequency_falling_delta = 0; /* 扫频模式下下降时每次改变的频率量 */
- int32_t Extern_channel1_frequency_start = 0; /* 扫频模式下起始频率 */
- int32_t Extern_channel1_frequency_stop = 0; /* 扫频模式下上升终止频率 */
- int32_t Extern_channel1_frequency_now = 0; /* 扫频模式下上升实时频率 */
- /*
- * Return: void
- * Parameters: void
- * Description: AD9958初始化
- */
- void ad9958Init(void)
- {
- uint32_t data[20] = {0};
- Union32_t temp;
-
- GPIO_InitTypeDef GPIO_InitStructure;
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
-
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
-
- /* 关闭PB3 JTAG功能 */
- GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);
- GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
-
- GPIO_InitStructure.GPIO_Pin = AD9958_SDIO_0 | AD9958_SDIO_1 | AD9958_SDIO_2 | AD9958_SDIO_3 \
- | AD9958_DIN_P0 | AD9958_DIN_P1 | AD9958_DIN_P2 | AD9958_DIN_P3 \
- | AD9958_MASTER_RESET | AD9958_SCLK | AD9958_CS | AD9958_IO_UPDATA | AD9958_CLK_SEL ;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOB, &GPIO_InitStructure);
-
- AD9958_IO_UPDATA_0();
- AD9958_CS_1();
- AD9958_SCLK_1();
- AD9958_MASTER_RESET_0();
- AD9958_CLK_SEL_1();
-
- AD9958_SDIO_0_1();
- AD9958_SDIO_1_1();
- AD9958_SDIO_2_1();
- AD9958_SDIO_3_1();
-
- AD9958_DINP_0_1();
- AD9958_DINP_1_1();
- AD9958_DINP_2_1();
- AD9958_DINP_3_1();
-
- internalFlashRead(0, data, 20);
- if(data[19] != 0x12345678)
- {
- temp.Float_number = Extern_ad9958_data.channel[0].frequency = 7.0f;
- data[0] = temp.Uint32_number;
- temp.Float_number = Extern_ad9958_data.channel[0].phase = 0.0f;
- data[1] = temp.Uint32_number;
- temp.Float_number = Extern_ad9958_data.channel[0].amplitude = 1.0f;
- data[2] = temp.Uint32_number;
- temp.Float_number = Extern_ad9958_data.channel[0].frequency_falling_blanking_time = 10.0f;
- data[3] = temp.Uint32_number;
- temp.Float_number = Extern_ad9958_data.channel[0].frequency_rising_blanking_time = 10.0f;
- data[4] = temp.Uint32_number;
- temp.Float_number = Extern_ad9958_data.channel[0].frequency_falling_delta = 1.0f;
- data[5] = temp.Uint32_number;
- temp.Float_number = Extern_ad9958_data.channel[0].frequency_rising_delta = 20.0f;
- data[6] = temp.Uint32_number;
- temp.Float_number = Extern_ad9958_data.channel[0].frequency_start = 0.0f;
- data[7] = temp.Uint32_number;
- temp.Float_number = Extern_ad9958_data.channel[0].frequency_stop = 1000000.0f;
- data[8] = temp.Uint32_number;
-
- temp.Float_number = Extern_ad9958_data.channel[1].frequency = 1.0f;
- data[10] = temp.Uint32_number;
- temp.Float_number = Extern_ad9958_data.channel[1].phase = 90.0f;
- data[11] = temp.Uint32_number;
- temp.Float_number = Extern_ad9958_data.channel[1].amplitude = 1.0f;
- data[12] = temp.Uint32_number;
- temp.Float_number = Extern_ad9958_data.channel[1].frequency_falling_blanking_time = 1000.0f;
- data[13] = temp.Uint32_number;
- temp.Float_number = Extern_ad9958_data.channel[1].frequency_rising_blanking_time = 1000.0f;
- data[14] = temp.Uint32_number;
- temp.Float_number = Extern_ad9958_data.channel[1].frequency_falling_delta = 10.0f;
- data[15] = temp.Uint32_number;
- temp.Float_number = Extern_ad9958_data.channel[1].frequency_rising_delta = 10.0f;
- data[16] = temp.Uint32_number;
- temp.Float_number = Extern_ad9958_data.channel[1].frequency_start = 50.0f;
- data[17] = temp.Uint32_number;
- temp.Float_number = Extern_ad9958_data.channel[1].frequency_stop = 1000.0f;
- data[18] = temp.Uint32_number;
-
- data[19] = 0x12345678;
-
- internalFlashWrite(0, data, 20);
- }
- else
- {
- temp.Uint32_number = data[0];
- Extern_ad9958_data.channel[0].frequency = temp.Float_number;
- temp.Uint32_number = data[1];
- Extern_ad9958_data.channel[0].phase = temp.Float_number;
- temp.Uint32_number = data[2];
- Extern_ad9958_data.channel[0].amplitude = temp.Float_number;
- temp.Uint32_number = data[3];
- Extern_ad9958_data.channel[0].frequency_falling_blanking_time = temp.Float_number;
- temp.Uint32_number = data[4];
- Extern_ad9958_data.channel[0].frequency_rising_blanking_time = temp.Float_number;
- temp.Uint32_number = data[5];
- Extern_ad9958_data.channel[0].frequency_falling_delta = temp.Float_number;
- temp.Uint32_number = data[6];
- Extern_ad9958_data.channel[0].frequency_rising_delta = temp.Float_number;
- temp.Uint32_number = data[7];
- Extern_ad9958_data.channel[0].frequency_start = temp.Float_number;
- temp.Uint32_number = data[8];
- Extern_ad9958_data.channel[0].frequency_stop = temp.Float_number;
-
- temp.Uint32_number = data[10];
- Extern_ad9958_data.channel[1].frequency = temp.Float_number;
- temp.Uint32_number = data[11];
- Extern_ad9958_data.channel[1].phase = temp.Float_number;
- temp.Uint32_number = data[12];
- Extern_ad9958_data.channel[1].amplitude = temp.Float_number;
- temp.Uint32_number = data[13];
- Extern_ad9958_data.channel[1].frequency_falling_blanking_time = temp.Float_number;
- temp.Uint32_number = data[14];
- Extern_ad9958_data.channel[1].frequency_rising_blanking_time = temp.Float_number;
- temp.Uint32_number = data[15];
- Extern_ad9958_data.channel[1].frequency_falling_delta = temp.Float_number;
- temp.Uint32_number = data[16];
- Extern_ad9958_data.channel[1].frequency_rising_delta = temp.Float_number;
- temp.Uint32_number = data[17];
- Extern_ad9958_data.channel[1].frequency_start = temp.Float_number;
- temp.Uint32_number = data[18];
- Extern_ad9958_data.channel[1].frequency_stop = temp.Float_number;
- }
-
- /* 开机后必须对AD9958进行复位 */
- AD9958_RESET();
- /* 设置20倍频 */
- ad9958SetPLLDividerRatio(20);
-
- /* 选择通道0 */
- ad9958ChoiceChannel(AD9958_CHANNEL_0);
-
- /* 设置频率1000 Hz */
- ad9958SetFrequency(Extern_ad9958_data.channel[0].frequency);
-
- /* 设置相位90度 */
- ad9958SetPhase(Extern_ad9958_data.channel[0].phase);
-
- /* 设置衰减系数1.0 */
- ad9958SetAmplitude(Extern_ad9958_data.channel[0].amplitude);
- /* 选择通道1 */
- ad9958ChoiceChannel(AD9958_CHANNEL_1);
-
- /* 设置频率1000 Hz */
- ad9958SetFrequency(Extern_ad9958_data.channel[1].frequency);
-
- /* 设置相位90度 */
- ad9958SetPhase(Extern_ad9958_data.channel[1].phase);
-
- /* 设置衰减系数1.0 */
- ad9958SetAmplitude(Extern_ad9958_data.channel[1].amplitude);
- }
- /*
- * Return: void
- * Parameters: Data: 要写入的字节
- * Description: 向AD9958写入一个字节
- */
- void ad9958WriteByte(uint8_t Data)
- {
- uint8_t mask;
-
- for(mask=0x80; mask; mask>>=1)
- {
- AD9958_SCLK_0();
-
- if(Data & mask)
- AD9958_SDIO_0_1();
- else
- AD9958_SDIO_0_0();
- AD9958_SCLK_1();
- }
- AD9958_SDIO_0_1();
- }
- /*
- * Return: 当前读取到的一个字节
- * Parameters: void
- * Description: 从AD9958读取一个字节
- */
- uint8_t ad9958ReadByte(void)
- {
- uint8_t mask, data = 0;
-
- AD9958_SDIO_0_1();
- for(mask=0x80; mask; mask>>=1)
- {
- AD9958_SCLK_0();
-
- if(AD9958_SDIO_0_VALUE())
- data |= mask;
- AD9958_SCLK_1();
- }
-
- return data;
- }
- /*
- * Return: 0: 成功; 1: 失败
- * Parameters: Reg: 寄存器地址; Data: 缓存指针; Length: 长度
- * Description: 向AD9958写入一组数据
- */
- uint8_t ad9958WriteDatas(uint8_t Reg, uint8_t * Data, uint16_t Length)
- {
- uint16_t i = 0;
-
- AD9958_SDIO_3_0();
- AD9958_CS_0();
-
- ad9958WriteByte(Reg);
-
- for(i=0; i<Length; ++i)
- {
- ad9958WriteByte(Data[i]);
- }
-
- AD9958_CS_1();
- AD9958_SDIO_3_1();
-
- /* 控制AD9958数据更新 */
- AD9958_UPDATA();
-
- return 0;
- }
- /*
- * Return: 0: 成功; 1: 失败
- * Parameters: Reg: 寄存器地址; Data: 缓存指针; Length: 长度
- * Description: 向AD9958读取一组数据
- */
- uint8_t ad9958ReadDatas(uint8_t Reg, uint8_t * Data, uint16_t Length)
- {
- uint16_t i = 0;
-
- AD9958_SDIO_3_0();
- AD9958_CS_0();
-
- ad9958WriteByte(Reg | 0x80);
-
- for(i=0; i<Length; ++i)
- {
- Data[i] = ad9958ReadByte();
- }
-
- AD9958_CS_1();
- AD9958_SDIO_3_1();
-
- return 0;
- }
- /*
- * Return: void
- * Parameters: Channel: 通道序号; Mode: 扫频模式(0:关闭扫频、 1:MCU模拟扫频、 2:AD9958硬件扫频)
- * Description: 设置AD9958扫频模式
- */
- void ad9958FrequencyLinearSweepOpen(AD9958ChannelOrder_TypeDef Channel, uint8_t Mode)
- {
- float time = 0.0f;
-
- if(Mode == 1)
- {
- /* 设置上升扫描频率步进 */
- Extern_channel0_frequency_rising_delta = Extern_ad9958_data.channel[0].frequency_rising_delta;
-
- /* 设置下降扫描频率步进 */
- Extern_channel0_frequency_falling_delta = Extern_ad9958_data.channel[0].frequency_falling_delta;
-
- /* 设置扫描开始频率 */
- Extern_channel0_frequency_start = Extern_ad9958_data.channel[0].frequency_start;
-
- /* 设置扫描开始频率 */
- Extern_channel0_frequency_now = Extern_ad9958_data.channel[0].frequency_start;
-
- /* 设置扫描最大终止频率 */
- Extern_channel0_frequency_stop = Extern_ad9958_data.channel[0].frequency_stop;
-
-
- /* 设置上升扫描频率步进 */
- Extern_channel1_frequency_rising_delta = Extern_ad9958_data.channel[1].frequency_rising_delta;
-
- /* 设置下降扫描频率步进 */
- Extern_channel1_frequency_falling_delta = Extern_ad9958_data.channel[1].frequency_falling_delta;
-
- /* 设置扫描开始频率 */
- Extern_channel1_frequency_start = Extern_ad9958_data.channel[1].frequency_start;
-
- /* 设置扫描开始频率 */
- Extern_channel1_frequency_now = Extern_ad9958_data.channel[1].frequency_start;
-
- /* 设置扫描最大终止频率 */
- Extern_channel1_frequency_stop = Extern_ad9958_data.channel[1].frequency_stop;
-
- /* 关闭AD9958硬件扫频 */
- TIM2->DIER &= (uint16_t)~TIM_IT_Update;
-
- /* 开启MCU模拟扫频 */
- if(Channel & AD9958_CHANNEL_0)
- {
- timerSetTime(TIM3, Extern_ad9958_data.channel[0].frequency_rising_blanking_time);
-
- TIM3->DIER |= TIM_IT_Update;
- }
- if(Channel & AD9958_CHANNEL_1)
- {
- timerSetTime(TIM4, Extern_ad9958_data.channel[1].frequency_rising_blanking_time);
-
- TIM4->DIER |= TIM_IT_Update;
- }
- }
- else if(Mode == 2)
- {
- ad9958ChoiceChannel(Channel);
-
- /* 设置上升与下降扫频时间间隔 */
- ad9958SetBlankingTimeNs(Extern_ad9958_data.channel[0].frequency_rising_blanking_time, Extern_ad9958_data.channel[0].frequency_falling_blanking_time);
-
- /* 设置上升扫频频率步进 */
- ad9958SetFrequencyRisingLSR(Extern_ad9958_data.channel[0].frequency_rising_delta);
-
- /* 设置下降扫频频率步进 */
- ad9958SetFrequencyFallingLSR(Extern_ad9958_data.channel[0].frequency_falling_delta);
-
- /* 设置扫频开始频率 */
- ad9958SetFrequency(Extern_ad9958_data.channel[0].frequency_start);
-
- /* 设置扫频最大终止频率 */
- ad9958SetChannelWord(Extern_ad9958_data.channel[0].frequency_stop, AD9958_FREQUENCY, 1);
-
- /* 设置数字调制阶数 */
- ad9958ModulationLevelSelection(TWO_LEVEL_MODULATION);
- /* 设置硬件扫频模式与设置扫描位 */
- ad9958ModulationTypeConfiguration(AD9958_FREQUENCY, LINEAR_OPEN);
-
- time = Extern_ad9958_data.channel[0].frequency_stop * Extern_ad9958_data.channel[0].frequency_rising_blanking_time / Extern_ad9958_data.channel[0].frequency_rising_delta * 0.001;
- time += Extern_ad9958_data.channel[0].frequency_stop * Extern_ad9958_data.channel[0].frequency_falling_blanking_time / Extern_ad9958_data.channel[0].frequency_falling_delta * 0.001;
-
- /* 设置扫频上升与下降的切换时间 */
- timerSetTime(TIM2, time);
-
- /* 关闭MCU模拟扫频 */
- if(Channel & AD9958_CHANNEL_0)
- TIM3->DIER &= (uint16_t)~TIM_IT_Update;
- if(Channel & AD9958_CHANNEL_1)
- TIM4->DIER &= (uint16_t)~TIM_IT_Update;
-
- /* 开启AD9958硬件扫频 */
- TIM2->DIER |= TIM_IT_Update;
- }
- else
- {
- /* 关闭AD9958硬件扫频 */
- TIM2->DIER &= (uint16_t)~TIM_IT_Update;
-
- /* 关闭MCU模拟扫频 */
- TIM3->DIER &= (uint16_t)~TIM_IT_Update;
- TIM4->DIER &= (uint16_t)~TIM_IT_Update;
- }
- }
- /*
- * Return: void
- * Parameters: Channel: 通道序号(AD9958_CHANNEL_0、 AD9958_CHANNEL_1、 AD9958_CHANNEL_0_AND_1)
- * Description: 选择当前要操作的通道
- */
- void ad9958ChoiceChannel(AD9958ChannelOrder_TypeDef Channel)
- {
- uint8_t data[1] = {0};
-
- data[0] = Channel & 0xF0;
-
- ad9958WriteDatas(0x00, data, 1);
- }
- /*
- * Return: void
- * Parameters: Data: 倍频系数(0 ~~~ 63)
- * Description: 设置主频的倍频系数
- */
- void ad9958SetPLLDividerRatio(uint8_t Data)
- {
- uint8_t data[3] = {0, 0, 0};
-
- Data %= 64;
-
- /* 设置主频倍频系数 */
- Extern_ad9958_data.pll_divider_ratio = Data;
-
- /* 计算系统频率 */
- Extern_ad9958_data.system_clock = Extern_ad9958_data.pll_divider_ratio * AD9958_CRYSTAL_OSCILLATOR;
-
- /* 计算主频因子 */
- Extern_ad9958_data._2_32_divide_system_clock_and_pll_divider_ratio = 4294967296.0 / Extern_ad9958_data.system_clock;
-
- data[0] = ((uint8_t)Extern_ad9958_data.pll_divider_ratio << 2) | 0x80;
- data[1] = 0x51;
-
- ad9958WriteDatas(0x01, data, 3);
- }
- /*
- * Return: void
- * Parameters: Frequency: 频率值(0.116416 ~~~ 200000000.0)
- * Description: 设置要输出的频率
- */
- void ad9958SetFrequency(float Frequency)
- {
- uint32_t frequency_tuning_word;
- uint8_t data[4] = {0, 0, 0, 0};
-
- /* frequency_tuning_word = Frequency * 2^32 / (SystemClock * PLLDividerRatio) */
- frequency_tuning_word = Frequency * Extern_ad9958_data._2_32_divide_system_clock_and_pll_divider_ratio;
-
- data[0] = frequency_tuning_word >> 24;
- data[1] = frequency_tuning_word >> 16;
- data[2] = frequency_tuning_word >> 8;
- data[3] = frequency_tuning_word >> 0;
-
- ad9958WriteDatas(0x04, data, 4);
- }
- /*
- * Return: void
- * Parameters: Phase: 相位值(0.0 ~~~ 360.0)
- * Description: 设置要输出的相位
- */
- void ad9958SetPhase(float Phase)
- {
- uint16_t phase_offset_word;
- uint8_t data[2] = {0, 0};
-
- /* phase_offset_word = Phase * 2^14 / 360 */
- phase_offset_word = Phase / 360.0f * 16384.0f;
-
- phase_offset_word &= 0x3FFF;
-
- data[0] = phase_offset_word >> 8;
- data[1] = phase_offset_word >> 0;
-
- ad9958WriteDatas(0x05, data, 2);
- }
- /*
- * Return: void
- * Parameters: Amplitude: 幅度衰减系数(0.0 ~~~ 1.0)
- * Description: 设置幅度衰减系数
- */
- void ad9958SetAmplitude(float Amplitude)
- {
- uint16_t amplitude_scale_factor;
- uint8_t data[3] = {0, 0, 0};
-
- /* amplitude_scale_factor = Amplitude * 2^10 */
- amplitude_scale_factor = Amplitude * 1023.0f;
-
- amplitude_scale_factor &= 0x0003FF;
-
- data[1] = (amplitude_scale_factor >> 8) | 0x10;
- data[2] = amplitude_scale_factor >> 0;
- ad9958WriteDatas(0x06, data, 3);
- }
- /*
- * Return: void
- * Parameters: Level: 进制选择(0 ~ 3)
- * Description: 设置调制进制(2, 4, 8, 16)
- */
- void ad9958ModulationLevelSelection(ModulationLevel_TypeDef Level)
- {
- uint8_t data[3] = {0, 0, 0};
-
- Level &= 0x03;
-
- data[0] = ((uint8_t)Extern_ad9958_data.pll_divider_ratio << 2) | 0x80;
- data[1] = 0x50 | Level;
-
- ad9958WriteDatas(0x01, data, 3);
- }
- /*
- * Return: void
- * Parameters: Mode: 调制模式(AD9958_AMPLITUDE, AD9958_FREQUENCY, AD9958_PHASE)
- * Description: 设置调制模式
- */
- void ad9958ModulationTypeConfiguration(ModulationConfiguration_TypeDef Mode, AD9958LinearSweepState_TypeDef NewState)
- {
- uint8_t data[4] = {0, 0, 0};
-
- NewState &= 0x01;
-
- data[0] = Mode << 6;
- data[1] = 0x03 | (NewState << 6);
- data[2] = 0x00;
- ad9958WriteDatas(0x03, data, 3);
- }
- /*
- * Return: void
- * Parameters: Rising: 上升时间隔时间(纳秒); Falling: 下降时间隔时间(纳秒)
- * Description: 设置扫描间隔时间
- */
- void ad9958SetBlankingTimeNs(float Rising, float Falling)
- {
- uint8_t data[2] = {0, 0};
-
- Falling *= (Extern_ad9958_data.system_clock / 4000000000.0f);
- Rising *= (Extern_ad9958_data.system_clock / 4000000000.0f);
-
- if(Falling < 1)
- Falling = 1;
- else if(Falling > 255)
- Falling = 255;
-
- if(Rising < 1)
- Rising = 1;
- else if(Rising > 255)
- Rising = 255;
-
- data[0] = Falling;
- data[1] = Rising;
- ad9958WriteDatas(0x07, data, 2);
- }
- /*
- * Return: void
- * Parameters: Frequency: 频率值(0.116416 ~~~ 200000000.0)
- * Description: 设置上升扫描每次增加的频率
- */
- void ad9958SetFrequencyRisingLSR(float Frequency)
- {
- uint32_t frequency_tuning_word;
- uint8_t data[4] = {0, 0, 0, 0};
-
- /* frequency_tuning_word = Frequency * 2^32 / (SystemClock * PLLDividerRatio) */
- frequency_tuning_word = Frequency * Extern_ad9958_data._2_32_divide_system_clock_and_pll_divider_ratio;
-
- data[0] = frequency_tuning_word >> 24;
- data[1] = frequency_tuning_word >> 16;
- data[2] = frequency_tuning_word >> 8;
- data[3] = frequency_tuning_word >> 0;
-
- ad9958WriteDatas(0x08, data, 4);
- }
- /*
- * Return: void
- * Parameters: Frequency: 频率值(0.116416 ~~~ 200000000.0)
- * Description: 设置下降扫描每次减少的频率
- */
- void ad9958SetFrequencyFallingLSR(float Frequency)
- {
- uint32_t frequency_tuning_word;
- uint8_t data[4] = {0, 0, 0, 0};
-
- /* frequency_tuning_word = Frequency * 2^32 / (SystemClock * PLLDividerRatio) */
- frequency_tuning_word = Frequency * Extern_ad9958_data._2_32_divide_system_clock_and_pll_divider_ratio;
-
- data[0] = frequency_tuning_word >> 24;
- data[1] = frequency_tuning_word >> 16;
- data[2] = frequency_tuning_word >> 8;
- data[3] = frequency_tuning_word >> 0;
-
- ad9958WriteDatas(0x09, data, 4);
- }
- /*
- * Return: void
- * Parameters: Data: 数据; Mode: 调制模式; Channel: 备用通寄存器
- * Description: 设置扫描终止频率
- */
- void ad9958SetChannelWord(float Data, ModulationConfiguration_TypeDef Mode, uint8_t CW_number)
- {
- uint32_t word = 0;
- uint8_t data[4] = {0, 0, 0, 0};
-
- switch(Mode)
- {
- /* amplitude_scale_factor = Amplitude * 2^10 */
- case AD9958_AMPLITUDE: word = (uint32_t)(Data * 1023.0f) << 22; break;
-
- /* frequency_tuning_word = Frequency * 2^32 / (SystemClock * PLLDividerRatio) */
- case AD9958_FREQUENCY: word = Data * Extern_ad9958_data._2_32_divide_system_clock_and_pll_divider_ratio; break;
-
- /* phase_offset_word = Phase * 2^14 / 360 */
- case AD9958_PHASE: word = (uint32_t)(Data / 360.0f * 16384.0f) << 18; break;
-
- default: break;
- }
-
- data[0] = word >> 24;
- data[1] = word >> 16;
- data[2] = word >> 8;
- data[3] = word >> 0;
-
- ad9958WriteDatas(0x09 + CW_number, data, 4);
- }
复制代码
附件里面是AD9958 AD9959的STM32代码:
dds.7z
(3.96 MB, 下载次数: 315)
|