Dear Friends,
I am trying to initialize DAC5688.
Clock2 input is 50.0Mhz
Interpolation value i have selected is 8
My desired IF is 21.4MHz
I have configured DAC5688 for interleaved data on Input-A.
value of PLL_M is 16 and PLL_N is 2
my FDAC should be 400MHZ and i can observe 100.0MHZ on Clock1.
i expect the output to be 21.4MHz at DAC_A OUT but i dont see only a DC level.
I would request forum members to please see my code below and suggest me if i am doing anything wrong.
Following is my code to initialize DAC5688
//------------------------------------------------------------------------------
// Function: initDAC5688()
// Inputs:
// instruction byte as char instrByte
// char data byte as char byte
// Returns:
// Value read as char
// Description:
// The function initializes DAC5688
//------------------------------------------------------------------------------
void initDAC5688(void)
{
char value;
// CONFIG1 Register
value = 0x00
| (1<<6) //insel_mode[1:0]; Farrukh.. Select A input for both channels
| (0<<5) //unused
| (0<<4) //synchr_clkin
| (1<<3) //twos; Farrukh.. 1=>twos complement
| (0<<2) //inv_inclk; Farrukh.. 0=>no inversion
| (3<<0); //interp_value[1:0]; Farrukh.. 3=>X8 interpolation
dac5688_write (CONFIG1, value);
// CONFIG2 Register
value = 0x00
| (0<<7) //diffclk_ena; Farrukh.. 0=>single ended clock
| (0<<6) //clk1_in_ena
| (0<<5) //clk1c_ in_ena; Farrukh.. 0=>Pin acts as PLL_LOCK status
| (0<<4) //clko_SE_hold
| (0<<3) //fir4_ ena
| (0<<2) //qmc_ offset_ena
| (0<<1) //qmc_ corr_ena
| (1<<0); //mixer_ena
dac5688_write (CONFIG2, value);
// CONFIG3 Register
value = 0x00
| (0<<6) //diffclk_dly(1:0)
| (0<<4) //clko_dly(1:0)
| (0<<0); //Reserved(3:0)
dac5688_write (CONFIG3, value);
// CONFIG4 Register
value = 0x00
| (1<<7) //ser_dac_ data_ena; Farrukh.. this can be set to test DAC from SPI
| (0<<5) //output_delay(1:0)
| (0<<4) //B_equals_A
| (0<<3) //A_equals_B
| (0<<2) //unused
| (0<<1) //reva
| (0<<0); //revb
dac5688_write (CONFIG4, value);
// CONFIG5 Register; Farrukh.. Leave at DEFAULT
value = 0x00
| (1<<7) //sif4
| (0<<6) //sif_ sync_sig
| (0<<5) //clkdiv_sync_ena
| (0<<4) //clkdiv_sync_sel
| (0<<3) //Reserved
| (0<<2) //clkdiv_shift
| (1<<1) //mixer_gain
| (0<<0); //unused
dac5688_write (CONFIG5, value);
// CONFIG6 Register; Farrukh.. Leave at DEFAULT
value = 0x00; // phaseoffset(7:0)
dac5688_write (CONFIG6, value);
// CONFIG7 Register; Farrukh.. Leave at DEFAULT
value = 0x00; // phaseoffset(15:8)
dac5688_write (CONFIG7, value);
// CONFIG8 Register
value = 0x0e; // phaseadd(7:0)
dac5688_write (CONFIG8, value);
// CONFIG9 Register
value = 0x2d; // phaseadd(15:8)
dac5688_write (CONFIG9, value);
// CONFIG10 Register
value = 0xb2; // phaseadd(23:16)
dac5688_write (CONFIG10, value);
// CONFIG11 Register
value = 0x0d; // phaseadd(31:24)
dac5688_write (CONFIG11, value);
// CONFIG12 Register
value = 0x00; // qmc_gaina(7:0)
dac5688_write (CONFIG12, value);
// CONFIG13 Register
value = 0x00; // qmc_gainb(7:0)
dac5688_write (CONFIG13, value);
// CONFIG14 Register
value = 0x00; // qmc_phase(7:0)
dac5688_write (CONFIG14, value);
// CONFIG15 Register
value = 0x00
| (0<<6) //qmc_phase(9:8)
| (4<<3) //qmc_gaina(10:8)
| (4<<0); //qmc_gainb(10:8)
dac5688_write (CONFIG15, value);
// CONFIG16 Register
value = 0x00; // qmc_offseta(7:0)
dac5688_write (CONFIG16, value);
// CONFIG17 Register
value = 0x00; // qmc_offsetb(7:0)
dac5688_write (CONFIG17, value);
// CONFIG18 Register
value = 0x00
| (0<<3) //qmc_offseta(12:8)
| (0<<2) //unused
| (0<<1) //unused
| (0<<0); //unused
dac5688_write (CONFIG18, value);
// CONFIG19 Register
value = 0x00
| (0<<3) //qmc_offsetb(12:8)
| (0<<2) //unused
| (0<<1) //unused
| (0<<0); //unused
dac5688_write (CONFIG19, value);
// CONFIG20 Register
value = 0x00; // ser_dac_data(7:0)
dac5688_write (CONFIG20, value);
// CONFIG21 Register
value = 0x00; // ser_dac_data(15:8)
dac5688_write (CONFIG21, value);
// CONFIG22 Register
value = 0x00
| (0<<6) //nco_sel(1:0)
| (0<<4) //nco_reg_sel(1:0)
| (1<<2) //qmcorr_reg_sel(1:0)
| (1<<0); //qmoffset_reg_sel(1:0)
dac5688_write (CONFIG22, value);
// CONFIG23 Register
value = 0x00
| (0<<7) //unused
| (0<<6) //unused
| (0<<3) //fifo_sel(2:0)
| (0<<2) //aflag_ sel
| (0<<1) //unused
| (1<<0); //unused
dac5688_write (CONFIG23, value);
// CONFIG24 Register
value = 0x00
| (0<<4) //fifo_sync_strt(3:0)
| (0<<3) //unused
| (0<<2) //unused
| (0<<1) //unused
| (0<<0); //unused
dac5688_write (CONFIG24, value);
// CONFIG25 Register is all unused
// CONFIG26 Register
value = 0x00
| (0<<7) //io_1p8_3p3
| (0<<6) //unused
| (0<<5) //sleepb
| (0<<4) //sleepa
| (1<<3) //isbiaslpfb_a
| (1<<2) //isbiaslpf_b
| (0<<1) //PLL_ sleep
| (1<<0); //PLL_ena
dac5688_write (CONFIG26, value);
// CONFIG27 Register
value = 0x00
| (15<<3) //coarse_daca(3:0)
| (15<<0); //coarse_dacb(3:0)
dac5688_write (CONFIG27, value);
// CONFIG28 Register is Reserved
// CONFIG29 Register
value = 0x00
| (15<<3) //PLL_m(4:0) // 7 means m is 8
| (1<<0); //PLL_n(2:0) // 1 means n is 2
dac5688_write (CONFIG29, value);
// CONFIG30 Register
value = 0x00
| (0<<7) //PLL_LPF_ reset
| (0<<6) //VCO_div2
| (0<<4) //PLL_gain(1:0)
| (2<<0); //PLL_range(3:0)
dac5688_write (CONFIG30, value);
}