基于ZYNQ-7000系列私有定时器中断控制器设计

工程说明:

  本次基于ZYNQ-7000系列私有定时器中断控制器设计主要实现通过ZYNQ器件自带的私有定时器完成定时功能,相对于传统的CPU软件延时,利用定时器实现能够大大提高CPU的运作效率,本次小项目整体设计不复杂,旨在于理解ZYNQ系列私有定时器控制器的原理以及用法,主要参考资料来自UG585官方文档。

平台:

  米联客ZYNQ-MZ7100FA

相关理论原理:

  前面也提到过私有定时器可以不受CPU的干预,自己独立执行【在以往我们采用sleep()延时函数时,CPU在等待延时时不能执行任何程序】,来完成计时、定时、中断以及计算来自 MIO 或 EMIO 引脚的信号脉冲宽度等。
在这里插入图片描述
        图1 定时器系统框图
  在ZYNQ嵌入式系统中,定时器的资源是非常丰富的,每个A9处理器都有各自独立的32位私有定时器和32位看门狗定时器,这两个CPU同时共享一个64位的全局定时器。除此之外,PS中还有一个24位的系统看门狗定时器(SWDT)和两个TTC(Triple Timer Counters)。系统看门狗定时器可以在系统发生灾难性的故障时(如PS中的PLL工作异常)发出信号,使得系统程序重新启动,保证了系统安全可靠的运行。TTC用于计算来自MIO引脚或EMIO引脚的信号脉冲宽度,每个TTC都有三个独立的计数器。图1中几种定时器都连接到中断控制器,因此我们可以使用中断控制器完成定时器的中断控制。
  在以上定时器中我们最常用的就是私有定时器,根据ug585手册显示,它的特性有:1、32位计数器,当计数器递减至0后产生中断;2、8位预分频计数器,可以更好的控制中断周期;3、可以配置单次定时或者自动重载模式;4、通过配置起始计数值来设置定时时间。由此可见此私有定时器最大定时设定值为0Xffff_ffff,CPU时钟为666.666MHz,因此定时器时钟为333.333MHz,最大定时时长为12.884901885秒。在设计中设置定时器初值不可超范围。
  接着,我们在vivado中搭建硬件开发环境,添加串口外设和MIO外设,并导入sdk中进行软件开发,为了便于代码管理和代码的可读性,我们将设计分模块编写代码。
在这里插入图片描述
  在sys_intr.c文件中我们编写中断控制器初始化函数和中断异常处理函数,这个模块具有通用性,在需要中断控制设计中,我们可以将此.c和.h文件拷贝,能够减轻代码的编写量。
在这里插入图片描述
  在timer_intr.c文件中我们首先编写定时器初始化函数,用来初始化配置定时器功能,同时为定时器加载初值,并配置定时器为自动重装模式;第二我们编写定时器中断初始化函数,对私有定时器中断进行初始化配置,将定时器中断连接到中断控制器上,中断控制器和定时器中断进行使能。第三我们编写定时器中断的处理函数,定时器每次进入中断我们就翻转PS端的LED9状态,然后清除定时器中断标志位。
在这里插入图片描述
  在主函数中我们导入各个模块,并将实例化的中断控制器和定时器传入相应函数中去,在对代码进行编译和调试无误后我们进行上板验证,在SDK的串口助手中我们可以看到程序进入主函数,在开发板上LED9交替闪烁,随后通过更改定时器初值,可以实现不同程度的定时功能。

PS:详细控制代码见资源文件
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值