矿卡|T9+点灯及XADC读取
<div class='showpostmsg'><p>在上一篇文章中,我搭建了T9+的硬件开发平台,其中添加了AXI-GPIO模块,但是在文章中没有展开说明,这篇文章就详细介绍说明一下AXI-GPIO模块的操作以及PS端GPIO的操作,附加入ZYNQ板载XADC的操作说明。</p><p></p>
<p></p>
<p></p>
<p> 从T9+矿卡的原理图中可以查到,PL端BANK35有4个led灯,PS端的MIO37和MIO38有2个红绿灯。所以在框图中添加的AXI-GPIO模块中,方向全部设置为输出,位宽设置为4bit,PS端的LED灯,在ZYNQ的配置界面中使能GPIO MIO就可以。</p>
<p> 在上篇文章中已经搭建好了Vivado工程,并且导出硬件到Vitis中,所以下面着重说一下Vitis中代码的编写。</p>
<p> 新建一个工程,选择vitis提供的hello world模板,在该模板中添加GPIO控制代码。首先是GPIO的初始化。包括PS端GPIO宏定义,PL端GPIO的宏定义,这里的宏定义其实就是模块的基地址。初始化中包括调用Xilinx官方的GPIO初始化函数,以及GPIO的方向设置和输出使能开启。</p>
<p></p>
<p></p>
<p> 这些设置完毕后,把GPIO初始化函数加入main函数中,就可以操作GPIO了。</p>
<p> 在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)</p>
<p></p>
<p> 上面的主程序中,除了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 模块。</p>
<p></p>
<p></p>
<p> XADC代码中主要包括XADC的初始化,自测以及采样模式配置。而XADC_TEST函数主要实现温度采集,PS端内核电压采集,PS端BRAM电压采集,PS端AUX电压采集以及DDR电压采集。通过串口打印采集到的数据。XADC具体可参考Xilinx官方的UG480手册。</p>
<p></p>
<p> 将以上GPIO控制代码,XADC采集代码加入hello world模板中,编译下载后,板子上的灯会每隔一秒闪烁一次,连接USB转TTL串口模块,波特率设置为115200,打开调试串口,会看到打印的XADC转换数据。</p>
<p></p>
<p> 今天总的来说主要分享了GPIO的操作以及XADC的读取。技术讨论,如有不合理地方,欢迎大家批评指正。</p>
</div><script> var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;" style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
if(parseInt(discuz_uid)==0){
(function($){
var postHeight = getTextHeight(400);
$(".showpostmsg").html($(".showpostmsg").html());
$(".showpostmsg").after(loginstr);
$(".showpostmsg").css({height:postHeight,overflow:"hidden"});
})(jQuery);
} </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script> <p>AXI-GPIO模块的操作以及PS端GPIO的操作介绍的很详细,赞</p>
<p>T9+</p>
页:
[1]