Hi
I'm having problems when setting up AD9176 on my custom board. I follow the star-up sequence in the data sheet. DAC PLL lock status is ok, but DLL lock status is always 0.
Here are my PLL configurations:
CLK_IN = 200M
DIV_M = 1
DIV_N = 6
DIV_VCO = 3
Fdac = (200 / 1) * 8 * 6 / 3 = 3.2G
// ------------------POWER UP------------------ // SPI_INTFCONFA Ssi_mst_adi_wr_4w(AD9176_SPI_DEV_ID, 0x0000, 0x81); // soft reset // delay 50us for(i = 0; i < 10000; i++) __asm("nop"); // SPI_INTFCONFA Ssi_mst_adi_wr_4w(AD9176_SPI_DEV_ID, 0x0000, 0x3C); // 4-wire SPI // ACLK_CTRL Ssi_mst_adi_wr_4w(AD9176_SPI_DEV_ID, 0x0091, 0x00); // power up clock receiver // CDR_RESET Ssi_mst_adi_wr_4w(AD9176_SPI_DEV_ID, 0x0206, 0x01); // take PHYs out of reset // NVM_LOADER_EN Ssi_mst_adi_wr_4w(AD9176_SPI_DEV_ID, 0x0705, 0x01); // en boot loader do { regValue = Ssi_mst_adi_rd_4w(AD9176_SPI_DEV_ID, 0x0705); }while((regValue & 0x01) != 0x00); // DAC_POWERDOWN Ssi_mst_adi_wr_4w(AD9176_SPI_DEV_ID, 0x0090, 0x00); // power on dac0 & dac1 // ------------------DAC PLL------------------ // PLL_BYPASS Ssi_mst_adi_wr_4w(AD9176_SPI_DEV_ID, 0x0095, 0x00); // use DAC PLL // DACPLL_PDCTRL0 Ssi_mst_adi_wr_4w(AD9176_SPI_DEV_ID, 0x0790, 0x00); // DACPLL_PDCTRL1 Ssi_mst_adi_wr_4w(AD9176_SPI_DEV_ID, 0x0791, 0x00); // DAC PLL require write Ssi_mst_adi_wr_4w(AD9176_SPI_DEV_ID, 0x0796, 0xE5); Ssi_mst_adi_wr_4w(AD9176_SPI_DEV_ID, 0x07A0, 0xBC); Ssi_mst_adi_wr_4w(AD9176_SPI_DEV_ID, 0x0794, 0x08); Ssi_mst_adi_wr_4w(AD9176_SPI_DEV_ID, 0x0797, 0x10); Ssi_mst_adi_wr_4w(AD9176_SPI_DEV_ID, 0x0797, 0x20); Ssi_mst_adi_wr_4w(AD9176_SPI_DEV_ID, 0x0798, 0x10); Ssi_mst_adi_wr_4w(AD9176_SPI_DEV_ID, 0x07A2, 0x7F); // delay 100ms for(i = 0; i < 100000; i++) __asm("nop"); // DAC_PLLCTRL7 regValue = ((intf.DIV_L - 1) << 6) | intf.DIV_N; Ssi_mst_adi_wr_4w(AD9176_SPI_DEV_ID, 0x0799, regValue); // L, N // DAC_PLLCTRL6 regValue = intf.DIV_M - 1; Ssi_mst_adi_wr_4w(AD9176_SPI_DEV_ID, 0x0793, regValue); // M // PLL_CLK_DIV regValue = intf.DIV_VCO - 1; Ssi_mst_adi_wr_4w(AD9176_SPI_DEV_ID, 0x0094, regValue); // VCO_DIV // delay 1ms for(i = 0; i < 1000; i++) __asm("nop"); // DAC_PLLCTRL0 Ssi_mst_adi_wr_4w(AD9176_SPI_DEV_ID, 0x0792, 0x02); // reset VCO Ssi_mst_adi_wr_4w(AD9176_SPI_DEV_ID, 0x0792, 0x00); // delay 100ms for(i = 0; i < 100000; i++) __asm("nop"); // wait PLL lock do { regValue = Ssi_mst_adi_rd_4w(AD9176_SPI_DEV_ID, 0x07B5); }while((regValue & 0x01) != 0x01); // ------------------DLL------------------ // DELAY_LINE_PD Ssi_mst_adi_wr_4w(AD9176_SPI_DEV_ID, 0x000C, 0x00); // power up DLL // DLL_UPDATE Ssi_mst_adi_wr_4w(AD9176_SPI_DEV_ID, 0x00DB, 0x00); Ssi_mst_adi_wr_4w(AD9176_SPI_DEV_ID, 0x00DB, 0x01); Ssi_mst_adi_wr_4w(AD9176_SPI_DEV_ID, 0x00DB, 0x00); // DLL_CTRL0 // Fdac < 4.5G, 0x48 -> 0x49 todo Ssi_mst_adi_wr_4w(AD9176_SPI_DEV_ID, 0x00C1, 0x48); Ssi_mst_adi_wr_4w(AD9176_SPI_DEV_ID, 0x00C1, 0x49); // Fdac > 4.5G, 0x68 -> 0x69 todo // Ssi_mst_adi_wr_4w(AD9176_SPI_DEV_ID, 0x00C1, 0x68); // Ssi_mst_adi_wr_4w(AD9176_SPI_DEV_ID, 0x00C1, 0x69); // delay 100ms for(i = 0; i < 100000; i++) __asm("nop"); // DLL_READ Ssi_mst_adi_wr_4w(AD9176_SPI_DEV_ID, 0x00C7, 0x01); // wait DLL lock do { // DLL_STATUS regValue = Ssi_mst_adi_rd_4w(AD9176_SPI_DEV_ID, 0x00C3); }while((regValue & 0x01) != 0x01);