zynq7000 TTC定时器中断

news/2025/1/16 15:02:36/文章来源:https://www.cnblogs.com/tiruo/p/18517407

Note:本次使用pynq z2 board作为硬件环境

一. Zynq 定时器概述

在zynq7000中,定时器一共分为4个部分, 参考手册:Ug585

  1. 每颗arm A9含有一个私有定时器以及一个看门狗定时器
  2. 系统含有一个全局看门狗定时器
  3. 系统含有一个全局定时器
  4. 系统含有两个TTC模块,每个模块含有三路定时器
    image

从TTC的框架图来看, 每个TTC模块含有三个定时器

  1. 每个定时器可以为CPU时钟或者外部时钟输入
  2. 每个定时器可以输出方波, 并且可以产生中断, 中断号在图中以及给出
  3. 使用CPU时钟时候可以先将时钟进行分频再输入进入计数器
    image

二. vivado配置

  1. block design添加zynq7进行配置
    1.1 取消reset信号,不使用PL
    image
    1.2 取消PSPL AXI接口
    image
    1.3 设置BANK电压,需要查看自己原理图, 勾选Timer0, 根据自己原理图查看MIO是否被占用, 本次勾选EMIO就行
    image
    1.4 配置PS输入时钟, 取消勾选FCLK, 不使用PL
    image
    1.5 配置DDR, 根据自己原理图选择
    image
    1.6 配置好以后就这样
    image

以上设置好以后进行布线, generate output products, creat HDL wrapper
然后直接export handware, 因为没使用PL, 因此不需要generate bitstream
然后launch SDK

三. SDK编写

  1. 新建工程
    image

  2. 输入改成名称后选择hello world 模板即可
    image

  3. 进行宏定义

#define GicDeviceId		XPAR_SCUGIC_SINGLE_DEVICE_ID#define TTC00DeviceId	XPAR_XTTCPS_0_DEVICE_ID
#define TTC00IntId		XPS_TTC0_0_INT_ID#define TTC01DeviceId	XPAR_XTTCPS_1_DEVICE_ID
#define TTC01IntId		XPS_TTC0_1_INT_ID#define TTC0Freq		1
#define TTC1Freq		2#define TTC_Option		XTTCPS_OPTION_INTERVAL_MODE | XTTCPS_OPTION_WAVE_DISABLE
#define TTC_Mask		XTTCPS_IXR_INTERVAL_MASK
  1. 定义一些必要的函数以及变量
XScuGic GicInst;
XTtcPs	ttc0Inst;
XTtcPs	ttc1Inst;// 方便传递函数参数
typedef void (*TTC_Handler)(void *);
// 初始化中断系统
static void  SysInterruptSetup(u16 DeviceId, XScuGic* GicInstancePtr);
// 初始化ttc及中断
static void  TTC_Int_Init(u16 ttcDeviceId, XTtcPs* ttcInstancePtr, u16 ttcIntId, u32 Freq, TTC_Handler handlerFunc);
// 定义中断回调函数
static void	 TTC0_Handle(void *Callbackref);
static void  TTC1_Handle(void *Callbackref);// 中断flag
u8 flag_ttc0;
u8 flag_ttc1;

对TTC进行初始化

  1. 在main函数中对函数进行调用
int main()
{init_platform();SysInterruptSetup(GicDeviceId, &GicInst);TTC_Int_Init(TTC00DeviceId, &ttc0Inst, TTC00IntId, TTC0Freq, TTC0_Handle);TTC_Int_Init(TTC01DeviceId, &ttc1Inst, TTC01IntId, TTC1Freq, TTC1_Handle);while(1){if(flag_ttc0){flag_ttc0 = 0;print("ttc0000000 has been detected!!! \r\n");}if(flag_ttc1){flag_ttc1 = 0;print("ttc1111111 has been detected!!! \r\n");}}cleanup_platform();return 0;
}
  1. 最后,ttc0一秒打印一次, ttc1一秒打印两次
    image

源码地址: click here

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/824604.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

windows11快速打开软件,快速打开记事本

前言 本次分享为: 通过运行打开常用程序 在运行上输入对应程序名称, 达到快速打开软件的目的 下面请看演示本次案例以常用程序 NotePad(记事本) 为例目录前言演示找到记事本文件夹(路径)常用目录查找方式非 常用查找方式创建快捷方式创建文件夹打开系统变量测试 演示 找到记事本…

20222307 2024-2025-1 《网络与系统攻防技术》 实验三实验报告

