【ZYNQ】ZYNQ7000 全局定时器及其驱动示例

article/2025/11/8 10:09:04

定时器简介

在 ZYNQ 嵌入式系统中,定时器的资源是非常丰富的,每个 Cortex-A9 处理器都有各自独立的 32 位私有定时器和 32 位看门狗定时器,这两个 CPU 同时共享一个 64 位的全局定时器(GT)。

系统框图

全局定时器(GTC)

全局定时器是一个具有自动递增功能的 64 位递增计数器。全局定时器将内存映射到与专用定时器相同的地址空间中。全局定时器仅在安全状态下的重置时被访问。所有 Cortex-A9 处理器都可以访问这个全局定时器。每个 Cortex-A9 处理器都有一个 64 位的比较器,当全局计时器达到比较器值时,该比较器被用来产生一个私有中断。

时钟

  • GTC 的时钟始终为 CPU 频率(CPU_3x2x)的 1/2。

寄存器表

在这里插入图片描述

在这里插入图片描述

驱动示例

  • gtc.c
/*** Copyright (c) 2022-2023,HelloAlpha* * Change Logs:* Date           Author       Notes*/
#include "gtc.h"#include "stdio.h"void GtStart(void)
{/* 启动全局定时器 */GT_WR_REG(GT_CTRL_REG, AUTO_INC_BIT | IRQ_ENABLE_BIT | COMP_ENABLE_BIT | TMR_ENABLE_BIT);
}int GtIntrInit(XScuGic *GtInstancePtr, uint64_t Value, void(* CallBack)(void *))
{int Status;/* 停止全局定时器 */GT_WR_REG(GT_CTRL_REG, 0);/* 清空计数器低 32 位 */GT_WR_REG(GT_CNT_REG0, 0);/* 清空计数器高 32 位 */GT_WR_REG(GT_CNT_REG1, 0);/* 清除中断标志位 */GT_WR_REG(GT_INTR_STAT_REG, 1);/* 加载比较器低 32 位 */GT_WR_REG(COMP_VAL_REG0, (uint32_t)Value);/* 加载比较器高 32 位 */GT_WR_REG(COMP_VAL_REG1, 0);/* 加载递增寄存器数值 */GT_WR_REG(AUTO_INC_REG, (uint32_t)(Value >> 32));/* 绑定全局定时器中断服务函数 */Status = XScuGic_Connect(GtInstancePtr, GT_INTR,(Xil_ExceptionHandler)CallBack, 0);if (Status != XST_SUCCESS){return Status;}/* 将 27 号全局定时器中断映射到 CPU1 */XScuGic_InterruptMaptoCpu(GtInstancePtr, 1, GT_INTR);/* 打开全局定时器中断(27号) */XScuGic_Enable(GtInstancePtr, GT_INTR);return Status;
}/* 清零计数器 */
void gt_tic(void)
{*((volatile int*)(GT_CTRL_REG)) = 0x00;*((volatile int*)(GT_CNT_REG0)) = 0x00000000;*((volatile int*)(GT_CNT_REG1)) = 0x00000000;*((volatile int*)(GT_CTRL_REG)) = 0x01;
}/** 读取计数器 输出当前时间 单位:ms*  可配合 gt_tic 作如下使用:*  {*      gt_tic();*      function_to_get_running_time();*      gt_toc();*  }*/
double gt_toc(void)
{*((volatile int*)(GT_CTRL_REG)) = 0x00;long long cnt = *((volatile int*)(GT_CNT_REG1));double elapsed_time = cnt << 32;cnt = *((volatile int*)(GT_CNT_REG0));elapsed_time += cnt;elapsed_time /= CLK_3x2x;elapsed_time *= 1000;printf("Elapsed time is %f ms.\r\n",elapsed_time);return elapsed_time;
}/* 获取当前时间(单位:秒 second) */
float get_time_s(void)
{XTime tCur = 0;XTime_GetTime(&tCur);return (tCur / (float) COUNTS_PER_SECOND);
}
  • gtc.h
