[X]关闭
0

(基础篇)S05-CH06_AXI_Timer

摘要: 上一章我们介绍了如何设计一个Gpio中断(也就是按键中断),本章将继续为大家介绍另外一种中断——定时器中断。定时器中断是一种很重要的中断,在日常设计中,有时候就需要用到定时器中断,就比如后面我们要介绍的DM ...

软件版本:VIVADO2017.4

操作系统:WIN10

硬件平台: ARTIX-7 系列开发板

米联客(MSXBO)论坛www.osrc.cn答疑解惑专栏开通,欢迎大家给我提供!!!

6.1概述

      上一章我们介绍了如何设计一个Gpio中断(也就是按键中断),本章将继续为大家介绍另外一种中断——定时器中断。定时器中断是一种很重要的中断,在日常设计中,有时候就需要用到定时器中断,就比如后面我们要介绍的DMA测速的例子,就是要设计一个定时1秒的中断。掌握好定时器中断的设计方法,是一位工程师必须具备的技能。接下来就将为大家介绍如何设计定时器中断。

6.2 创建硬件工程

Step1:创建一个新的vivado工程,命令为system.

Step2:将第一章生成的tcl文件复制到当前文件目录中来,然后使用tcl创建一个BD文件。

Step3:点击IP添加图标,输入关键字intc,添加一个intc.

Step7:单击Run connection Automation,然后勾选所有复选框,最后点击OK。

Step9:连接Timer的中断输出引脚和intc的中断输入引脚。


6.3软件设计

Step1:单击File-New-Application Project开始创建一个SDK工程。

Step2:在新弹出来的窗口中,输入工程名字Timer_Interrupt(注意不能有非法字符)。

Step3:单击Next,然后在左侧选择Empty Application(空白工程),最后选择Finish。

Step4:在我们提供的源代码中,找到sdk_src文件夹,然后复制里面的sys_intr.h,sys_intr.c,Timer_intr.h,Timer_intr.c,main.c文件。

Step5:选中Timer_Interrupt下的src,然后按Ctrl+V将刚才复制的文件拷贝到工程中。

Step6:选中SDK工程文件,右单击选择Debug as-Debug configuration。

Step7:在弹出来的新窗口中,双击下图圈出部分,然后勾选箭头所示参数

Step8:单击APPly,然后单击Debug(进行这一步之前,先给开发板上电)。

Step9:在下图所示区域找到SDK Terminal(这是软件自带的串口调试软件,记住如何使用,下次会直接跳过具体操作),然后单击加号图标

Step10:单击加号图标之后,再新弹出来的窗口中设置好对应的端口号和波特率,然后单击OK。

6.4 程序分析

      从上一节可以看到本章程序的main函数主要是由7个子函数组成的,其中有四个是我们在上一章讲解过了的,另外三个就是本章要介绍的定时器中断的子函数,这些函数被定义在Timer_Intr.c和Timer_Intr.h中。下面我们将根据main函数中的顺序进行讲解。首先看到整体的main函数的布局:

      可以看出来,这个程序的结构与我们上一章介绍的中断的设置流程是一致的。在这个程序中,Timer_Init是定时器的初始化子函数,定位到这个函数的原函数(选中按F3),如下图所示:

      这个程序是按照MSS文件中官方提供的驱动历程修改而来,关于如何查看官方的驱动例程,如果还不熟悉的可以回去查看本季第二章的内容。在这个程序里面,所有的函数都给出了注释,这里依次来介绍一下:

      XTmrCtr_Initialize:这个函数遇到的比较多,官方的用于初始化IP的子函数。

      XTmrCtr_SetHandler:根据函数头的注释,这是一个定时计数器的处理程序,定时计数器将在产生中断时调用此函数,指定定时计数器的驱动程序的实例指针做为回调引用。根据这个介绍,可知此函数的第二个函数为中断产生后的回调函数,第三个参数为回调函数的引入参数。选中回调函数,按F3跟踪查看此回调函数的内容,如下图所示:

      这里是通过一个检测是否计数满函数IsExpired函数来对中断次数进行累加,最后通过xil_printf打印输出中断次数。

      XTmrCtr_SetOptions:这是一个功能设置子函数,这里看看第三个参数,将鼠标移动到第三个参数上面时,我们发现这些是一些16进制数,如下图所示:

       然后继续按F3跟踪这个参数,得到如下图所示界面:

      这里对这些参数做出了注释,这些参数即为定时计数器的功能操作,使能相应的操作,定时器就能进行对应的操作,就比如本程序中使用了以下操作:

     XTC_INT_MODE_OPTION:允许定时计数器中断输出;

     XTC_AUTO_RELOAD_OPTION:允许自动重装定时计数器初值;

     XTC_DOWN_COUNT_OPTION:允许倒计数;

     XTC_ENABLE_ALL_OPTION:一次启动所有定时计数器。

     本章设置的这四个参数是定时器设置中最常用到的四个操作,其他操作如果大家感兴趣,可以查阅这个IP的指导手册。

     XTmrCtr_SetResetValue:此函数用于设置初值。

     分析完了定时器初始化函数,再接着看main函数中的其他函数。来看看Timer_SetupIntrSystem这个函数,这个函数的原型如下图所示:

       这里面的这个XIntc_Connect函数在上一章已经做了介绍,这里看看其中断的回调函数,这里的结构与上一章Gpio中断有点不一样,Gpio中断的回调函数是我们自行设计的,而这里的这个回调函数确是官方设计的,我们来看看这个回调函数:

       由上图可知,这里是将一个中断服务程序作为回调函数的,这一点需要与Gpio中断区分开来。

       最后看到Timer_start这个函数,其原函数如下图所示:

       设置好了之前的参数后,就可以通过这个函数来启动定时计数器了。

       通篇下来,可以发现,通过官方提供的历程和上一章的基础,进行一个设计是比较简单的,这就是掌握了正确的设计方法的重要性。

6.5 本章小结

      本章为大家介绍了如何使用定时器中断,学完本章之后,大家要熟练的掌握如何使用官方提供的代码来加速设计自己的项目,掌握正确的设计方法。课后,也可以对本章的程序进行拓展,比如使用定时器来实现一个流水灯的操作,通过实践来加深理解。


路过

雷人

握手

鲜花

鸡蛋

最新评论

本文作者
2019-11-6 17:32
  • 1
    粉丝
  • 6279
    阅读
  • 0
    回复

关注uisrc网络

扫描关注,了解最新资讯

电话:0519-80699907
EMAIL:270682667@qq.com
地址:常州溧阳市天目云谷3号楼北楼
热门评论
排行榜