#include "config.h"
#include "CONFIG_FPGA_ALL.h"
#include "xparameters.h"
#include "xil_io.h"
#include "sleep.h" #include "ad9361_api.h"
#include "ad9361.h"
#include "xil_printf.h"
double param[];
extern struct ad9361_rf_phy *ad9361_phy;
#define CONFIG_FPGA_ALL_BASEADDR XPAR_CONFIG_FPGA_ALL_0_S00_AXI_BASEADDR
#define cfg_universal_port_addr 0x5c
#define cfg_universal_port_data 0x60 extern void cfg_universal(uint32_t addr,uint32_t data); void cfg_universal(uint32_t addr,uint32_t data)
{
CONFIG_FPGA_ALL_mWriteReg((CONFIG_FPGA_ALL_BASEADDR) ,cfg_universal_port_addr,addr);
CONFIG_FPGA_ALL_mWriteReg((CONFIG_FPGA_ALL_BASEADDR) ,cfg_universal_port_data,data);
usleep();
}
void set_register(double* param, char param_no) // "register?" command
{
uint16_t reg_addr;
uint8_t reg_val;
struct spi_device spi; if(param_no >= )
{
spi.id_no = ;
reg_addr =(uint16_t) param[];
reg_val =(uint8_t)param[];
ad9361_spi_write(&spi, reg_addr,reg_val);
// xil_printf("write register[0x%x]=0x%x\r\n", reg_addr, reg_val);
}
} void get_register(double* param, char param_no) // "register?" command
{
uint16_t reg_addr;
uint8_t reg_val;
struct spi_device spi; if(param_no >= )
{
spi.id_no = ;
reg_addr = param[];
reg_val = ad9361_spi_read(&spi, reg_addr);
// if((reg_val != 0x02) && (reg_val != 0x82) && (reg_val != 0x42))
// {
// xil_printf("/************************************\r\n");
// xil_printf("register[0x%x]=0x%x\r\n", reg_addr, reg_val);
// xil_printf("/************************************\r\n");
// }
xil_printf("register[0x%x]=0x%x\r\n", reg_addr, reg_val);
}
} /**************************************************************************//***
* @brief Gets current RX LO frequency [MHz].
*
* @return None.
*******************************************************************************/
void get_rx_lo_freq(double* param, char param_no) // "rx_lo_freq?" command
{
uint64_t lo_freq_hz; ad9361_get_rx_lo_freq(ad9361_phy, &lo_freq_hz);
lo_freq_hz /= ;
xil_printf("rx_lo_freq=%d\n", (uint32_t)lo_freq_hz);
} /**************************************************************************//***
* @brief Sets the RX LO frequency [MHz].
*
* @return None.
*******************************************************************************/
void set_rx_lo_freq(double* param, char param_no) // "rx_lo_freq=" command
{
uint64_t lo_freq_hz; if(param_no >= )
{
lo_freq_hz = param[];
lo_freq_hz *= ;
ad9361_set_rx_lo_freq(ad9361_phy, lo_freq_hz);
lo_freq_hz /= ;
xil_printf("rx_lo_freq=%d\n", (uint32_t)lo_freq_hz);
}
}
/**************************************************************************//***
* @brief Gets current TX LO frequency [MHz].
*
* @return None.
*******************************************************************************/
void get_tx_lo_freq(double* param, char param_no) // "tx_lo_freq?" command
{
uint64_t lo_freq_hz; ad9361_get_tx_lo_freq(ad9361_phy, &lo_freq_hz);
lo_freq_hz /= ;
xil_printf("tx_lo_freq=%d\n", (uint32_t)lo_freq_hz);
} /**************************************************************************//***
* @brief Sets the TX LO frequency [MHz].
*
* @return None.
*******************************************************************************/
void set_tx_lo_freq(double* param, char param_no) // "tx_lo_freq=" command
{
uint64_t lo_freq_hz; if(param_no >= )
{
lo_freq_hz = param[];
lo_freq_hz *= ;
ad9361_set_tx_lo_freq(ad9361_phy, lo_freq_hz);
lo_freq_hz /= ;
xil_printf("tx_lo_freq=%d\n", (uint32_t)lo_freq_hz);
}
} void init_ad9361_rf(void)
{
int status=;
// status=ad9361_set_no_ch_mode(ad9361_phy,3);
// xil_printf("ad9361_set_no_ch_mode=%d\r\n",status);
ad9361_set_rx_rf_port_input(ad9361_phy,A_BALANCED);
status=ad9361_en_dis_tx(ad9361_phy,,);
xil_printf("set_tx chan status=%d\r\n",status);
status=ad9361_en_dis_rx(ad9361_phy,,);
xil_printf("set_rx chan status=%d\r\n",status);
uint32_t freq_rx_rf_bw;
ad9361_set_rx_rf_bandwidth(ad9361_phy,);
ad9361_get_rx_rf_bandwidth(ad9361_phy,&freq_rx_rf_bw);
printf("***********rx_rf_bw=%ld hz\n",freq_rx_rf_bw);
ad9361_set_tx_rf_bandwidth(ad9361_phy,);
ad9361_get_tx_rf_bandwidth(ad9361_phy,&freq_rx_rf_bw);
printf("***********tx_rf_bw=%ld hz\n",freq_rx_rf_bw);
//122880000 61440000
status=ad9361_set_trx_clock_chain_freq(ad9361_phy,61.44*);
xil_printf("ad9361_set_trx_clock_chain_freq status=%d\r\n",status); param[]=; //set tx lo
set_tx_lo_freq(param, );
get_tx_lo_freq(param,); param[]=; //set rx lo
set_rx_lo_freq(param, );
get_rx_lo_freq(param,); param[]=0x006;
param[]=0x05;
set_register(param, );
get_register(param,); param[]=0x007;
param[]=0x70;
set_register(param, );
get_register(param,); ad9361_set_rx_gain_control_mode(ad9361_phy,,RF_GAIN_MGC);
ad9361_set_rx_gain_control_mode(ad9361_phy,,RF_GAIN_MGC);
ad9361_set_rx_rf_gain(ad9361_phy,,);
ad9361_set_rx_rf_gain(ad9361_phy,,);
} void cal_delay_ad9361_data(float freq)
{ init_ad9361_rf();
int status;
//122880000 61440000
status=ad9361_set_trx_clock_chain_freq(ad9361_phy,freq*);
xil_printf("ad9361_set_trx_clock_chain_freq status=%ds\r\n",status);
xil_printf("cal freq = %llu\n", freq*); #define sig_num 50 int i=,j=,k=;
int cnt_num=;
int first_data_num_temp=;
int flag=;
uint32_t send_data[sig_num];
uint32_t recv_data[sig_num];
uint32_t recv_data_t[sig_num];
for(i=;i<sig_num;i=i+)
{
send_data[i]=((rand()) & 0xFFFFFF);
}
uint8_t delay_tab[]={0x60,0x70,0x50,0x80,0x40,0x90,0x30,0xA0,0x20,0xB0,0x10,0xC0,0x0D,0xE0,0x00,0xD0,0xF0,
0x06,0x07,0x05,0x08,0x04,0x09,0x03,0x0A,0x02,0x0B,0x01,0x0C,0x0E,0x0F};
cfg_universal(,);
cfg_universal(,sig_num);
cfg_universal(,);
for (i=;i<sig_num;i++)
{
cfg_universal(,i);
cfg_universal(,send_data[i]);
usleep();
// xil_printf("%d = %x \r\n",i,send_data[i]);
}
cfg_universal(,); param[]=0x3f4;
// param[1]=0x0B;
param[]=0x00;
set_register(param, );
get_register(param,); param[]=0x3f5;
// param[1]=0x00;
param[]=0xC1;
set_register(param, );
get_register(param,); param[]=0x3f6;
param[]=0x00;
set_register(param, );
get_register(param,);
//while(1);
cfg_universal(,);
//while(1);
#define ADC_DELAY_REG_SWEEP
#ifdef ADC_DELAY_REG_SWEEP
printf("\r\nhex:");
uint8_t exti;
for(exti = ; exti < ; exti++)
{
printf("%2x ", delay_tab[exti]);
}
printf("\r\n");
#endif for ( j = ; j < ; j++)
{
#ifdef ADC_DELAY_REG_SWEEP
printf("%2x: ", delay_tab[j]);
#endif
for (i = ; i < ; i++)
{
// for(k =0 ;k<=4;k++)
// { first_data_num_temp=; param[]=0x006;
param[]=delay_tab[i];
set_register(param, );
// get_register(param,2); param[]=0x007;
param[]=delay_tab[j];
set_register(param, );
// get_register(param,2); // param[0]=0x011;
// param[1]=k;
// set_register(param, 3);
// get_register(param,2); cfg_universal(,);
cnt_num=;
while(cnt_num--)
{
status=CONFIG_FPGA_ALL_mReadReg(CONFIG_FPGA_ALL_BASEADDR,0x0A*);
// xil_printf("\r\nmdlt state = %d\r\n",status);
if(status==)
{
break;
}
}
for(cnt_num=;cnt_num<sig_num;cnt_num++)
{
cfg_universal(,cnt_num);
recv_data[cnt_num]=CONFIG_FPGA_ALL_mReadReg(CONFIG_FPGA_ALL_BASEADDR,*);
// xil_printf("\r\nmdlt state = %x\r\n",recv_data[cnt_num]);
if(recv_data[cnt_num] == send_data[] )
{
first_data_num_temp=cnt_num;
// xil_printf("&&&&&&&&%d\r\n",first_data_num_temp);
}
}
int temp=;
for(cnt_num=;cnt_num<sig_num;cnt_num++)
{
if(first_data_num_temp==)
{
// cnt_num=sig_num;
flag = -;
break; }
else
{
recv_data_t[cnt_num]=recv_data[first_data_num_temp+temp];
temp=temp+;
if((first_data_num_temp+temp)>=sig_num)
{
first_data_num_temp=;
temp=;
}
flag = ;
}
}
for(cnt_num=;cnt_num<sig_num;cnt_num++)
{
if(flag<)
{
// cnt_num=sig_num;
flag = -;
break; }
else
{
if(recv_data_t[cnt_num] == send_data[cnt_num])
{
flag = ;
}
else
{
flag = -;
break;
}
}
}
// if(flag == 1)
// {
// xil_printf("Calibration delay data successful \r\n");
// goto my_goto;
// break;
// }
if(flag == )
{
printf(" O ");
}
else
{
printf(" # ");
} cfg_universal(,);
// }
}
printf("\n");
}
if((i==) && (j==))
{
cfg_universal(,);
xil_printf("Calibration delay data failed \r\n");
}
my_goto:
cfg_universal(,);
param[]=0x3f5;
param[]=0x00;
set_register(param, );
// get_register(param,2);
}

