#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. spring事物与传播行为

    一.事物的概念 事务指逻辑上的一组操作,组成这组操作的各个单元,要不全部成功,要不全部不成功. 作用:事物就是保证数据的一致性 事物的特性:事务必须服从ISO/IEC所制定的ACID原则.ACID是原 ...

  2. git常用命令一、git cherry-pick

    在自己的分支查看想要合并的节点的commit id : Git log —oneline -3   //查看最新的三个提交 commit id 切换到总分支: Git fetch Git pull G ...

  3. echarts 页面对应更改

    ---legrnd legend: { icon: "circle", orient: 'vertical', right: 10, top: 20, bottom: 20, da ...

  4. WebSocket介绍,与Socket的区别

    WebSocket介绍与原理 WebSocket protocol 是HTML5一种新的协议.它实现了浏览器与服务器全双工通信(full-duplex).一开始的握手需要借助HTTP请求完成. ——百 ...

  5. 配置webpack.config.js中的文件

    webpack.config.js文件中,主要包括 entry:入口文件 output:出口文件 module:模块 plugins:插件 这几部分 1.基本配置 运行 webpack 这一命令可以将 ...

  6. cucumber测试项目报错

    [INFO] Scanning for projects... [WARNING] [WARNING] Some problems were encountered while building th ...

  7. 0. Java虚拟机系列备忘预览图

    打算把Java虚拟机这块单独弄一个主题出来,做做备忘,结构如图所示: 后面还有一部分待更新...

  8. 第十一节:WebApi的版本管理的几种方式

    一. 背景和方案 1. 多版本管理的概念 Android .IOS等 App 存在着多版本客户端共存的问题:App 最新版已经升级到了5.0 了,但是有的用户手机上还运行着 4.8.3.9 甚至2.2 ...

  9. 前端面试题整理—Node篇

    1.node有哪些特征,与其他服务器端对比 特征:单线程.事件驱动.非阻塞I/O node 无法直接渲染静态页面,提供静态服务 node 没有根目录的概念 node 必须通过路由程序指定文件才能渲染文 ...

  10. 配置rpm包安装的jdk环境变量

    最近在搭建james邮件服务的时候,由于这个服务是用Java开发的,之前这台服务器跑过tomcat服务,故有Java环境,就没在意有无配置环境变量,但在启动james的时候报没有配置环境变量: 那么问 ...