我编写了代码、使我从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);//打开多路复用
器}
}