《Adam Taylor玩转MicroZed系列43:使用XADCAlarms和中断.docx》由会员分享,可在线阅读,更多相关《Adam Taylor玩转MicroZed系列43:使用XADCAlarms和中断.docx(4页珍藏版)》请在第一文库网上搜索。
1、AdamTay1or玩转MicroZed系列43:使用XADC,A1arms和中断我本来打算在这篇博客中继续介绍探讨运行于ZynqSoC上的操作系统。然而由于上周有人提问过一些关于ZynqSOC外设XADC,中断和a1arms的问题,我认为我们应该快速的了解一下以及我们怎样将它们加入到系统设计中。ZynqSOC具有检测供应电压和片上工作温度的能力,这看起来非常有趣。我们可以利用这个功能在系统测试期间验证初始供应电压和工作温度。在我们的设计的整个测试和运行期间,我们可以定期的检查确保这些参数保持在规定的运行范围内。在系统运行期间我们也可以用这个功能来判别ZynqSoC的运行环境是否存在问题,可能
2、导致系统启动运行失败的问题,例如:缓慢漂移的电压和电流。ZynqSoC具有很多可屏蔽的中断,可以中断两个片上的ARMCorte-A9MPCoreProcessors,通过产生一个在用户定的的最大参数设置和最小参数设置范围外的一个警报参数。XADC拥有它专用的中断,由两个处理器内核共享,中断号为IRQ39,正如下面的从ZynqTRM(技术参考手册)中截取的图表所示:Tab1e7-3:PSandP1SharedPeriphera1Interrupts(SPI)SourceInterruptNameIRQIDStatusBits(mpcoreRegisters)RequiredTypePS-P1Si
3、gna1NameI/OAPUCPU1.0(12.T1B.BTAC)33:32Risingedge12Cache34spi.sttus.0(2)High1eve1一OCM35sp.status_03High1eve1一Reserved36spo.tynA1M(I)VgN1次n$ora1arm(P1interna1vo1tage)A1MR1VCcAUXsensora1arm(P1auxi1iaryvo1tage)A1M(3)VCCBRAM5en$ora1arm(P1BRAMvo1tage)A1M4V(XP1N1sensora1arm(PSntenuvo1tage)A1MSvccpauxSenSor
4、a1arm(PSauxi1iaryvo1tage)A1M(6)VCaXDoR次nsora1arm(PSDoRI/Ov01ia9e)OTOvertemperatureA1arm这些警报信号(总共7个,如上面图表所示)可以通过调用合适参数的函数进行使能,例如由XadCPS_hw.h文件提供的调用函数。如果需要更多的警报信号,可以通过或操作(OR)将他们集中在一起调用。一旦我们使能了警报函数,我们也可以使用合适的调用函数使能中断,同样使用XadCPS_hw.h文件提供的函数。如果想一次使能更多的中断操作,同样可以使用或(OR)操作。考虑到这一点,我在ViVadO软件中创建了一个简单的工程,将Zynq
5、PS通过AX1接口连接到XADC,例如我不会使用任何的外部模拟量输入,但是使用器件内部的温度测量功能,即ZynqXADC0使用软件配置XADC来中断处理器内核,比如出现高于或低于器件启动时的温度,增加或减少几度。现实中可能我们不需要如此严格的要求系统运行温度。然而这是一个展示XADC中断的应用,在ZynqSoC正常运行期间系统温度的变化将处罚中断操作。我已经在这篇博客中附加了程序代码,主要分为三部分功能:1 .第一部分是配置ZynqSOC的通用中断控制器,因此我们可以使用XADC中断作为这个中断服务例程的一部分,当声明XADC中断时调用。2 .第二部分是配置XADC,设置定时计数器为安全模式,
6、在读取温度前屏蔽所有警报函数。根据刚刚读取的温度设置温度警报范围的上限和下限温度值。设置好这些参数值后,就可以设置温度警报函数和使能温度中断操作。3 .第三部分是当温度中断操作发生时,中断服务程序将被调用。这个例程将会清除中断状态寄存器,屏蔽其他所有的中断发生,当中断发生时读取温度值。读取的温度可能不会高于中断温度,因为这个温度值将会不断的波动,我们不会计算温度的平均值,然而这个值会非常接近警报温度。当我编译这个例程的代码并生成启动镜像,下载到MiCroZed开发板上运行几分钟后,我观察到的结果信息如下:Xce11Dai1yb1ogXADCpart431ercphigha1arm41491Re
7、a1Temp45.919220temp1owa1arm393iRea1Texr.p30.077667TemperatureInterrupt513RawTercp41288Rea1TeIriP44.35tN正如你所看到的,中断被触发了,数字“513”(十进制)是随着XADC中断状态寄存器中的值不断更新的。对于系统和FPGA设计者来说,XADC是一个非常有用的工具。这个简单的例子展示了我们怎样使用它作为系统运行状态的预兆。在一个更重要关键的程序中,我们可以使用它作为反篡改程序的一部分。?Copyright2014Xi1inxInc.附件大小adam_tay1or_code_43.doc32.5KB