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.

[参考译文] AFE8000EVM:RX NCO 的动态变化

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

https://e2e.ti.com/support/rf-microwave-group/rf-microwave/f/rf-microwave-forum/1349526/afe8000evm-dynamic-change-of-rx-nco

器件型号:AFE8000EVM

您好!

我当前正在尝试动态更改 AFE8000EVM 的 NCO。
(我使用 zcu102电路板、并使用我的固件而不是 EVM 软件来启动 AFE)。

它不需要快速改变频率。
因此、我决定在一个通道中仅使用一个 NCO。

我首先尝试通过在 AFE80xxPG1_TRM 手册中的2.14 RX DIG 寄存器映射中的寄存器110h ~ 113h 写入频率值来更改 NCO 值。
所需的频率值为2100MHz 和2200MHz。
但是、它不起作用。

下面是我的第一次尝试。

U8 wrVal;

u16 startAddr = 0x110;

//选择 rxDig 页面,请参见 AFE80xxPG1_TRM_SBAU354_4th_March_2021.pdf 的第120页 AFE80xx 全局寄存器映射
//选择所有 RX dig A、B、~、G、H
wrVal = 0xFF;
AFE_SPI_WRITE (0x14、wrVal);

//将 FCW_UPDATE 字设置为零
wrVal = 0x0;
AFE_SPI_WRITE (0x14C、wrVal);

//频带0 NCO 设置
wrVal =频率& 0xFF;// LSB 字节
AFE_SPI_WRITE (startAddr、wrVal);

wrVal =(频率>> 8)和0xFF;
AFE_SPI_WRITE (startAddr+1、wrVal);

wrVal =(频率>> 16)& 0xFF;// LSB 字节
AFE_SPI_WRITE (startAddr+2、wrVal);

wrVal =(频率>> 24)和0xFF;
AFE_SPI_WRITE (startAddr+3、wrVal);

//将 FCW_UPDATE 字设置为1以应用更改
wrVal = 0x1;
AFE_SPI_WRITE (0x14C、wrVal);

//取消选择 RX dig 页
wrVal = 0x0;
AFE_SPI_WRITE (0x14、wrVal);

第二、我使用了宏命令。
我测试了 TRM 中给出的宏代码0x38。
下面是我的程序。 执行宏0x38后、TUNE 系统宏已被执行。
当然,这也是失败的。
我想知道我如何从固件动态地更改 NCO 值。
谢谢你。

U8 wrVal;
INT I = 0;

//页面选择
wrVal = 0x20;
AFE_SPI_WRITE (0x18、wrVal);

//选择所有 RX dig A、B、~、G、H
wrVal = 0xFF;
AFE_SPI_WRITE (0xA0、wrVal);

// NCO 和频带选择
wrVal = 0x0;
AFE_SPI_WRITE (0xA1、wrVal);

//设置频率字
wrVal =频率& 0xFF;
AFE_SPI_WRITE (0xA2、wrVal);

//设置频率字
wrVal =(频率>> 8)和0xFF;
AFE_SPI_WRITE (0xA3、wrVal);

//设置频率字
wrVal =(频率>> 16)和0xFF;
AFE_SPI_WRITE (0xA4、wrVal);

//设置频率字
wrVal =(频率>> 24)和0xFF;
AFE_SPI_WRITE (0xA5、wrVal);

wrVal = 0x3;
AFE_SPI_WRITE (0xA6、wrVal);

//宏执行
wrVal = 0x38;
AFE_SPI_WRITE (0x193、wrVal);

while (I++< 10000);

//执行调谐系统宏
wrVal = 0x0;
AFE_SPI_WRITE (0xA0、wrVal);

wrVal = 0x0;
AFE_SPI_WRITE (0xA1、wrVal);

wrVal = 0x0;
AFE_SPI_WRITE (0xA2、wrVal);

wrVal = 0x0;
AFE_SPI_WRITE (0xA3、wrVal);

wrVal = 0x0;
AFE_SPI_WRITE (0xA4、wrVal);

wrVal = 0x0;
AFE_SPI_WRITE (0xA5、wrVal);

//宏执行
wrVal = 0x36;
AFE_SPI_WRITE (0x193、wrVal);

//页面取消选择
wrVal = 0x20;
AFE_SPI_WRITE (0x18、wrVal);

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

    是否有人可以解决这个问题?

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

    您好、James:

    当您尝试直接寄存器写入时、可以在 ADC 捕获上看到什么? NCO 是完全没有改变、还是更改为不正确的频率? 您是否能够分享如何找到新 NCO 频率的 FCW?  

    我已在 AFE8000EVM 上进行了测试、能够使用下面给出的寄存器写入行更新所有通道的 NCO 频率。 我还演示了如何计算 NCO FCW。 您能在设置上尝试一下吗?  

    F_ADC = 3000 # Sample Rate
    F_NCO = 2200 # NCO Frequency 
    FCW = int(((F_NCO%F_ADC)*2**32)/F_ADC)
    
    
    device.writeReg(0x14,0xFF) # select all Rx Dig pages;
    device.writeReg(0x113,(FCW>>24)&0xFF)
    device.writeReg(0x112,(FCW>>16)&0xFF)
    device.writeReg(0x111,(FCW>>8)&0xFF)
    device.writeReg(0x110,(FCW&0xFF)) # program Rx NCO0
    device.writeReg(0x14C,0x01) # NCO is loaded only when this bit is toggled from 0 -> 1
    device.writeReg(0x14C,0x00) # Toggle bit back to 0 for next NCO load 
    device.writeReg(0x14,0x0) # page close

    此致、

    大卫·查帕罗

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

    谢谢、David。

    它解决了我的问题。

    祝你度过美好的一天!