AD9361 SPI no-os 文件移植 SoftConsole MPFS250T 初学(二) AD9361 初始化流程 熟悉

 

AD9361 SPI no-os 文件移植 SoftConsole MPFS250T 初学(一) 驱动代码移植 - 所长 - 博客园

AD9361 SPI no-os 文件移植 SoftConsole MPFS250T 初学(二) AD9361 初始化流程 熟悉 - 所长 - 博客园

AD9361 SPI no-os 文件移植 SoftConsole MPFS250T 初学(三) 接口适配到自己的板子 - 所长 - 博客园

AD9361 SPI no-os 文件移植 SoftConsole MPFS250T 初学(四) ad9361_init 编译报错 和 读取 AD9361 ID - 所长 - 博客园

AD9361 SPI no-os 文件移植 SoftConsole MPFS250T 初学(五) ad9361_check_cal_done 卡死 - 所长 - 博客园

AD9361 SPI no-os 文件移植 SoftConsole MPFS250T 初学(六) 开启 日志打印 Calibration TIMEOUT (0x247, 0x2) - 所长 - 博客园

AD9361 SPI no-os 文件移植 SoftConsole MPFS250T 初学(七) 初始化日志记录 - 所长 - 博客园

 

 

上篇文章 : 已经 移植 ad9361 的文件 到 MPFS250t 的 SoftConsole  环境中, 但是 还没有 和  SPI 接口 适配 

 

官方 初始化 AD9361  例程:

no-OS/projects/ad9361/src/main.c at main · analogdevicesinc/no-OS

 

  main.c 文件 对 ad96361 进行初始化 ,使用  XILINX_PLATFORM  平台 代码解析:

 

1、初始化 spi 接口参数 操作接口 

    default_init_param.spi_param.extra = &xil_spi_param;
    default_init_param.spi_param.platform_ops = &xil_spi_ops;
 
2、设置 复位引脚 编号  和 相关 射频开关矩阵 相关控制引脚
    default_init_param.gpio_resetb.number = GPIO_RESET_PIN;
 
  • gpio_sync 用于基带同步,是实现多片AD9361内部时钟对齐的关键。

  • gpio_cal_sw1 和 gpio_cal_sw2 则用于控制射频开关矩阵,是实现射频相位校准的硬件基础

  •     default_init_param.gpio_sync.number = -1;
        default_init_param.gpio_cal_sw1.number = -1;
        default_init_param.gpio_cal_sw2.number = -1;

3、如果设备是 AD9364  或者 两发两收 使能,则额外配置

    if (AD9364_DEVICE) {
        default_init_param.dev_sel = ID_AD9364;
        tx_dac_init.num_channels = 2;
        tx_dac_init.rate = 1;
        rx_adc_init.num_channels = 2;
        rx_adc_init.num_slave_channels = 0;
    } else {
        if (!default_init_param.two_rx_two_tx_mode_enable) {
            tx_dac_init.num_channels = 2;
            tx_dac_init.rate = 1;
            rx_adc_init.num_channels = 2;
            rx_adc_init.num_slave_channels = 0;
        }
    }
    if (AD9363A_DEVICE)
        default_init_param.dev_sel = ID_AD9363A;

 

4、调用 接口 ad9361_init , 初始化 AD9361  

ad9361_init(&ad9361_phy, &default_init_param);
 
5、 初始化 滤波器
ad9361_set_tx_fir_config(ad9361_phy, tx_fir_config);
ad9361_set_rx_fir_config(ad9361_phy, rx_fir_config);
 
6、初始化 AXI dmac 接口,暂时不知 这个接口的 作用
 
// 配置 TX DMA,负责将 内存中的发送数据(例如由 CPU 准备好的正弦波查找表 dac_buffer)高速搬运到 AD9361 的发送 FIFO(最终由 DAC 转换为模拟信号)。
    status = axi_dmac_init(&tx_dmac, &tx_dmac_init);
    if (status < 0) {
        printf("axi_dmac_init tx init error: %"PRIi32"\n", status);
        return status;
    }
 
// 配置 RX DMA,负责将 AD9361 接收 FIFO 中的 ADC 采样数据高速搬运到 内存中的接收缓冲区(例如 adc_buffer),供 CPU 后续处理。
    status = axi_dmac_init(&rx_dmac, &rx_dmac_init);
    if (status < 0) {
        printf("axi_dmac_init rx init error: %"PRIi32"\n", status);
        return status;
    }
 
7、 
// 初始化 FPGA 内的 AXI DAC 控制器( axi_ad9361 专用 DAC 接口模块)。
    axi_dac_init(&ad9361_phy->tx_dac, &tx_dac_init);
 
// 选择 DAC 的数据源,决定发送数据从何处来。
    axi_dac_set_datasel(ad9361_phy->tx_dac, -1, AXI_DAC_DATA_SEL_DDS);

posted on 2026-05-04 11:46  所长  阅读(36)  评论(0)    收藏  举报

导航