ZYNQ下驱动ADF5355试验成功

2023-05-16

前两个集BLOG分别给出了ADF5355接口的VERILOG设计实现以及设置频率的C语言算法,我今天试验了以,试验成功了。

首先很重要的是ADF5355寄存器配置的设置:

可以在这个基础上修改输入以及输入频率类型,其他不要动。驱动代码如下:

 
#include <stdio.h>
#include "platform.h"
#include "xil_printf.h"

#define R00 0X200960
#define R01 0X1
#define R02 0X42
#define R03 0x3

#define R04_1     0X08008B94
#define R04_0     0X10008B94

#define R04_A_LCK 0x28008B94
#define R04_D_LCK 0x30008B84

#define R05 0X800025
#define R06 0X35C0C076
#define R07 0X120000E7
#define R08 0X102D0428
#define R09 0X1110FCC9
#define R10 0XC0193A
#define R11 0X61300B
#define R12 0X1041C


#define Fref_in 40000	 //输入时钟
#define F_pfd   Fref_in  //鉴相频率
#define MODE1    16777216; //第一部分小数分频模数
#define MODE2    130;  //第二部分小数分频模数



#define IO *(unsigned int volatile *) (0x43c00000)
#define RF_EN *(unsigned int volatile *) (0x43c00004)

void WriteToADF5355(unsigned int  BUF) {while( (IO&1)!=0  ) ;IO=BUF;}

void   Write_frequence_AMP(unsigned int  Freq,unsigned int  Amp)  //写频率和幅度
//AMP ==> 0:-4dbm 1:-1dbm 2:2dbm 3:5dbm
{
 float Freq_N,Freq_temp;
 unsigned int  	Freq2VCO,INT,FRAC1,FRAC2; //整数分频,  小数分频1 小数分频2
 unsigned int  R0_temp=0;  //控制INT
 unsigned int  R4_temp=0,MODE2_temp; //改变输出的分频控制字,一共分成7段
 unsigned int  Out_Divider,RF_Divider;//输出分频控制,3位  及对应的分频数
 unsigned int  I_CP=9000;
 unsigned int  I_BLEED_N;
if((53125<=Freq)&&(Freq<106250))   { Out_Divider=6; RF_Divider=64;}  //分频段
if((106250<=Freq)&&(Freq<212500))  { Out_Divider=5; RF_Divider=32;} //
if((212500<=Freq)&&(Freq<425000))  { Out_Divider=4; RF_Divider=16;}  //
if((425000<=Freq)&&(Freq<850000))  { Out_Divider=3; RF_Divider=8; }   //
if((850000<=Freq)&&(Freq<1700000)) { Out_Divider=2; RF_Divider=4; }   //
if((1700000<=Freq)&&(Freq<3400000)){ Out_Divider=1; RF_Divider=2; }  //
if((3400000<=Freq)&&(Freq<6800000)){ Out_Divider=0; RF_Divider=1; }
  Freq_temp=Freq;
  Freq2VCO=(Freq_temp*RF_Divider)*2;//计算出2倍VCO,从B端口输出
  //计算整数分频INT;小数分频1FRAC1;小数分频2FRAC2
  Freq_temp=Freq;
  Freq_N=(Freq_temp*RF_Divider)/F_pfd; //计算出N分频值,带有小数位

  Freq_temp=Freq_N;
  INT=(unsigned int )Freq_temp;//计算出整数分频INT

  I_BLEED_N=I_CP*4/(INT*375); //计算bleed 电流对应的值
  I_BLEED_N=(unsigned int )I_BLEED_N;

  Freq_temp=(Freq_N-INT)*MODE1;
  FRAC1=(unsigned int )Freq_temp;    //计算出小数分频1-FRAC1

  Freq_temp=(Freq_N-INT)*MODE1
  Freq_temp=Freq_temp-FRAC1;
  FRAC2=(unsigned int )Freq_temp*MODE2;

  MODE2_temp=MODE2;
  WriteToADF5355((Out_Divider<<21)|(I_BLEED_N<<13)|(Amp<<4)|0X35000046);//R6
  WriteToADF5355(R04_D_LCK  |  1<<4  );  //R4-计数器复位
  WriteToADF5355(2|(MODE2_temp<<4)|(FRAC2<<18));//R2
  WriteToADF5355(1|(FRAC1<<4));  //R1
  WriteToADF5355(INT<<4);  //R0
  WriteToADF5355(R04_D_LCK);  //R4-计数器启动
	usleep(161);
  WriteToADF5355(0X200000|(INT<<4));
}


