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