This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] LMX2572EVM:并非输出每个频率

Guru**** 2382630 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/clock-timing-group/clock-and-timing/f/clock-timing-forum/808109/lmx2572evm-not-outputting-every-frequency

器件型号:LMX2572EVM

我编写了代码、使我从101MHz 扫描到2GHz。 如果我在写入寄存器之前留下大约6个 printf 语句、我就能看到生成的所有频率、但如果对 printf 语句进行注释、则只能看到生成的几个频率。 我在代码中留下的打印语句越少、频率下降的越多。 有人知道这种情况的发生原因吗?  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Gerardo、

    您确切的加电和编程顺序是什么? 例如、

    (1) Vcc 为器件加电

    (2)将 CE 引脚拉至高电平

    (3)等待一段时间

    (4)对所有寄存器进行编程、使其锁定到101MHz

    (5)对某些寄存器进行编程、使其锁定到102MHz、依此类推。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    1)  

    LMX_SPI_WRITE (0x00、0x211E);//FCAL_HPFD_ADJ = 2、FCAL_LPFD_ADJ = 0、FCAL_EN = 1、 MUXOUT_LD_SEL = 1、复位= 1
    Lmx_SPI_WRITE (0x06、0x2802);//LDO_DLY = 5、LDO 启动延迟、使 StateMachineFrequency 为80MHz≤f < 130MHz
    LMX_SPI_WRITE (0x00、0x211C);//FCAL_HPFD_ADJ = 2、FCAL_LPFD_ADJ = 0、FCAL_EN = 1、 MUXOUT_LD_SEL = 1、RESET = 0

    2)

    针对我指定的频率计算环路中的 PLL_NUM 和 PLL_N 值。 在整个程序中、我将 PLL_DEN 保持为100。

    我还会检查我的频率范围、以便能够相应地更改 CHDIV。

    if (PLL_N > 48){
    Lmx_SPI_WRITE (0x25、0x0305);//R37 PFD_DLY_SEL
    }
    否则{LMX_SPI_WRITE (0x25、0x0205);}//R37 PFD_DLY_SEL 

    3)

    然后我放置 printf 语句、因为这样可以在频谱分析仪上显示所有频率。

    4) 4)写入寄存器

    Lmx_SPI_WRITE (0x2B、PLL_NUM); //写入 PLL_NUM 寄存器
    Lmx_SPI_WRITE (0x2A、0); //写入 PLL_NUM 寄存器
    Lmx_SPI_WRITE (0x27、100); //写入 PLL_DEN 寄存器
    Lmx_SPI_WRITE (0x26、0x0000); //写入 PLL_DEN 寄存器
    Lmx_SPI_WRITE (0x24、PLL_N);//写入 PLL_N 寄存器
    Lmx_SPI_WRITE (0x22、0x0010);//写入 PLL_N 寄存器
    Lmx_SPI_WRITE (0x00、0x211C);//打开多路复用器 

    下面是我如何写入 LMX

    uint8_t LMX_SPI_WRITE (uint8_t 地址、uint16_t 数据)
    {
    SPI_LMX_CS = 0;
    //发送28位数据
    地址=地址和0x7F;// R/W 位必须设置为0才能写入寄存器
    SWSPI_WRITE (地址、8);
    SWSPI_WRITE (DATA、16);
    SPI_LMX_CS = 1;
    返回0;
    } 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Noel、  

    感谢您再次与我取得合作。

    我想、向您展示代码将是向您展示我正在做什么的最佳方式。 也许这太多了... 请告诉我。

    谢谢!

    我发现这最后一组代码不会产生所有频率(100MHz 至2GHz)。 但是、以下代码会执行此操作。

    void sweep()
    {
    浮点 PLL_NUM = 0;
    浮点 PLL_N = 0;
    浮点 staringValue = 0;
    int pll_NUM_int = 0;
    int PLL_N_int = 0;
    浮点 PLL_NUM_LEALL = 0;
    浮点增量值= 0;
    INT 频率= 101;
    //LMX_SPI_WRITE (0x00、0x0002); //重置 R0
    对于(FREQUENCY = 101;FREQUENCY <= 2000;FREQUENCY = FREQUENCY + 1)
    {
    if (FREQUENCY == 101) //根据所需的频率更改 startingValue & incumentalValue
    {
    //staringValue = 32.32;
    startingValue = 32.32;
    增量值= 0.32;
    }
    if (FREQUENCY == 201)
    {
    startingValue = 32.16;
    增量值= 0.16;
    }
    if (FREQUENCY == 401)
    {
    startingValue = 32.08;
    增量值= 0.08;
    }
    if (frequency ==801)
    {
    startingValue = 32.04;
    增量值= 0.04;
    }
    if (FREQUENCY =1601)
    {
    startingValue = 32.02;
    增量值= 0.02;
    }
    PLL_NUM = staringValue -(int) staringValue;//将浮点值分为整数和小数部分
    PLL_N = staringValue - PLL_NUM;
    PLL_NUM_LEALL = PLL_NUM * 100;
    PLL_NUM_INT =(int) PLL_NUM_ALL;
    PLL_NUM_INT = PLL_NUM_INT + 1;
    PLL_N_int =(int) PLL_N;
    printf ("频率=%i\n、PLL_N =%i\n、PLL_NUM =%i\n"、FREQUENCY、PLL_N_int、PLL_NUM_int);
    printf ("频率=%i\n、PLL_N =%04x\n、PLL_NUM =%04x\n"、FREQUENCY、PLL_N_int、PLL_NUM_int);
    printf ("频率=%i\n、PLL_N =%04x\n、PLL_NUM =%04x\n"、FREQUENCY、PLL_N_int、PLL_NUM_int);
    printf ("频率=%i\n、PLL_N =%04x\n、PLL_NUM =%04x\n"、FREQUENCY、PLL_N_int、PLL_NUM_int);
    printf ("频率=%i\n、PLL_N =%04x\n、PLL_NUM =%04x\n"、FREQUENCY、PLL_N_int、PLL_NUM_int);
    printf ("频率=%i\n、PLL_N =%04x\n、PLL_NUM =%04x\n"、FREQUENCY、PLL_N_int、PLL_NUM_int);
    printf ("频率=%i\n、PLL_N =%04x\n、PLL_NUM =%04x\n"、FREQUENCY、PLL_N_int、PLL_NUM_int);
    printf ("频率=%i\n、PLL_N =%04x\n、PLL_NUM =%04x\n"、FREQUENCY、PLL_N_int、PLL_NUM_int);
    
    staringValue = staringValue +增量值;
    //frequency = frequency + 1;
    
    Lmx_SPI_WRITE (0x00、0x0002); //重置 R0
    if ((频率>= 101)&&(频率<= 200))
    {
    Lmx_SPI_WRITE (0x4B、0x09C0); //向 CHDIV 写入32
    }
    if ((频率>= 201)&&(频率<= 400))
    {
    Lmx_SPI_WRITE (0x4B、0x0940); //向 CHDIV 写入16
    }
    if ((频率>= 401)&&(频率<= 800))
    {
    Lmx_SPI_WRITE (0x4B、0x08C0); //Writing 8 to CHDIV
    }
    if ((频率>= 801)&&(频率<= 1600))
    {
    Lmx_SPI_WRITE (0x4B、0x0840); //向 CHDIV 写入4
    }
    if ((频率>= 1601)&&(频率<= 3200)
    {
    Lmx_SPI_WRITE (0x4B、0x0800); //将2写入 CHDIV
    }
    Lmx_SPI_WRITE (0x2B、PLL_NUM_INT);//写入 PLL_NUM 寄存器
    Lmx_SPI_WRITE (0x2A、0); //写入 PLL_NUM 寄存器
    Lmx_SPI_WRITE (0x27、100); //写入 PLL_DEN 寄存器
    Lmx_SPI_WRITE (0x26、0x0000); //写入 PLL_DEN 寄存器
    Lmx_SPI_WRITE (0x24、PLL_N_int);//写入 PLL_N 寄存器
    Lmx_SPI_WRITE (0x00、0x211C);//打开多路复用
    
    器}
    } 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Gerardo、

    恐怕我不理解这些代码。 您是否会描述加电和编程顺序? 例如、

    (1) Vcc 为器件加电

    (2)将 CE 引脚拉至高电平

    (3)等待一段时间

    (4)对所有寄存器进行编程(顺序是什么?) 以使其锁定到101MHz

    (5)对某些寄存器进行编程(顺序是什么?) 以使其锁定到102MHz、等等。