ZYNQ从放弃到入门(十一)- XADC 的报警和中断

XADC 的报警和中断

f101a6d90e32bf66e2906b38f38415a4.png

Zynq SoC 监控自身电源电压和片上工作温度的能力是值得深讨的,我们可以在系统调试期间使用这种能力来验证初始电源电压和工作温度。然后,我们可以定期检查以确保这些参数在我们设计的整个测试和操作过程中保持在目标操作范围内。我们还可以在系统运行期间使用此功能作为一种预测,以确定 Zynq SoC 的环境是否存在导致故障的问题(例如,缓慢漂移的电源)。

Zynq SoC 有许多可屏蔽中断,如果警报参数超出用户定义的最大或最小参数设置,它们可以中断两个片上 ARM Cortex-A9 MPCore 处理器。XADC 有自己的专用中断,由 IRQ 39 上的两个处理器共享,正如 Zynq TRM(技术参考手册-http://www.xilinx.com/support/documentation/user_guides/ug585-Zynq-7000-TRM.pdf)的摘录所示:

2432949c3fe333a56be9e185c85a2d8f.png

这些报警参数可以在 Vivado 中的 XADC 配置期间进行设置,如下所示:

9da2b21f6f72f40f3b6b3199843679db.png

它们还可以在执行软件期间使用提供的 xadc_ps.h 函数进行设置。例如:

XAdcPs_SetAlarmThreshold(XADCInstPtr, XADCPS_ATR_TEMP_LOWER,(TempRawData));

XADC 提供许多警报输出信号,这些信号可以连接到在 Zynq SoC 的 PL(可编程逻辑)中实现的其他逻辑模块。如果发生警报,就会触发这些逻辑模块启动。它们还可以驱动外部指示灯(例如 LED),这些指示灯可以位于前面板上以显示设备状态。这对于在系统风扇故障等情况下提供温度的视觉警告特别有用。

72adde030b8ef0fe8b9c6907b251b90c.png

这些警报(总共有七个,请参见上面的 TRM 中的表格)可以使用带有适当参数的函数调用来启用,由 xadcps_hw.h 提供。如果需要多个报警,则将它们组合在一起。

XAdcPs_SetAlarmEnables(XADCInstPtr,XADCPS_CFR1_ALM_TEMP_MASK);

一旦我们启用了报警,我们也使用适当的函数调用启用中断,同样使用 xadcps_hw.h 提供的函数。要一次启用多个中断,或将它们组合在一起:

XAdcPs_IntrEnable(XADCInstPtr,XADCPS_INTX_ALM0_MASK);

考虑到这一点,我们开始在 Vivado 中创建一个简单的项目,其中包括Zynq PS通过 AXI 接口连接到 XADC  。对于此示例,我没有使用任何外部模拟输入,但使用了设备的内部温度测量,它是 Zynq XADC 的一部分。

ec1b10f73da39724def3d9a795797848.png

软件将 XADC 配置为在温度高于或低于初始加电读数上下几度时发出中断。实际上,我们不希望对工作温度有如此严格的公差。然而,这是一个很好的演示 XADC 中断的应用程序,因为 Zynq SoC 正常运行期间的自热会触发中断。代码链接:

https://gitee.com/openfpga/zynq-chronicles/blob/master/main_part43.c

https://github.com/suisuisi/zynq_guide/blob/main/main_part43.c

它分为三个功能:

  • 第一部分在 Zynq SoC 上配置通用中断控制器,以便我们可以使用 XADC 中断作为中断服务程序的一部分。在发出 XADC 中断时调用它。

  • 第二部分配置 XADC,将定时器设置为安全模式,并在读取温度之前禁用所有警报。然后,它会根据刚刚读取的值分配温度上限和下限警报。设置了这些值后,该函数将设置温度警报并启用温度中断。

  • 第三部分是温度中断发生时会调用的中断服务程序。该例程将清除中断状态寄存器,禁止更多中断发生,并读取中断发生时的温度。温度读数可能不会高于中断温度,因为它会波动并且我们没有打开温度平均。

当我构建示例代码并生成启动映像时,我在 ZYNQ 板上运行了几分钟后观察到以下结果:

04207deb005bfcae9d206a3e0b705ebd.png

如图所见,中断被触发。状态更新后的数字“513”(十进制)是 XADC 中断状态寄存器中的值。

XADC 在系统和 FPGA 设计人员的工具箱中都是非常强大的工具。这个简单的例子展示了我们如何将它用于保护板子运行。在更关键的应用程序中,我们还可以将其用作防篡改策略的一部分。

86ca3fc314897c14fccf109f62ad3e06.png

ZYNQ从放弃到入门(一)MIO

7124279560e88d4f4ea3e85fb0cf67d5.png

ZYNQ从放弃到入门(二)-PS端 GPIO

ad1ab66cd23bd6d5bc0c7f83ed68518b.png

ZYNQ从放弃到入门(三)- 中断(一)

93fb629dd2d07fff795abd8f9b5560c0.png

ZYNQ从放弃到入门(四)- 中断(二)

de21f52ead248e62545a6032f456989c.png

ZYNQ从放弃到入门(五)- 专用定时器

92d438e0f451b0e6a322a6d4a7cd4578.png

ZYNQ从放弃到入门(六)- 专用看门狗

e222ea8a65690284b845af417bbb9cc4.png

ZYNQ从放弃到入门(七)-三重定时器计数器 (TTC)

c38c84c5754b2a39910eec0d649359ed.png

ZYNQ从放弃到入门(八)-PS和PL交互

8bfa9ced6535fd71fea3893f1755debc.png

ZYNQ从放弃到入门(九)-DMA

629d15a9500a664dc7e3de9fd3173a26.png

ZYNQ从放弃到入门(十)- 操作系统uC/OS

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

OpenFPGA

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值