主题中讨论的其他器件:ADC09QJ1300
大家好 、
我们的客户之一提出的问题:
ADC09QJ1300测试数据
@JMODE2四通道1GHz
CH1序列正确、但缺少数字、仅为0~31、不是0~255;CH2~CH4零件数据位置发生更改。
JESD204B phy 配置
JESD204B 配置
- FPGA 项目
返回页首
系统
clk_wiz_inst0
5. 硬件拓扑图
ADC JESD 配置代码
#include "xparameters.h"
#include "xspi.h" /* SPI 设备驱动程序*/
#include "xstatus.h"
#include "stdio.h"
#include "xgpipops.h"
XSpi SpiInstance;
U8 ADC_REG[50][3]=
{
//0
{0x00、0x00、0xb0}、//重置
{0x00、0x02、0x00}、//nomal /powerdown 00 03
{0x80、0x0c、0x00}、//vender_ID 2字节
{0x82、0x70、0x00}、//vender_ID 2byte
//4.
{0x00、0x29、0xec}、//CLK_CTRL0~2.
{0x00、0x2a、0x00}、//SYSREF_inverted
{0x00、0x2b、0x15}、
//7.
{0x00、0x30、0x00}、//FS_RANGE L
{0x00、0x31、0xa0}、//fs_range H
//9.
{0x00、0x3D、0x05}、//CPLL_FBIV1
{0x00、0x3E、0x14}、//CPLL_FBIV2
{0x00、0x3f、0x4a}、//CPLL_VCOCTRL1
//12.
{0x00、0x57、0x82}、//TRIGOUT_CTRL
{0x00、0x58、0x83}、//CPLL_OVR
//14.
{0x80、0x59、0x00}、//VCO_FREQ_TRIM 读取
//15.
{0x00、0x5c、0x00}、//CPLL_RESET
{0x00、0x5d、0x41}、//VCO_CAL_CTRL
{0x80、0x5e、0x00}、//VCO_CAL_STATUS
//18
{0x00、0x61、0x01}、//CAL_EN
{0x00、0x62、0x0a}、/CAL_CFG0背景
{0x00、0x65、0x05}、//CAL_CFG1 OSREF 直流耦合
/21.
{0x80、0x6A、0x00}、//CAL_STATUS
{0x00、0x6b、0x00}、//CAL_PIN_CFG CAL_SOFT_TRIG
{0x00、0x6c、0x01}、/CAL_SOFT_TRIG
/24.
{0x02、0x00、0x01}、//JESD_EN
{0x02、0x01、0x02}、//JMODE
{0x02、0x02、0x1f}、//KM1
/27号文件
{0x02、0x04、0x00}、//单扰码器
{0x82、0x08、0x00}、//JESD_STATUS
/29.
{0x82、0x70、0x00}、//init_status
//30
{0x02、0x03、0x01}、//JCTRL
{0x02、0x05、0x00}、//test 15:时钟测试模式(0x00FF)
{0x02、0x07、0x02}、//mode k28.5
//33.
{0x02、0x08、0x03}、//单模式
{0x00、0x48、0x00}、//SER_PE
//35.
{0x00、0x37、0x46}、//LP1
{0x02、0x9a、0x06}、//LP1
{0x02、0x9b、0x00}、//LP1
{0x02、0x9C、0x14}、//LP1
//39.
{0x00、0x3c、0x00}、// PLLREFO_CTRL
};
XGpioPs GPIO;/* GPIO 设备的驱动程序实例。 *
#define GPIO_PIN_0 78
#define GPIO_PIN_1 79
U8 SPI_sendbuf[8]={0x00、0x00、0xb0};
U8 SPI_recvbuf[8]={0、};
空 InitADC (空)
{
XSpi * SpiInstancePtr = SpiInstance;
XSpi_Config *配置 Ptr;
INT 状态;
ConfigPtr = XSpi_LookupConfig (XPAR_SPI_0_DEVICE_ID);
if (ConfigPtr = NULL){
返回 XST_FAILURE;
}
状态= XSpi_CfgInitialize (SpiInstancePtr、ConfigPtr、
ConfigPtr -> BaseAddress);
if (Status!= XST_SUCCESS){
返回 XST_FAILURE;
}
状态= XSpi_SetOptions (SpiInstancePtr、 XSP_MASTER_OPTION);
if (Status!= XST_SUCCESS){
返回 XST_FAILURE;
}
/*
*启动 SPI 驱动程序、以便启用器件。
*
XSpi_Start (SpiInstancePtr);
XSpi_IntraGlobalDisable (SpiInstancePtr);
//step1 SOFT_RESET READ nIT_STATUS Vendor_ID
XSpi_SetSlaveSelect (SpiInstance、0x01);
XSpi_Transfer (SpiInstance、&ADC_REG[0]、SPI_recvbuf、3);
usleep(5000);
SPI_recvbuf[2]= 0;
while (SPI_recvbuf[2]!= 0x01)
{
XSpi_SetSlaveSelect (SpiInstance、0x01);
XSpi_Transfer (SpiInstance、&ADC_REG[3]、SPI_recvbuf、3);
}
XSpi_SetSlaveSelect (SpiInstance、0x01);
XSpi_Transfer (SpiInstance、&ADC_REG[2]、SPI_recvbuf、4);
if ((SPI_recvbuf[2]!= 0x51)|(SPI_recvbuf[3]!= 0x04)
{
xIL_printf ("读取 ADC ID 错误!\n\n"\});
返回;
}
//STEP2对 C-PLL 进行编程
ADC_REG[15][2]= 0x01;
XSpi_SetSlaveSelect (SpiInstance、0x01);
XSpi_Transfer (SpiInstance、&ADC_REG[15]、SPI_recvbuf、3);//CPLL_RESET
usleep(5000);
XSpi_SetSlaveSelect (SpiInstance、0x01);
XSpi_Transfer (SpiInstance、&ADC_REG[11]、SPI_recvbuf、3);// VCO_BIAS
XSpi_SetSlaveSelect (SpiInstance、0x01);
XSpi_Transfer (SpiInstance、&ADC_REG[9]、SPI_recvbuf、3);//PLL_P_DIV、PLL_V_DIV 和 PLL_N_DIV
XSpi_SetSlaveSelect (SpiInstance、0x01);
XSpi_Transfer (SpiInstance、&ADC_REG[10]、SPI_recvbuf、3);//PLL_P_DIV、PLL_V_DIV 和 PLL_N_DIV
XSpi_SetSlaveSelect (SpiInstance、0x01);
XSpi_Transfer (SpiInstance、&ADC_REG[16]、SPI_recvbuf、3);// VCO_CAL_EN
usleep(5000);
ADC_REG[15][2]= 0x00;
XSpi_SetSlaveSelect (SpiInstance、0x01);
XSpi_Transfer (SpiInstance、&ADC_REG[15]、SPI_recvbuf、3);//启用 CPLL
//STEP3停止 JESD204校准
ADC_REG[24][2]= 0x00;
XSpi_SetSlaveSelect (SpiInstance、0x01);
XSpi_Transfer (SpiInstance、&ADC_REG[24]、SPI_recvbuf、3);//JESD_EN = 0
ADC_REG[18][2]= 0x00;
XSpi_SetSlaveSelect (SpiInstance、0x01);
XSpi_Transfer (SpiInstance、&ADC_REG[18]、SPI_recvbuf、3);///CAL_EN = 0
// XSpi_SetSlaveSelect (SpiInstance、0x01);
// XSpi_Transfer (&SpiInstance、&ADC_REG[39]、SPI_recvbuf、3);// PLLREFO_CTRL
//
// XSpi_SetSlaveSelect (SpiInstance、0x01);
// XSpi_Transfer (&SpiInstance、&ADC_REG[34]、SPI_recvbuf、3);// SER_PE
//
// XSpi_SetSlaveSelect (SpiInstance、0x01);
// XSpi_Transfer (&SpiInstance、&ADC_REG[35]、SPI_recvbuf、3);//LP1
//
// XSpi_SetSlaveSelect (SpiInstance、0x01);
// XSpi_Transfer (&SpiInstance、&ADC_REG[36]、SPI_recvbuf、3);//LP2
//
// XSpi_SetSlaveSelect (SpiInstance、0x01);
// XSpi_Transfer (&SpiInstance、&ADC_REG[37]、SPI_recvbuf、3);//LP3
//
// XSpi_SetSlaveSelect (SpiInstance、0x01);
// XSpi_Transfer (&SpiInstance、&ADC_REG[38]、SPI_recvbuf、3);//LP4
//setp4 JMODE KM1
XSpi_SetSlaveSelect (SpiInstance、0x01);
XSpi_Transfer (SpiInstance、&ADC_REG[25]、SPI_recvbuf、3);//JMODE
XSpi_SetSlaveSelect (SpiInstance、0x01);
XSpi_Transfer (SpiInstance、&ADC_REG[31]、SPI_recvbuf、3);//test
XSpi_SetSlaveSelect (SpiInstance、0x01);
XSpi_Transfer (SpiInstance、&ADC_REG[32]、SPI_recvbuf、3);//k28.5
XSpi_SetSlaveSelect (SpiInstance、0x01);
XSpi_Transfer (SpiInstance、&ADC_REG[26]、SPI_recvbuf、3);//KM1
//setp5 SYNC_SEL SYSREF
XSpi_SetSlaveSelect (SpiInstance、0x01);
XSpi_Transfer (SpiInstance、&ADC_REG[27]、SPI_recvbuf、3);//SYNCSE
ADC_REG[4][2]= 0xa0;
XSpi_SetSlaveSelect (SpiInstance、0x01);
XSpi_Transfer (SpiInstance、&ADC_REG[4]、SPI_recvbuf、3);
//CLK_CTRL0//SYSREF_RECV_EN
usleep(1);
ADC_REG[4][2]= 0xe0;
XSpi_SetSlaveSelect (SpiInstance、0x01);
XSpi_Transfer (SpiInstance、&ADC_REG[4]、SPI_recvbuf、3);
//CLK_CTRL0//SYSREF_PROC_EN
XSpi_SetSlaveSelect (SpiInstance、0x01);
XSpi_Transfer (SpiInstance、&ADC_REG[5]、SPI_recvbuf、3);//CLK_CTRL1
XSpi_SetSlaveSelect (SpiInstance、0x01);
XSpi_Transfer (SpiInstance、&ADC_REG[6]、SPI_recvbuf、3);//CLK_CTRL2
//step6前台或后台校准模式和偏移
// XSpi_SetSlaveSelect (SpiInstance、0x01);
// XSpi_Transfer (&SpiInstance、&ADC_REG[19]、SPI_recvbuf、3);// CAL_CFG0背景
//
// XSpi_SetSlaveSelect (SpiInstance、0x01);
// XSpi_Transfer (&SpiInstance、&ADC_REG[20]、SPI_recvbuf、3);// CAL_CFG1直流耦合
//STEP7 TRIGOUT_CTRL
XSpi_SetSlaveSelect (SpiInstance、0x01);
XSpi_Transfer (SpiInstance、&ADC_REG[12]、SPI_recvbuf、3);
XSpi_SetSlaveSelect (SpiInstance、0x01);
XSpi_Transfer (SpiInstance、&ADC_REG[35]、SPI_recvbuf、3);
XSpi_SetSlaveSelect (SpiInstance、0x01);
XSpi_Transfer (SpiInstance、&ADC_REG[36]、SPI_recvbuf、3);
XSpi_SetSlaveSelect (SpiInstance、0x01);
XSpi_Transfer (SpiInstance、&ADC_REG[37]、SPI_recvbuf、3);
XSpi_SetSlaveSelect (SpiInstance、0x01);
XSpi_Transfer (SpiInstance、&ADC_REG[38]、SPI_recvbuf、3);
// MB_SLEEP (5);
//STEP8读取 VCO_CAL_DONE CPLL_LOCKED
// XSpi_SetSlaveSelect (SpiInstance、0x01);
// XSpi_Transfer (&SpiInstance、&ADC_REG[17]、SPI_recvbuf、3);
//
// XSpi_SetSlaveSelect (SpiInstance、0x01);
// XSpi_Transfer (&SpiInstance、&ADC_REG[27]、SPI_recvbuf、3);
//
// XSpi_SetSlaveSelect (SpiInstance、0x01);
// XSpi_Transfer (&SpiInstance、&ADC_REG[28]、SPI_recvbuf、3);
//
// XSpi_SetSlaveSelect (SpiInstance、0x01);
// XSpi_Transfer (&SpiInstance、&ADC_REG[31]、SPI_recvbuf、3);
//
// XSpi_SetSlaveSelect (SpiInstance、0x01);
// XSpi_Transfer (&SpiInstance、&ADC_REG[32]、SPI_recvbuf、3);
//
// XSpi_SetSlaveSelect (SpiInstance、0x01);
// XSpi_Transfer (&SpiInstance、&ADC_REG[33]、SPI_recvbuf、3);
//STEP9 CAL_EN JESD_EN
ADC_REG[18][2]= 0x01;
XSpi_SetSlaveSelect (SpiInstance、0x01);
XSpi_Transfer (SpiInstance、&ADC_REG[18]、SPI_recvbuf、3);///CAL_EN = 1
// mb_sleep (10);
ADC_REG[24][2]= 0x01;
XSpi_SetSlaveSelect (SpiInstance、0x01);
XSpi_Transfer (SpiInstance、&ADC_REG[24]、SPI_recvbuf、3);//JESD_EN = 1
//step10触发前台校准
// ADC_REG[23][2]= 0;
// XSpi_SetSlaveSelect (SpiInstance、0x01);
// XSpi_Transfer (&SpiInstance、&ADC_REG[23]、SPI_recvbuf、3);
//
// MB_SLEEP (1);
//
// ADC_REG[23][2]= 1;
// XSpi_SetSlaveSelect (SpiInstance、0x01);
// XSpi_Transfer (&SpiInstance、&ADC_REG[23]、SPI_recvbuf、3);
// MB_SLEEP (1);
// 睡眠(5);
// XSpi_SetSlaveSelect (SpiInstance、0x01);
// XSpi_Transfer (&SpiInstance、&ADC_REG[21]、SPI_recvbuf、3);
// XGpio_SetDataDirection (&GPIO1、Channel1、WRITE8);
// XGpio_DiscerteWrite (&GPIO1、Channel1、0x01);
// XGpio_DiscerteWrite (&GPIO1、Channel1、0x00);
}
/********* /
/**
*
*主函数。
*
*@param 无
*
*@返回 XST_FAILURE。
*
*@注意 无限循环、因此返回失败!
*
秘书长的报告 /
//XPAR_JESD204_PHY_0_BASEADDR
//XPAR_JESD204_0_BASEADDR
int main (空)
{
INT 状态;
XGpioPs_Config *配置 Ptr;
/*初始化 GPIO 驱动程序。 *
ConfigPtr = XGpioPs_LookupConfig (XPAR_XGPOPS_0_DEVICE_ID);
状态= XGpioPs_CfgInitialize (&GPIO、ConfigPtr、
ConfigPtr->BaseAddr);
if (Status!= XST_SUCCESS){
返回 XST_FAILURE;
}
InitADC();//star ADC clk
睡眠(2);
XIL_Out32 (XPAR_JESD204_PHY_0_BASEADDR + 0x604、0x0F);//RXPOLARITY
XIL_Out32 (XPAR_JESD204_PHY_0_BASEADDR + 0x420、1);//TX 复位 phy
XIL_Out32 (XPAR_JESD204_PHY_0_BASEADDR + 0x424、1);//复位 phy
usleep(1000);
XIL_Out32 (XPAR_JESD204_PHY_0_BASEADDR + 0x424、0);//复位 phy
usleep(1000);
XIL_Out32 (XPAR_JESD204_0_BASEADDR + 0x004、2);//复位
usleep(1000);
XIL_Out32 (XPAR_JESD204_0_BASEADDR + 0x004、0);//复位
usleep (100000);
//sysref_en
XGpioPs_SetOutputEnablePin (&GPIO、GPIO_PIN_1、1);
XGpioPs_SetDirectionPin (&GPIO、GPIO_PIN_1、1);
XGpioPs_WritePin (&GPIO、GPIO_PIN_1、1);
usleep(40);
XGpioPs_WritePin (&GPIO、GPIO_PIN_1、0);
usleep(10);
返回0;
}
此致、
罗美