#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. 通过Linq查找重复数据

    一.模拟初始化集合数据 List<Student> students = new List<Student>() { new Student(){ Age=18,Name=&q ...

  2. Linux odoo开发环境配置

    Linux odoo开发环境配置 安装postgresql9.6 第1步:添加RPM源(通过官网获取下载地址) yum install https://download.postgresql.org/ ...

  3. Flask 源码流程,上下文管理

    源码流程 创建对象 from flask import Flask """ 1 实例化对象 app """ app = Flask(__na ...

  4. php Header 函数使用

    <?php header('HTTP/1.1 200 OK'); // ok 正常访问 header('HTTP/1.1 404 Not Found'); //通知浏览器 页面不存在 heade ...

  5. ES6中6种声明变量的方法

    相关阅读:http://es6.ruanyifeng.com/#docs/let 相关阅读:https://www.cnblogs.com/ksl666/p/5944718.html 相关阅读:htt ...

  6. mysql学习基础知识3

    1.视图 简化sql语句的编写,限制可以查看的数据 一张虚拟的表,不占任何内存,查视图时都是临时从所查的表中拿数据 特点: 对于视图的增删改查 都会同步到原始表 对原始表的修改,会同步到视图内可查看的 ...

  7. P1006 传纸条 (方格取数dp)

    题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个mm行nn列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了.幸运 ...

  8. 你值得拥有的Mac PS滤镜插件和特效处理软件合集,不要错过!

    以下几款是Mac上强大的Photoshop滤镜插件和特效,可以让我们更加高效率的使用PS,设计和处理出精美的图片. 1. Alien Skin Eye Candy Eye Candy是一款强大酷炫的P ...

  9. 【强大的PDF格式转换工具】Lighten PDF Converter OCR for Mac 6.2.0

    [简介] Lighten PDF Converter OCR 是一款Mac上强大的PDF格式转换工具,可以将PDF文档快速批量的转换为Office (Word, Excel, PowerPoint), ...

  10. NFV-based QoS provision for Software Defined Optical Access and residential networks

    文章名称:NFV-based QoS provision for Software Defined Optical Access and residential networks 发表时间:2017 ...