ad9361自测试校准的更多相关文章

  1. AD9361框图

    1. Fir滤波器的阶数为64或128 而内插或抽取因子为:1.2或4. HB1和HB2的内插或抽取因子为1或2而HB3的因子为1.2或3 BB_LPF为:三阶巴特沃斯低通滤波器,3dB点频率可编程, ...

  2. AD9361

    AD9361框图   1. Fir滤波器的阶数为64或128 而内插或抽取因子为:1.2或4. HB1和HB2的内插或抽取因子为1或2而HB3的因子为1.2或3 BB_LPF为:三阶巴特沃斯低通滤波器 ...

  3. LPC1769 CAN的自测试模式

    一.背景 客户要了一块单路CAN的板子,他希望在没有其他板子的情况下进行自行测试,然后按照我写的 APP选择自收发测试选项,却无法接收到发送的信息,但是外接了一块板子就可以接收到自己发送的 信息:由于 ...

  4. HTML 5 背离贪吃蛇 写成了类似于屏幕校准

    中间写了改 改了写 还是没做出自己满意的效果 ,看来自己的确不是一个走前端的料子.当然h5还是学一点好一点 具体说来 就是 在canvas 的画布中 鼠标点击后画上一个圆形 然后就有随机的在画布上面出 ...

  5. 【5集iCore3_ADP演示视频】5-5 iCore3应用开发平台示波器和信号源校准

    iCore3双核心应用开发平台基于iCore3双核心板,包含ARM.FPGA.7寸液晶屏.双通道数字示波器.任意波发生器.电压表等模块,是一款专为电子爱好者设计的综合性电子学习系统. [视频简介]本视 ...

  6. 【5集iCore3_ADP演示视频】5-3 iCore3应用开发平台摸校准

    iCore3双核心应用开发平台基于iCore3双核心板,包含ARM.FPGA.7寸液晶屏.双通道数字示波器.任意波发生器.电压表等模块,是一款专为电子爱好者设计的综合性电子学习系统. [视频简介]本视 ...

  7. 服务端性能测试校准v1.2

    服务端性能测试工具校验v1.2 想知道压力工具实际并发多少,想知道压力工具统计响应数据准不准,来试试这款校准工具. 更新说明: 1.修正总接收请求显示上限. 2.随着响应时间增加,自动增加处理线程. ...

  8. Processing 电子罗盘校准(以 MPU9250为例)

    使用Processing 软件, 通过 arduino 输入 电子罗盘的数据,通过PC端进行校准,程序如下: import processing.serial.*; Serial myPort; Ar ...

  9. linux校准时间

    Linux下ntpdate时间同步 Ntp服务器安装配置 ntp(Network Time Protocol)协议 RedHat服务器可以下载rpm安装包,然后执行# rpm -ivh ntp-4.2 ...