void Init_ADF5355(int mux ){
 WriteToADF5355(R12);
 WriteToADF5355(R11);
 WriteToADF5355(R10);
 WriteToADF5355(R09);
 WriteToADF5355(R08);
 WriteToADF5355(R07);
 WriteToADF5355(R06);
 WriteToADF5355(R05);
 if (mux==1)      WriteToADF5355(R04_1);    // muxout = 1
 else if (mux==2) WriteToADF5355(R04_A_LCK); // ANALOG LOCK
 else if (mux==3) WriteToADF5355(R04_D_LCK); //DIGITAL LOCK
 else             WriteToADF5355(R04_0);// muxout = 0
 WriteToADF5355(R03);
 WriteToADF5355(R02);
 WriteToADF5355(R01);
 usleep(200);
 WriteToADF5355(R00);
}

int check_if_adf5355_online(){
int i =10;unsigned int r ;
while(i--){
Init_ADF5355(1);r= IO&2 ;	 if (r==0) return 0;
Init_ADF5355(0);r= IO&2 ;	 if (r!=0) return 0;
}
return 1 ;
}

int main()
{
	int r  ;
    init_platform();
    RF_EN =1;
    print("Hello World\n\r");
    sleep(1);



    r = check_if_adf5355_online();
    if (r==0)while(1);

  Init_ADF5355(3);

  Write_frequence_AMP(1000*60 , 3);

    while(1) ;

    cleanup_platform();
    return 0;
}


已经测试过了,代码很好用。100M以内的频率输出我用示波器看了么有问题,另外用频谱仪看了几个2G的频点,也都OK。

ADF5355的接口VERILOG代码在上两个BLOG里面,没有任何修改。在VIVADO项目下包装成了AXI_LITE外设,之后用上述驱动代码控制。