1. 实验内容 1.1 实践内容 (1) 正确使用msf编码器,veil-evasion,自己利用shellcode编程等免杀工具或技巧使用msfvenom生成jar、apk等其他文件 使用veil加壳工具 使用C+ shellcode进行编程(2)通过组合应用各种技术实现恶意代码免杀 (3)用另一电脑实测,在杀软开启的情况…

Nuxt.js 应用中的 components:dirs 事件钩子详解

title: Nuxt.js 应用中的 components:dirs 事件钩子详解 date: 2024/10/31 updated: 2024/10/31 author: cmdragon excerpt: components:dirs 是 Nuxt.js 中的一个生命周期钩子,用于在 app:resolve 期间扩展自动导入组件的目录。通过这个钩子,开发者可以动态地添加新的组件…

golang有类似于java的spring吗_3

为了回答这个问题:Golang 是否有类似于 Java 的 Spring 框架,我们可以从两个角度来看:一、目前 Golang 是否有直接对应的全栈框架;二、Golang 是否有能提供与 Spring 类似特性的框架或者库。对于第一个问题,Golang 目前并没有一个完全仿照 Spring 的全栈框架。Java 中的 S…

大模型导论

为什么大模型相比中小模型,有更突出的性能和泛化能力,也许大多数人并没有想过这个问题,业内一般从函数曲线拟合的角度,来理解模型为什么能解决现实中的问题。 1、模型为什么越大,性能和泛化越好?在AI领域,对需要解决的业务问题,将其视为满足一定条件的数据分布,先通过…

有什么bug管理工具

bug管理工具有:1、PingCode;2、Worktile;3、Jira;4、Bugzilla;5、Redmine;6、MantisBT;7、YouTrack;8、GitHub Issues。PingCode是一站式的软件研发过程管理工具,具备专业的缺陷管理模块能够有效帮助团队解决四方面的缺陷管理问题。1、PingCode PingCode是一站式的软件…

Java为什么解释执行时不直接解释源码_2

Java为什么解释执行时不直接解释源码 在探讨为什么Java在解释执行时不直接解释源码之前,我们首先需要明确几个核心观点:Java虚拟机(JVM)的设计初衷是实现一次编写、到处运行、字节码的概念及其作用、性能与安全考虑。这些因素共同塑造了Java当前的执行模式。其中,字节码的…

小时候的萤火虫

写在前面 1145 字 | 经历 | 童年 | 感触 | 思考 | 时间 正文前阵子,住处突然飞进来一只萤火虫。尾灯一闪一闪,光芒微弱。与明亮的灯光相比,那光芒似乎如蚍蜉撼树,毫不起眼。我本想捉出去,但犹豫了一两瞬,放弃了。它飞到我放衣服的箱子上,我蹲下来,静静地看着它。小时候…

操作系统——进程同步互斥经典题目

操作系统——进程同步互斥经典题目 前言 这里是操作系统课程中老师布置的作业,主要是关于进程同步互斥的考研真题。 题目 题目一 有4个进程P1、P2、P3、P4。要求P1必须在P2、P3开始前完成,P2、P3必须在P4开始前完成,且P2和P3 不能并发执行。试写出这4个进程的同步互斥算法。…

管中窥豹----.NET Core到.NET 8 托管堆的变迁

https://www.cnblogs.com/lmy5215006/p/18515971在研究.NET String底层结构时,我所观察到的情况与《.NET Core底层入门》,《.NET内存管理宝典》书中描述不符。故多研究了一下。发现.NET托管堆的结构也是越来越多,越来越高性能。//示例代码internal class Program{public con…

使用 FastGPT 实现最佳 AI 翻译工作流:全世界最信达雅的翻译

想让AI翻译既准确又地道?本文将教你如何利用 FastGPT 打造一个革命性的翻译工作流。 它不仅支持文本翻译,还能直接处理文档,更能通过自定义术语表确保专业术语的翻译准确性,堪称翻译神器! 直接看效果:再来看术语表:这也太适合翻译产品官网和官方文档了吧?? 背景 吴恩达…

Major GC和Full GC的区别是什么

Major GC和Full GC是Java垃圾收集中的两种重要过程。它们的主要区别包括:1.作用范围不同;2.触发条件和时机有所不同;3.对系统性能的影响程度不同;4.处理对象的差异;5.与各种垃圾收集器的关联程度有所差异。理解这两种GC的区别对于Java开发和性能调优都是至关重要的。1.作用…