/*** Copyright (c) 2022-2023,HelloAlpha* * Change Logs:* Date           Author       Notes*/
#ifndef __GTC_H__
#define __GTC_H__#include "xtime_l.h"
#include "xscugic.h"
#include "xil_io.h"/* 定时器寄存器 */
#define GT_BASEADDR     GLOBAL_TMR_BASEADDR
#define GT_CNT_REG0     GT_BASEADDR + GTIMER_COUNTER_LOWER_OFFSET
#define GT_CNT_REG1     GT_BASEADDR + GTIMER_COUNTER_UPPER_OFFSET
#define GT_CTRL_REG     GT_BASEADDR + GTIMER_CONTROL_OFFSET
/* 中断寄存器 */
#define GT_INTR         XPAR_GLOBAL_TMR_INTR
/* 中断状态寄存器 */
#define GT_INTR_STAT_REG    GT_BASEADDR + 0x0CU
/* 比较器 */
#define COMP_VAL_REG0       GT_BASEADDR + 0x10U
#define COMP_VAL_REG1       GT_BASEADDR + 0x14U
/* 自动递增寄存器 */
#define AUTO_INC_REG        GT_BASEADDR + 0x18U#define AUTO_INC_BIT        0x08
#define IRQ_ENABLE_BIT      0x04
#define COMP_ENABLE_BIT     0x02
#define TMR_ENABLE_BIT      0x01#define CLK_3x2x    333333333#define GT_WR_REG   Xil_Out32void GtStart(void);
int GtIntrInit(XScuGic *GtInstancePtr, uint64_t Value, void(* CallBack)(void *));
void gt_tic(void);
double gt_toc(void);
float get_time_s(void);#endif

测试平台:黑金 AX7Z035

芯片型号:XC7Z035-2FFG676

参考来源:UG585


http://chatgpt.dhexx.cn/article/mupWhB4w.shtml

相关文章

Xilinx ZYNQ 7000学习笔记一(复位和启动)

一、复位系统 参考文献&#xff1a;Zynq-7000 SoC Technical Reference Manual (UG585)-ch26 Reset System zynq7000复位信号源包括硬件复位、看门狗定时器、JTAG控制器复位信号和软件复位信号。其中&#xff0c;硬件复位引脚由上电复位信号PS_POR_B和系统复位信号PS_SRST_B驱…

zynq7000系列芯片介绍

ZYNQ从架构上可以划分为两大模块&#xff0c;一个是PS&#xff08;处理器系统&#xff09;&#xff0c;另一个是PL&#xff08;可编程逻辑&#xff09; PS由APU、内存接口、IO外设、互连线4大模块组成。 1、APU&#xff08;Application Processor Unit)应用处理单元 即PS【可编…

xilinx zynq-7000 基本知识

Zynq-7000 采用可扩展式处理平台架构&#xff08;Extensible Processing Platform、EPP&#xff09;&#xff0c;是 Xilinx 用 28nm HKMG工艺制成的低功耗&#xff0c;高性能&#xff0c;高扩展性的新型芯片&#xff0c;这款新品里面集成了ARM CORTEX-A9 MPSOC 硬核以及相应的S…

ZYNQ-7000概述

摘要 Xilinx推出的ZYNQ-7000被称为全可编程片上系统&#xff08;SOC&#xff09;&#xff0c;它由FPGA与ARM组合构成&#xff0c;硬件可编程&#xff0c;软件也可编程&#xff0c;在众多应用场合有一定优势。本文根据Xilinx官网的介绍并结合ZYNQ-7000的多份数据手册总结了此产品…

ZYNQ学习笔记(一)---初识ZYNQ-7000系列

前几日刚入手一款ZYNQ-7000系列的板卡&#xff0c;之前我也没用过FPGA&#xff0c;直接跨越到ZYNQ的原因主要是某宝上这款板卡相较于其他片上仅有一块FPGA的板卡性价比更高。作为入门&#xff0c;在学习过程中&#xff0c;笔者选择先单独学习ZYNQ上的FPGA部分&#xff0c;也就是…

ZYNQ7000 Vivado详细教学步骤

ZYNQ7000 Vivado开发 ZYNQ7000 Vivado详细教学步骤 ZYNQ7000 Vivado开发1.建立工程项目2.创建Block Design3.配置IO BANK4.配置DDR和CLOCK5.配置PS外设6.测试PS外设7.增加PL外设 1.建立工程项目 Xilinx提供了一系列开发工具&#xff0c;其中包括Vivado平台工具&#xff0c;它是…

mongodb客户端 robo 3T 查询突破50行限制

robo 3T的小bug 这个mongodb客户端&#xff0c;每次查询数据只有50行&#xff0c;虽然有向下翻页的功能 但实际上点击后会被重置&#xff0c;还是只有前50条 解决办法 DBQuery.shellBatchSize 500; 当前窗口最大查询数量修改到500&#xff08;只有当前窗口生效&#xff09;…

centos7仅安装mysql/mongodb客户端

1、仅安装MySQL客户端 # 添加rpm源 [rootk8s-master ~]# rpm -ivh https://repo.mysql.com//mysql57-community-release-el7-11.noarch.rpm [roottest1 ~]# # 通过yum搜索 [roottest1 ~]# yum search mysql-community [roottest1 ~]# # 安装x64位的 mysql客户端 [roottest1 ~]…