{{aAxvOXMOIvVUoXMxvoxiowMwWV8xxWTxoxOIOVIUUOvwVOUiIoUvvTMMVMwovWHWX8vOUOvvviTHUToiVwiVxvvMTXIm8VmUTXmOiXmvMW88IivwmHMoiHIoVU8VvmvIWXTvvOvv8xvMovOWooTxUWMm8UmooOTvvwUIoTwvmWUoiTw8VmvoHWwMIUWOixiowiUoiXwiwwMMIiIXHwUmOWUVmXXwV8iHWOTUiwTU8xwOoV8HVmTWZz}}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ZYNQ下驱动ADF5355试验成功 的相关文章

  • 听说Zynq - 手把手教你建立第一个工程

    概述 ZYNQ 是赛灵思公司 Xilinx 推出的新一代全可编程片上系统 APSoC 它将处理器的软件可编程性与FPGA的硬件可编程性进行完美整合 注意 1 ZYNQ 是由两个主要部分组成的 一个由双核 ARM Cortex A9 为核心构
  • 听说Zynq-I/O详细信息

    概述 ZYNQ 是由两个主要部分组成的 一个由双核 ARM Cortex A9 为核心构成的处理系统 PS Processing nbsp System 和一个等价于一片FPGA的可编程逻辑 PL Programmable Logic 部分
  • ZYNQ 在linux 通过AXI_GPIO操作电平

    在petalinux 通过AXI GPIO操作电平 以zynq为例 xff0c vivado工程 xff1a axi gpio n都是选择的一位输出 xff1a 管脚约束 xff1a set property SEVERITY Warnin
  • S03_CH13_ZYNQ A9 TCP UART双核AMP例程

    S03 CH13 ZYNQ A9 TCP UART双核AMP例程 13 1概述 ZYNQ中存在两个独立的ARM核 xff0c 在很多应用场景中往往只需使用其中的1个核心即可 然而 xff0c 对于复杂的设计 xff0c 例如多任务 xff0
  • Xilinx ZYNQ FreeRTOS+Tracealyzer(移植)

    PL端配置 使用ZYNQ IP Core 打开串口 网口等所需接口 新手注意 xff1a 需要生成bit文件后 xff0c 并输出相应硬件平台 xff0c 网上教程很多 xff0c 请参考其它教程 PS端配置 1 创建任务 xff0c 注意
  • 移植FreeRTOS到 Xilinx ZYNQ Microblaze IP核

    1 xff0c 运行环境vivado2019 2 xff0c win10 ZYNQ 7000系列 2 xff0c FreeRTOS官网源码下载 https www freertos org 3 xff0c FreeRTOS 是一个迷你的实时
  • 基于ZYNQ平台的powerlink接口平台搭建

    1 xff0c 搭建powerlink接口所需硬件平台 xff1a Zynq ZC702 board used as openPOWERLINK MN AVNET expander board AES FMC ISMNET G Linux
  • Xilinx的Zynq系列,ARM和PL通过DMA通信时如何保证DDR数据的正确性。

    使用ZYNQ或者MPSoC的好处是可以通过PL逻辑设计硬件加速器 xff0c 对功能进行硬件加速 加速器和ARM之间的交互信息一般包含自定义加速指令传递 待计算数据以及计算结果 这三种交互信息为了实现高性能往往需要使用DMA进行通信 考虑两
  • ZYNQ系列(十二)linux的DMA使用

    ZYNQ系列 xff08 十二 xff09 linux的DMA使用 文章目录 ZYNQ系列 xff08 十二 xff09 linux的DMA使用前言开发环境准备工作petalinux工程建立建立工程配置内核1 配置DMA2 配置CMA 修改
  • Zynq Cache问题的解决方法

    在进行PS PL之间的DMA传输时 xff0c 不可避免会遇到Cache问题 今天在这里讲一下Cache的解决方法 其中参考了forums xilinx com的处理方法 首先解释为什么DMA会引入Cache问题 xff08 专业名称为Ca
  • 基于Xilinx ZYNQ和7 Serises FPGA的MIPI DPHY 接口实现分享

    作者 Hello Panda 这次分享一个在Xilinx FPGA实现MIPI DPHY接口的案例 包括CIS协议层 截止目前为止 Xilinx仅在Ultrascale 及其以上版本的FPGA IO可直接支持MIPI 电平输入 其他的 都需
  • ZYNQ QFLASH MX25L256 调试笔记

    该QFlash是32MB的 而ZYNQ的控制器是16MB的 所以想使用后半部分时 必须要使用4byte地址模式或者扩展模式 先调试扩展模式 在QFlash手册里面有一个写扩展模式命令 C5 写命令的时候 然后再读扩展模式寄存器 C8 就可以
  • ZYNQ平台在SDK下引导启动UBOOT

    ZYNQ芯片 Linux系统搭建完成后 希望通过QSPI Flash的方式来进行程序加载 QSPI Flash启动则需要烧录以下文件 BOOT bin fsbl elf uboot elf uImage linux内核 zynq board
  • 超过飞飞系列-ZYNQ之FPGA学习2.1Verilog语法

    一 VHDL Verilog C语言区别 VHDL 硬件描述语言 美军开发 相对难 不直观 需要专业培训 欧洲发展较好 Verilog 硬件描述语言 设计群体广泛 资源成熟 中国多采用 并行处理运行 C 软件语言 经过C的单片机程序需取码
  • ZYNQ学习之路(三):自定义IP实现PL处理PS写入BRAM的数据

    目录 一 实验简介 二 vivado部分处理 三 SDK编程 四 实验测试 五 总结 一 实验简介 ZYNQ系列嵌入式FPGA可以使PS将数据写入PL部分BRAM PL可以将数据读取后再重新写入BRAM PS将数据读出后再传走 这样可以使P
  • ZYNQ #5 - 从vivado工程开始,从emmc启动Linux

    本文从最简单的petalinux需求的vivado工程开始 建立一个能跑起来linux的vivado工程 同时将linux kernel 根文件系统部署在接到SD1接口上的emmc中 qspi flash中放置BOOT BIN uboot唤
  • VIVADO软件错误及解决办法汇总

    在VIVADO软件编写程序时会遇到很多类型的错误 写个博客记录下来防止再犯 短期可能只有几个问题 会长期保持更新 遇到问题就记录 2022 4 09 问题1 The debug port u ila 0 probe4 has 1 uncon
  • ZYNQ ARM核之SCU

    Snoop Control Unit 窥探控制单元 详情见UG585 SCU主要是解决ARM的L1和L2的缓存协调 因为两个processor的缓存是共用的 和AXI总线的ACP存取的 也就是DMA等高速中断需求的外设 SCU 块将两个 C
  • [ZYNQ随笔] uboot移植中bitstream比特流加载问题:zynq_validate_bitstream: Bitstream is not validated yet

    问题介绍 由于项目设计需要 需要频繁的更换比特流文件 之前使用petalinux生成的boot bin每次都需要合并比特流 比较麻烦 遂换了一个uboot版本 米联客默认的u boot 将bitstream放到了独立于boot bin的文件
  • ZYNQ LINUX 下 PL中断PS记录

    最近ZYNQ的项目需要 调试了PL中断PS的部分 下面将其中了解到信息记录下来 以防遗忘 如图一 图二所示 PL到PS的中断分为16个共享中断 SPI 和4个私有中断 PPI 本文用到了共享中断 着重介绍SPI中断 图一 图二 PL 侧16

