数字接口选择
ZYNQ与AD9361之间是通过FMC连接器进行连接的,选用LVDS的接口方式。
CMOS的驱动能力太弱,不适合连接器的场景。
AD9361 IP核配置方式
由于系统中使用了两个AD9361,所以需要例化两个AD9361的IP核,通过配置参数ID来区分两个IP核。
在地址分配中,
AD9361_0使用的基地址为 0x7902_0000;
AD9361_1使用的基地址为 0x7904_0000。
在通过PS端来控制PL端IP核的配置时,通过AXI-Lite协议来访问不同的基地址+偏移量,进而操作不同的IP核。
自定义AXI-Lite协议的寄存器读写函数,用于控制IP核的各种参数的配置。
void AXI_REG_WRITE_AD9361_0(unsigned RegOffset, u32 Data)
{
AXI_LITE_mWriteReg(axi_lite_addr_ad9361_0,RegOffset,Data);
}
void AXI_REG_WRITE_AD9361_1(unsigned RegOffset, u32 Data)
{
AXI_LITE_mWriteReg(axi_lite_addr_ad9361_1,RegOffset,Data);
}
void AXI_REG_READ_AD9361_0(u32 *disPtr,u8 byteCnt,unsigned RegOffset)
{
*disPtr = AXI_LITE_mReadReg(axi_lite_addr_ad9361_0,RegOffset);
}
void AXI_REG_READ_AD9361_1(u32 *disPtr,u8 byteCnt,unsigned RegOffset)
{
*disPtr = AXI_LITE_mReadReg(axi_lite_addr_ad9361_1,RegOffset);
}
后面会根据具体的使用情况来介绍。
AD9361初始化
涉及到两个AD9361的初始化工作,需要创建两个结构体的指针,用于初始化的操作。
struct ad9361_rf_phy *ad9361_phy;
struct ad9361_rf_phy *ad9361_phy_b;
配置完结构体的相关参数后,通过ADI提供的初始化函数进行初始化
ad9361_init(&ad9361_phy, &default_init_param);
ad9361_init(&ad9361_phy_b, &default_init_param);
在初始化完成后,通过如下函数实现多片芯片同步,函数返回值为0表示同步成功。
u32 mcs_result = ad9361_do_mcs(ad9361_phy, ad9361_phy_b);
在同步完成后,还可以根据需要通过相应的函数进行滤波器配置、采样率设定、本振频率设定、带宽设定、增益设定、衰减设定等。