基于ZYNQ的中断的使用(4)

项目简述

前面的文章我们已经讲解了ZYNQ的共享中断、软中断,每种中断的类型我们都进行了相应的讲解。ZYNQ的三种中断类型还差一个私有中断我们没有进行讲解,接下来我们将以CPU的私有定时器为例来进行相应私有中断的讲解。

工程描述:CPU利用私有定时器进行定时,每隔1s产生相应的中断,并且通过串口进行相应的打印。

本次实验所用到的软硬件环境如下:
1、VIVADO 2019.1
2、米联客MZ7015FA开发板

私用中断简述

包含:全局定时器,私有看门狗定时器,私有定时器以及来自 PL 的 FIQ/IRQ。ZYNQ 每个 CPU 连接 5 个私有外设中断,所有中断的触发类型固定不变。并且来自 PL 的快速中断信号 FIQ 和中断信号 IRQ 反向。尽管在 ICDICFR1 寄存器内反应它们是低电平触发,但是 PS-PL 接口中为高电平触发。如图所示:
在这里插入图片描述
本篇博客主要利用上面的CPU 私有定时器为例来讲解私用中断,ZYNQ 每个 ARM core 都有自己的私有定时器,私有定时器的工作频率为 CPU 的一半。 ARM 工作频率为 666MHZ,则私有定时器的频率为 333MHz.
私有定时器的特性如下:
(1) 32 位计数器,达到零时产生一个中断
(2) 8 位预分频计数器,可以更好的控制中断周期
(3)可配置一次性或者自动重加载模式
(4)定时器时间可以通过下式计算:
定时时间 = 1/定时器频率*(预加载值+1)

PS端设计

这里PL端只需要例化一个ZYNQ的IP,其他部分不需要进行任何处理,所以PL端我们没有进行相应的设计。其中,Block Design设计如下:
在这里插入图片描述

PL端设计

这里的GUI的初始化与前面的一样,相当于增加了定时器的初始化,代码如下:

#include <stdio.h>
#include "xscugic.h"
#include "xparameters.h"
#include "sleep.h"
#include "xscutimer.h"

#define GIC_ID 				XPAR_PS7_SCUGIC_0_DEVICE_ID
#define TIMER_IRPT_INTR     XPAR_SCUTIMER_INTR
#define TIMER_DEVICE_ID     XPAR_XSCUTIMER_0_DEVICE_ID
#define TIMER_LOAD_VALUE    0x13D92D3F //1S

static XScuGic ScuGic
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值