随机推荐

  • windows下安装numpy,scipy遇到的问题总结

    最近开始研究3D手势识别 xff0c 下载的源码包是基于python的 xff0c 需要用到扩展包numpy scipy等 xff0c 安装过程汇总遇到的问题总结如下 xff1a 1 安装numpy 下载numpy编译包 xff0c 进入该
  • Linux大数据处理踩坑实录

    最近开发需要在linux服务器上做大数据处理 xff0c 由于对Linux开发并不是很熟悉 xff0c 因此踩了很多坑 xff0c 先作如下记录 xff1a 1 bash shell实现多进程 背景如下 需要从hadoop的hdfs上向服务
  • Deep Compression阅读理解及Caffe源码修改

    更新 xff1a 没想到这篇文章写出后有这么多人关注和索要源码 xff0c 有点受宠若惊 说来惭愧 xff0c 这个工作当时做的很粗糙 xff0c 源码修改的比较乱 xff0c 所以一直不太好拿出手 最近终于有时间整理了一下代码并开源出来了
  • Tensorflow 离线安装跳坑总结

    TensorFlow作为目前最被看好的深度学习开源框架 xff0c 又顶着Google爸爸的光环 xff0c 使得很多CNN网络的部署都基于此框架 最近开始研究GAN xff08 生成对抗网络 xff09 xff0c 鉴于大部分源码都基于T
  • ARM NEON常用函数总结

    NEON 技术是 ARM Cortex A 系列处理器的 128 位 SIMD xff08 单指令 xff0c 多数据 xff09 架构扩展 xff0c 旨在为消费性多媒体应用程序提供灵活 强大的加速功能 xff0c 从而显著改善用户体验
  • TensorRT cuda8.0 cudnn 7.0.5 tar包安装

    总体步骤参考这篇文章 https zhuanlan zhihu com p 35468450 1 准备环境 TensorRT 依赖cuda和cudnn xff0c 且根据下载的TensorRT版本 xff0c 需要严格保证cuda和cudn
  • caffe模型TensorRT部署实践(一)

    参考代码 TensorRT安装包下的samples sampleMNIST sampleMNIST cpp 1 设置使用的gpu id xff0c 如果不设置 xff0c 默认使用第0块 cudaSetDevice 3 set device
  • Ubuntu关于串口的操作(查看串口信息、串口助手、串口权限)

    一 查看本机串口信息 1 串口是否在使用 串口在 dev 目录中 xff0c 查看串口是否在使用 xff0c 可以用命令 ls l dev ttyUSB0 说明 xff1a ls l xff1a 是查看目录的命令 xff0c 直接用ls或l
  • 基于caffe的量化模型训练与部署——训练篇

    为什么需要量化 xff1f 我们知道 xff0c cnn网络的前向计算瓶颈主要集中在卷积层 xff0c 而卷积层的实质是大量的浮点数相乘 相加等运算操作 xff0c 大量的浮点数计算限制了模型在低处理器或移动端等设备中的部署 如果能将浮点运
  • get/post简单请求示例

    安装了django后使用django admin startproject demoapi创建django项目 xff0c cd demopai进入项目目录内 xff0c 创建apppython manage py startapp api
  • 什么是请求报文和响应报文?

    在了解请求报文和响应报文之前 咱们先了解下什么是HTTP协议 http协议 网络传输协议 协议 规定网络数据传输格式 http协议组成 请求报文 43 响应报文 浏览器发请求 必须是 xff1a 请求报文 服务器响应 必须是 xff1a 响
  • std::vector

    文章目录 问题处理记录std vector查找指定元素C 43 43 概念优点缺点使用 vector声明和初始化vector的基本操作二维向量vector的begin end 和 front back 的区别示例应用场景 C 43 43 中
  • 4、认识一下堆和栈

    文章目录 一 前言二 程序的内存分配方式 一 前言 因为FreeRTOS对堆和栈的理解很重要 xff0c 所以学习Freertos xff0c 先简单了解一下内存的存储方式 xff0c 堆和栈是最重要的们主要是那个返回地址 xff01 xf
  • TCP/IP详解

    前言 精通 TCP IP xff0c 熟练使用 Socket 进行网路编程 看到这句话 xff0c 有没有感到很熟悉呀 xff1f 相信很多人在投递简历的时候都看到过这条要求 xff0c 很多人会觉得我们在实际开发中一般用不到这些知识 xf
  • C语言 epoll实现IO多路复用

    友链 gcc 1 c o 1 lpthread ctrl 43 f搜索服务端代码和客户端代码获取代码 该方法也可以实现并发服务器 服务端代码 span class token comment 使用内存映射可以拷贝文件 span span c
  • 1.2 struct和class最本质区别_马鸿凯_新浪博客

    C 43 43 中的struct对C中的struct进行了扩充 xff0c 它已经不再只是一个包含不同数据类型的数据结构了 xff0c 它已经获取了太多的功能 struct能包含成员函数吗 xff1f 能 xff01 struct能继承吗
  • 在 VSCode 终端里无法使用命令

    问题原因 xff1a 导致 vscode 的终端里执行命令报错 xff0c 但在 cmd 里能正常执行 的原因是 vscode 终端不能使用命令了 解决思路 xff1a 令 vscode 终端能够使用命令 解决方案 xff1a 1 右击 V
  • 使用 FFT 进行频谱分析

    下面的示例说明了如何使用 FFT 函数进行频谱分析 FFT 的一个常用场景是确定一个时域噪声信号的频率分量 首先创建一些数据 假设是以 1000 Hz 的频率对数据进行的采样 首先为数据构造一条时间轴 xff0c 时间范围从 t 61 0
  • CRC-16 / MODBUS 校验计算方法

    CRC 16 MODBUS xff1a 1 xff09 CRC寄存器初始值为 FFFF xff1b 即16个字节全为1 xff1b 2 xff09 CRC 16 MODBUS的多项式A001H 1010 0000 0000 0001B H
  • ZYNQ下驱动ADF5355试验成功

    前两个集BLOG分别给出了ADF5355接口的VERILOG设计实现以及设置频率的C语言算法 xff0c 我今天试验了以 xff0c 试验成功了 首先很重要的是ADF5355寄存器配置的设置 xff1a 可以在这个基础上修改输入以及输入频率