专业级MongoDB桌面客户端:MongoBooster for Mac

mongobooster mac破解版是适用于MongoDB的最智能IDE,也是以shell为中心的跨平台GUI工具,它提供了流畅的查询构建器,SQL查询SQL查询,就地更新,ES2017语法支持和真正的智能感知体验。MongoBooster下载可以帮助用户能够连接到选项卡式用户界面中的多个数据库,并通过shell命令…

mongodb官方客户端可视化工具Compass,免费,官方值得信赖

之前一直用的客户端是nosqlbooster4mongo&#xff0c;基本操作还都是挺好用的&#xff0c;但是有一些命令在这个客户端上运行不了&#xff0c;以后要慢慢的替换到compass上。 下载compass 官方下载&#xff1a;https://downloads.mongodb.com/compass/mongodb-compass-1.26.1…

Centos下mongodb的安装

方法一 可以使用yum命令直接安装MongoDB服务端和客户端。 sudo yum install mongodb-server # 安装MongoDB服务端 sudo yum install mongodb # 安装MongoDB客户端 sudo mongod -f /etc/mongod.conf # 加载配置项&#xff0c;启动mongodb服务器 mongo #启动客户端方法…

linux下MongoDB客户端shell基本操作

MongoDB 是一款NoSql数据库&#xff0c;没有固定的模式&#xff0c;即同一个集合中的不同文档结构可以不同&#xff0c;如&#xff1a;第一条记录{name:”xiaoming”}&#xff0c;第二条记录&#xff1a;{name:”xiaoli”,age:15}&#xff0c;这在关系型数据库中是无法实现的。…

MongoDB 客户端 MongoVue

直接上图片&#xff0c;图片是按顺序来的 软件下载地址&#xff08;Windows下的MongoDB客户端MongoVUE 这是最后一个全功能的不收费的版本&#xff09;: http://pan.baidu.com/s/1skYIEq5

mongoDB介绍与客户端认证权限

mongoDB简介 Mongo 是 humongous 的中间部分&#xff0c;在英文里是“巨大无比”的意思。所以 MongoDB 可以翻译成“巨大无比的数据库”&#xff0c;更优雅的叫法是“海量数据库”。 Mongodb是一款非关系型数据库&#xff0c;说到非关系型数据库&#xff0c;区别于关系型数据库…

MongoDB客户端Robo 3T安装使用

MongoDB客户端Robo 3T安装使用 MongoDB安装 MacBook解压安装MongoDB Linux解压安装MongoDB Robo 3T下载和安装 官网下载Robo 3T 官网下载地址&#xff1a; https://robomongo.org/download 有解压版本和安装版本 下载成功后,点击安装,这里不多做说明 Robo 3T使用 打开Ro…

linux/centos单独安装mysql、mongodb客户端

安装mysql客户端 下载想要版本mysql客户端 带client https://downloads.mysql.com/archives/community/ rpm卸载已安装mysql rpm -qa | grep -i mysql 查询出来的rpm -e 全部卸载 rpm -e mysql57-community-release-el7-9.noarch rpm -e mysql-community-server-5.7.17-1…

最佳的MongoDB客户端管理工具

《最佳的MongoDB客户端管理工具》 作者:chszs,未经博主允许不得转载。经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs 一个好的MongoDB客户端管理工具,可以大大提高MongoDB应用的开发效率。MongoDB自带的Shell是一个很好的工具,但是它在操纵大数据集时就没…

CentOS 安装 MongoDB 客户端(命令行shell)

目录 问题 解决 首先&#xff0c;登陆官网 其次&#xff0c;下载对应的安装包 然后&#xff0c;删除安装包 最后&#xff0c;测试命令行 问题 最近公司新申请的CentOS云服务器都缺少MongoBD客户端工具&#xff0c;用命令行登陆MongoBD数据库时&#xff0c;都需要自己安装…

mongodb客户端

查看当前数据库 db切换数据库 通过db变量访问集合 这会返回当前数据库中的 movies 集合。既然可以通过 shell 访问集合&#xff0c;就意味着可以在 shell 中执行大部分数据库操作。 crud操作 新增 insertOne 函数可以将一个文档添加到集合中 查看数量 查看 使用find查看…

安装mongodb客户端

1.从mongodb官网下载安装包 下载路径&#xff1a;MongoDB Shell Download | MongoDB 2.创建存放mongosh服务目录 mkdir /etc/mongodb 3.将此安装包放到mongdb目录下解压 tar -zxvf /etc/mongodb/mongosh-1.8.1-linux-x64.tgz /etc/mongodb 4.mongodb客户端使用 cd /etc/mo…