#include "AD9833.h"
#include <math.h>
struct spi_class* spi_ad9833;
/***************************************************************************//**
* @brief Writes the value to a register.
*
* @param - regValue - The value to write to the register.
*
* @return None.
*******************************************************************************/
void AD9833_SetRegisterValue(unsigned short regValue);
/***************************************************************************//**
* @brief Initializes the SPI communication peripheral and resets the part.
*
* @return 1.
*******************************************************************************/
unsigned char AD9833_Init(void)
{
AD9833_SetRegisterValue(AD9833_REG_CMD | AD9833_RESET);
return (1);
}
/***************************************************************************//**
* @brief Sets the Reset bit of the AD9833.
*
* @return None.
*******************************************************************************/
void AD9833_Reset(void)
{
AD9833_SetRegisterValue(AD9833_REG_CMD | AD9833_RESET);
}
/***************************************************************************//**
* @brief Clears the Reset bit of the AD9833.
*
* @return None.
*******************************************************************************/
void AD9833_ClearReset(void)
{
AD9833_SetRegisterValue(AD9833_REG_CMD);
}
/***************************************************************************//**
* @brief Writes the value to a register.
*
* @param - regValue - The value to write to the register.
*
* @return None.
*******************************************************************************/
void AD9833_SetRegisterValue(unsigned short regValue)
{
if(spi_ad9833)
{
spi_ad9833->spi_set_cs(0);
spi_ad9833->spi_write_halfword(spi_ad9833,regValue);
spi_ad9833->spi_set_cs(1);
}
}
/***************************************************************************//**
* @brief Writes to the frequency registers.
*
* @param - reg - Frequence register to be written to.
* @param - val - The value to be written.
*Fclk/2^28 × FREQREG
* @return None.
*******************************************************************************/
void AD9833_SetFrequency(unsigned short reg, unsigned long val)
{
unsigned short freqHi = reg;
unsigned short freqLo = reg;
unsigned int value=0;
double temp=val/((AD9833_Frequency)/(268435456.0));
value=(int)temp;
freqHi |= (value & 0xFFFC000) >> 14 ;
freqLo |= (value & 0x3FFF);
/*写控制字Control word write(D15, D14 = 00), B28 (D13) = 1*/
AD9833_SetRegisterValue(AD9833_B28);
AD9833_SetRegisterValue(freqLo);
AD9833_SetRegisterValue(freqHi);
}
/***************************************************************************//**
* @brief Writes to the phase registers.
*
* @param - reg - Phase register to be written to.
* @param - val - The value to be written.
*2π/4096 × PHASEREG
* @return None.
*******************************************************************************/
void AD9833_SetPhase(unsigned short reg, unsigned short val)
{
unsigned short phase = reg;
phase |= val;
AD9833_SetRegisterValue(phase);
}
/***************************************************************************//**
* @brief Selects the Frequency,Phase and Waveform type.
*
* @param - freq - Frequency register used.
* @param - phase - Phase register used.
* @param - type - Type of waveform to be output.
*
* @return None.
*******************************************************************************/
void AD9833_Setup(unsigned short freq,
unsigned short phase,
unsigned short type)
{
unsigned short val = 0;
val = freq | phase | type;
AD9833_SetRegisterValue(val);
}
/***************************************************************************//**
* @brief Sets the type of waveform to be output.
*
* @param - type - type of waveform to be output.
*
* @return None.
*******************************************************************************/
void AD9833_SetWave(unsigned short type)
{
AD9833_SetRegisterValue(type);
}