用ADI官方源码构建任意Xilinx的ZYNQ平台下的ADI芯片控制程序(2)——软件程序调试篇

用ADI官方源码构建任意Xilinx的ZYNQ平台下的ADI芯片控制程序(1)——硬件平台搭建篇.

用ADI官方源码构建任意Xilinx的ZYNQ平台下的ADI芯片控制程序(2)——软件程序调试篇.

用ADI官方源码构建任意Xilinx的ZYNQ平台下的ADI芯片控制程序(2)——软件程序调试篇


全文以在Xilinx xc7z020clg400-2平台下控制AD7616为例讲解,对于其他xilinx平台、其他ADI芯片方法都是差不多的


1、下载准备文件

大家可以参考硬件平台搭建篇里面怎么能进到下图的界面,然后选择自己的开发平台对应的Release Notes,进去之后到网页下方找到这个No-Os repository然后进去该页面,下载这个压缩包。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
下载好之后在这个路径no_OS\no-OS-2019_R1\ad7616-sdz里面找到SDK工程需要的源文件,这些源文件是对应于ADI这个型号的评估板,所有需要的都是后缀是.h和.c的文件。
在这里插入图片描述
在这里插入图片描述

2、调试软件程序

在上一篇博客中,我们完成了硬件平台的搭建并且编译成功,这个时候launch SDK,然后在SDK里面新建Application project,选择一个空白模板,将NO-OS中的no-OS-2019_R1\ad7616-sdz路径下的这几个文件复制到工程的scr文件夹中
在这里插入图片描述
在这里插入图片描述
这里说一个官方给的sdk程序中一个错误的地方,从IP库ad7616的HDL代码中可以知道,它的读偏移地址是0x113,写是0x114,而且这个地址是实际偏移地址右移2位之后得到的,这个可以到HDL程序中查证(因为一个地址占了4B)。所以0x113和0x114乘以4才是sdk程序中实际的偏移地址。因为官方漏写了0x448地址本来的东西,然后把下面读和写的偏移地址上移上来,不改这两个参数会导致无法读写AD7616的寄存器。截图3是我更正之后的。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
按照上面修改中,官方给的程序就可以用了,但是程序中没有写显示程序。从这行代码知道采集的结果写到了这个地址,查看调用函数知道,这个地址是ADC_DDR_BASEADDR,所以这里写一个读程序。这个时候结果就会通过串口打印出来,然后根据实际情况设置串口参数,运行程序就可以看到打印的数据了。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
程序默认是采集V0A和V0B通道的电压,采集电压范围是-10~+10v,假如要修改可以自己去看AD7616的芯片手册。下面是我把采样改到V4A和V4B,采集范围正负5v。
在这里插入图片描述

在这里插入图片描述
其中一个采集通道接3.3v,一个接地的采集结果。根据芯片手册给的计算方法,结果正确,调试成功
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
下面再展示一个我封装的采集16个通道的程序,因为我看芯片手册,没找到轮询的方式采集的配置,所以每次采集完两个通道,再立马换到下一个通道。这里说一下,为什么ad7616_capture_parallel中的参数配置是每个通道采样两次。因为采样一次,在DMA传输时会出错,导致写DDR的时候会把相邻的两次32位数据写到同一个DDR地址,尽管我DDR的地址确定已经做了累加,可能是ADI写的IP核自身的问题。因为每次采集的数据是32位,且采样两次。所以DDR的地址每次是加8。

还有函数头尾都有DDR cache失能和使能,因为在打印信息里面看到数据采集的是对的,但是和通道对不上,即采样的16个通道的数据都有,且是对的,但是个别数据顺序和通道顺序对不上。怀疑读写DDR的时候真实的数据可能在cache中。所以先禁言DDR cache,让CPU直接操作DDR。测了几次没出问题,还需要多验证几次,目前未验证。

放一篇DDR cache博客 Zynq Cache问题的解决方法
在这里插入图片描述

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值