随机推荐

  1. jsp学习(2)jsp标签

    1.脚本程序 脚本程序可以包含任意量的Java语句.变量.方法或表达式,只要它们在脚本语言中是有效的. 脚本程序的语法格式:<%代码片段%>您也可以编写与其等价的XML语句,就像下面这样: ...

  2. ISOMAP和MDS降维

    转载自https://blog.csdn.net/victoriaw/article/details/78497316 核心:测地线距离(dijstra最短路径获得).MDS降维 Isomap(Iso ...

  3. Power BI For Competition

    It's traditional report design, I'm insufficient for designing that if had a designer to help me wil ...

  4. 数组中的reduce 函数理解

    第一次见到reduce 是在js 的高级程序设计中,它的意思是把一个数组减少为一个数,举的例子是数组中元素的求和.它接受一个函数作为参数,函数又有两个参数,一个是prev, 前一个值,一个是next, ...

  5. 关于String的一些基础小题目

    需求一:从键盘输入一串字符串,统计数字,字母,空格,其它字符的个数 import java.util.Scanner; public class Q1 { public static void mai ...

  6. Golang 介绍与安装

    1.介绍与安装 Golang 是什么 Go 亦称为 Golang(按照 Rob Pike 说法,语言叫做 Go,Golang 只是官方网站的网址),是由谷歌开发的一个开源的编译型的静态语言. Gola ...

  7. MySQL8.0.19主从环境搭建(CentOS7)

    默认情况下,复制是异步的,从站不需要永久连接以接收来自主站的更新.根据配置,您可以复制数据库中的所有数据库,所选数据库甚至选定的表. MySQL中复制的优点包括: 横向扩展解决方案 - 在多个从站之间 ...

  8. jQuery 为动态添加的元素绑定事件

    在使用jquery的方式为元素绑定事件时,我经常使用bind或者click,但这只能为页面已经加载好的元素绑定事件.像需要用ajax的方式请求远程数据来动态添加页面元素时,显然以上几种绑定事件的方式是 ...

  9. Redis实现排行榜功能(实战)

    需求前段时间,做了一个世界杯竞猜积分排行榜.对世界杯64场球赛胜负平进行猜测,猜对+1分,错误+0分,一人一场只能猜一次.1.展示前一百名列表.2.展示个人排名(如:张三,您当前的排名106579). ...

  10. 一次使用innobackupex重新搭建主从复制报错解决方法及注意事项

    [环境介绍] 系统环境:CentOS release 6.4 (Final) + Server version: 5.7.18-log MySQL Community Server (GPL) + i ...