[原创] 矿卡|T9+点灯及XADC读取

MHB_520   2023-3-20 11:09 楼主

在上一篇文章中,我搭建了T9+的硬件开发平台,其中添加了AXI-GPIO模块,但是在文章中没有展开说明,这篇文章就详细介绍说明一下AXI-GPIO模块的操作以及PS端GPIO的操作,附加入ZYNQ板载XADC的操作说明。

640?wx_fmt=png

640?wx_fmt=png

640?wx_fmt=png

    从T9+矿卡的原理图中可以查到,PL端BANK35有4个led灯,PS端的MIO37和MIO38有2个红绿灯。所以在框图中添加的AXI-GPIO模块中,方向全部设置为输出,位宽设置为4bit,PS端的LED灯,在ZYNQ的配置界面中使能GPIO MIO就可以。

    在上篇文章中已经搭建好了Vivado工程,并且导出硬件到Vitis中,所以下面着重说一下Vitis中代码的编写。

    新建一个工程,选择vitis提供的hello world模板,在该模板中添加GPIO控制代码。首先是GPIO的初始化。包括PS端GPIO宏定义,PL端GPIO的宏定义,这里的宏定义其实就是模块的基地址。初始化中包括调用Xilinx官方的GPIO初始化函数,以及GPIO的方向设置和输出使能开启。

640?wx_fmt=png

640?wx_fmt=png

     这些设置完毕后,把GPIO初始化函数加入main函数中,就可以操作GPIO了。 640?wx_fmt=png

    在main函数中实现GPIO每隔1s翻转一次,这里的1s时间控制,通过调用xilinx官方提供的sleep();函数,需要使用该函数需要添加“sleep.h”头文件进去。关于AXI-GPIO的寄存器及ip核的详细说明,大家可以去Xilinx官网找pg-144文件查看。AXI GPIO v2.0 LogiCORE IP Product Guide (PG144) (xilinx.com)

640?wx_fmt=png

    上面的主程序中,除了PL端GPIO的操作和PS端的GPIO操作外,还加入了XADC的初始化及读取代码。在ZYNQ的PL端有一个数模混合模块——XADC,它是一个硬核。XADC包含两个模数转换器(ADC),一个模拟多路复用器,片上温度和片上电压传感器等。我们可以利用这个模块监测芯片温度和供电电压,也可以用来测量外部的模拟电压信号。ZYNQ SoC 的 XADC 模块包括两个 12 位的模数转换器,转换速率可以达到 1MSPS(每秒一百万次采样)。它带有片上温度和电压传感器,可以测量芯片工作时的温度和供电电压。用户可以设置报警阈值,用来检测温度过高或者供电电压异常等事件。除此之外,通过 XADC 内部的模拟多路复用器,它还支持最多17 路外部模拟输入信号的测量,且支持单极、双极和差分等信号类型。在 7 系列的 FPGA 中,XADC 提供了 JTAG 和 DRP(dynamic reconfiguration port)接口,用于访问其内部的状态和控制寄存器。在 ZYNQ-7000 SoC 器件中,XADC 增加了一个 PS-XADC 接口,用于 PS 中的软件控制 XADC 模块。

640?wx_fmt=png

640?wx_fmt=png

    XADC代码中主要包括XADC的初始化,自测以及采样模式配置。而XADC_TEST函数主要实现温度采集,PS端内核电压采集,PS端BRAM电压采集,PS端AUX电压采集以及DDR电压采集。通过串口打印采集到的数据。XADC具体可参考Xilinx官方的UG480手册。

640?wx_fmt=png

    将以上GPIO控制代码,XADC采集代码加入hello world模板中,编译下载后,板子上的灯会每隔一秒闪烁一次,连接USB转TTL串口模块,波特率设置为115200,打开调试串口,会看到打印的XADC转换数据。

640?wx_fmt=png

    今天总的来说主要分享了GPIO的操作以及XADC的读取。技术讨论,如有不合理地方,欢迎大家批评指正。

回复评论 (2)

AXI-GPIO模块的操作以及PS端GPIO的操作介绍的很详细,赞

点赞  2023-3-21 07:34

T9+

点赞  2024-10-26 13:11
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复