惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

W
WeLiveSecurity
The Last Watchdog
The Last Watchdog
Application and Cybersecurity Blog
Application and Cybersecurity Blog
G
Google Developers Blog
博客园 - 叶小钗
雷峰网
雷峰网
人人都是产品经理
人人都是产品经理
博客园_首页
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园 - 三生石上(FineUI控件)
Help Net Security
Help Net Security
Cloudbric
Cloudbric
AI
AI
N
News | PayPal Newsroom
博客园 - 聂微东
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 【当耐特】
Forbes - Security
Forbes - Security
美团技术团队
Stack Overflow Blog
Stack Overflow Blog
SecWiki News
SecWiki News
H
Heimdal Security Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
MyScale Blog
MyScale Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
P
Proofpoint News Feed
S
Security @ Cisco Blogs
Google DeepMind News
Google DeepMind News
V
V2EX
大猫的无限游戏
大猫的无限游戏
阮一峰的网络日志
阮一峰的网络日志
S
Security Affairs
L
LangChain Blog
The Hacker News
The Hacker News
F
Full Disclosure
aimingoo的专栏
aimingoo的专栏
Hacker News - Newest:
Hacker News - Newest: "LLM"
腾讯CDC
Webroot Blog
Webroot Blog
A
About on SuperTechFans
H
Hacker News: Front Page
Cyberwarzone
Cyberwarzone
WordPress大学
WordPress大学
L
LINUX DO - 热门话题
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Attack and Defense Labs
Attack and Defense Labs
M
MIT News - Artificial intelligence

博客园 - 所长

Software-Defined Radio for Engineers 一 频谱仪 N9020A 操作步骤记录 FPGA-CAN MAC 层 IP 核测试(二) 源码阅读 libero reg 编译时 占用 RAM 资源 而不是 LUT 资源 加扰和解扰 FPGA-CAN MAC 层 IP 核测试(一) 上板实测 Microchip SoftConsole v2022.2-RISC-V-747 polarfire soc 裸机例程中 链接文件 mpfs-envm-lma-scratchpad-vma.ld 分析 FlashPro5 导致 window11 蓝屏 libero verilog 模块例化时,信号不存在 默认是 不连接 A3P250 在线 debug 抓取信号 Identify 在线逻辑分析仪 MPFS250T MSS 引脚 上下拉配置 如何在 libero 中 写一个 axi4 slave 总线的 IP核 可以 和 CoreAXI4Interconnect 连接 (五) 官方参考 verilog 按键消抖模块 如何在 libero 中 写一个 axi4 slave 总线的 IP核 可以 和 CoreAXI4Interconnect 连接 (四) axi-lite 信号抓取 libero Active Probes 如何在 libero 中 写一个 axi4 slave 总线的 IP核 可以 和 CoreAXI4Interconnect 连接 (三) C代码测试 访问卡死 如何在 libero 中 写一个 axi4 slave 总线的 IP核 可以 和 CoreAXI4Interconnect 连接 (二) axi-lite 如何在 libero 中 写一个 axi4 slave 总线的 IP核 可以 和 CoreAXI4Interconnect 连接(一)libero 设置把模块信号变总线方式 libero 2025.2 Macro Library User Guide for SmartFusion 2 and IGLOO 2 FPGAs 如何在 libero 中 写一个 axi4 slave 总线的 IP核 可以 和 CoreAXI4Interconnect 连接 (零) MSS CFG MPFS250T FLASH 只有 128KB 调整代码优化 AD9361 SPI no-os 文件移植 SoftConsole MPFS250T 初学(七) 初始化日志记录 AD9361 SPI no-os 文件移植 SoftConsole MPFS250T 初学(六) 开启 日志打印 Calibration TIMEOUT (0x247, 0x2) AD9361 SPI no-os 文件移植 SoftConsole MPFS250T 初学(五) ad9361_check_cal_done 卡死 AD9361 SPI no-os 文件移植 SoftConsole MPFS250T 初学(四) ad9361_init 编译报错 和 读取 AD9361 ID AD9361 SPI no-os 文件移植 SoftConsole MPFS250T 初学(三) 接口适配到自己的板子 AD9361 SPI no-os 文件移植 SoftConsole MPFS250T 初学(一) 驱动代码移植 RS422 差分 逻辑分析仪 抓包 libero Simulate - ModelSim ME 仿真 串口数据处理模块 vivado axi PS-PL 封装IP 创造自定义 外设 libero Simulate - ModelSim ME (三) 实战测试 双端口 RAM 读写 libero Simulate - ModelSim ME (二) 语法分析 libero Simulate - ModelSim ME (一) 新建工程 libero smartdebug Libero SoC CMP402 PolarFire SOC MSS 时钟源选择 polarfire Temperature and Voltage Sensor 温度和电压传感器 log2 PolarFire SoC Clock Conditioning Circuitry - CCC (PLL/DLL) 时钟源介绍(二) PolarFire SoC Clock Conditioning Circuitry - CCC (PLL/DLL) 初始化(三) PolarFire SoC Clock Conditioning Circuitry - CCC (PLL/DLL) 简单介绍(一) libero export flashpro express Job Libero MPFS250T PFSoC MSS Configurator 2025.2 DDR3 ECC 配置 Libero MPFS250T 如何使用 FPExpress 2025.2 烧录 MPFS250TS Direct C 编程后,使用 JTAG 读取的 DEVICE_INFO LOG Xilinx SDK 2019.1 使用 JTAG 将 10MB 文件 复制到 ZYNQ 的 DDR中 大约 20 秒 libero PolarFire soc SPI-DirectC 实战 dp_G5M_check_cycle_count libero PolarFire soc SPI-DirectC 实战 dp_G5M_do_program libero PolarFire soc SPI-DirectC 实战 dp_G5M_erase_action libero PolarFire soc SPI-DirectC 实战 dp_G5M_verify_digest_action
AD9361 SPI no-os 文件移植 SoftConsole MPFS250T 初学(二) AD9361 初始化流程 熟悉
所长 · 2026-05-04 · via 博客园 - 所长

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);