当前位置: 首页 > news >正文

ZYNQ 定时器

一、ZYNQ定时器简介

        每个Cortex-A9处理器都有自己的专用32位定时器和32位看门狗定时器。两个处理器共享一个全局64位定时器。这些计时器的时钟始终为CPU频率(CPU_3x2x)的1/2。在系统级,有一个24位看门狗定时器和两个16位三重定时器/计数器。系统看门狗定时器时钟在1/4或1/6的CPU频率(CPU_1x),或可以通过外部信号从MIO引脚或从PL时钟。两个三重定时器/计数器总是时钟1/4或1/6的CPU频率(CPU_1x),用于计算信号脉冲的宽度一个MIO引脚或从PL。

如下是系统框图。由此可以发现该2处理器有系统看门狗定时器、有CPU看门狗定时器、CPU私有定时器、全局时钟定时器、两个三从定时器。这些定时器都可以触发中断。本次实验任务用到的是CPU处理器的私有定时器触发中断。

        系统框图。和前面的mio控制led的系统差不多,只是用到了定时器中断,因此项目工程在原有的项目基础上另存为后修改一下即可。

二、开发流程

1、 在我们原来的工程MIO LED上不需要修改硬件设计。

2、如过你是拷贝或者复制的原项目到新的目录下需要修改路径。第一种可以删掉SDK文件然后重新建立工程写代码。第二种如果你不想删掉原代码,只想在此基础上上修改,就需要修改板级知识包的路径。方法如下

第二种方法请点击此处。

3、复制我们的代码进main.c里面。这里只需要按照你板子的原理图修改一下MIO引脚即可。代码不过解释,想了解的可以查看小梅哥或则正点原子的SOC开发手册。

/** main.c**  Created on: 2025年9月1日*      Author: 32652*/#include "stdio.h"
#include "xparameters.h"
#include "xgpiops.h"
#include "xscugic.h"
#include "XScuTimer.h"#define GPIO_DEVICE_ID  	XPAR_XGPIOPS_0_DEVICE_ID
#define TIMER_DEVICE_ID		XPAR_XSCUTIMER_0_DEVICE_ID
#define INTC_DEVICE_ID		XPAR_SCUGIC_SINGLE_DEVICE_ID
#define TIMER_IRPT_INTR		XPAR_SCUTIMER_INTR//PS端LED
#define MIO7_LED			7
//我们想要计时的值
#define TIMER_LOAD_VALUE	0x3F94067//333.333MHzXGpioPs_Config *ConfigPtr_gpio;
XGpioPs Gpio;
XScuTimer_Config *ConfigPtr_timer;
XScuTimer timer;
XScuGic_Config *ConfigPtr_inter;
XScuGic inter;
int state=0;int mio_init(XGpioPs_Config *ConfigPtr_gpio,XGpioPs *Gpio)
{//初始化GPIO的驱动ConfigPtr_gpio = XGpioPs_LookupConfig(GPIO_DEVICE_ID);XGpioPs_CfgInitialize(Gpio, ConfigPtr_gpio,ConfigPtr_gpio->BaseAddr);//把GPIO引脚设置为输出(0:输入,1:输出)XGpioPs_SetDirectionPin(Gpio, MIO7_LED, 1);//打开输出使能XGpioPs_SetOutputEnablePin(Gpio, MIO7_LED, 1);//写数据到GPIO引脚,由原理图可知设置为1时候点亮。初始时点亮。XGpioPs_WritePin(Gpio, MIO7_LED, 0x1);return	XST_SUCCESS;
}int timer_init(XScuTimer_Config *ConfigPtr_timer,XScuTimer *timer)
{int Status;//初始化定时器ConfigPtr_timer = XScuTimer_LookupConfig(TIMER_DEVICE_ID);Status = XScuTimer_CfgInitialize(timer, ConfigPtr_timer,ConfigPtr_timer->BaseAddr);if (Status != XST_SUCCESS) {return XST_FAILURE;}//自检验Status = XScuTimer_SelfTest(timer);if (Status != XST_SUCCESS) {return XST_FAILURE;}//使能自动装载模式。XScuTimer_EnableAutoReload(timer);//设置定时器时间XScuTimer_LoadTimer(timer, TIMER_LOAD_VALUE);return XST_SUCCESS;
}void timer_interr_handle(void *CallBackRef)
{XScuTimer *timer = (XScuTimer *) CallBackRef;//XScuTimer_IsExpired这个函数是判断定时器有没有过期。if (XScuTimer_IsExpired(timer)){XScuTimer_ClearInterruptStatus(timer);if(state){state=0;XGpioPs_WritePin(&Gpio, MIO7_LED, 0x0);}else{state=1;XGpioPs_WritePin(&Gpio, MIO7_LED, 0x1);}}}int timer_sys_init(XScuGic_Config *ConfigPtr_inter,XScuGic *inter)
{int Status;ConfigPtr_inter = XScuGic_LookupConfig(INTC_DEVICE_ID);if (NULL == ConfigPtr_inter) {return XST_FAILURE;}Status = XScuGic_CfgInitialize(inter, ConfigPtr_inter,ConfigPtr_inter->CpuBaseAddress);if (Status != XST_SUCCESS) {return XST_FAILURE;}Status = XScuGic_Connect(inter, TIMER_IRPT_INTR,(Xil_ExceptionHandler)timer_interr_handle,(void *)&timer);if (Status != XST_SUCCESS) {return Status;}//使能中断设备。XScuGic_Enable(inter, TIMER_IRPT_INTR);//使能中断模式XScuTimer_EnableInterrupt(&timer);//处理ARM异常,中断程序必须有的三个函数Xil_ExceptionInit();Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_IRQ_INT,(Xil_ExceptionHandler)XScuGic_InterruptHandler,inter);Xil_ExceptionEnableMask(XIL_EXCEPTION_IRQ);//启动定时器。中断系统配置完成再使能。XScuTimer_Start(&timer);return 0;
}int main()
{printf("gpio_mio_test\n");mio_init(ConfigPtr_gpio,&Gpio);timer_init(ConfigPtr_timer,&timer);timer_sys_init(ConfigPtr_inter,&inter);XScuTimer_Start(&timer);while(1);return 0;
}

4、试验成功。


文章转载自:

http://kifUNEt7.rccpL.cn
http://pwjqg0yQ.rccpL.cn
http://tYUfFj4X.rccpL.cn
http://8zz56Rst.rccpL.cn
http://j6LmYVBF.rccpL.cn
http://iEInNK0c.rccpL.cn
http://u0fdZemn.rccpL.cn
http://Ym83e1RZ.rccpL.cn
http://xBhoOXKE.rccpL.cn
http://VwcvYfg2.rccpL.cn
http://Bh7N3kvA.rccpL.cn
http://fqbwr6HR.rccpL.cn
http://aMcjH9Wv.rccpL.cn
http://yVK2XR5E.rccpL.cn
http://Zyj0Vs3f.rccpL.cn
http://ySTpTmPI.rccpL.cn
http://cVDP8AaF.rccpL.cn
http://cwaMUTpx.rccpL.cn
http://aYwSj88y.rccpL.cn
http://5W8drDCJ.rccpL.cn
http://ZVPH3JMe.rccpL.cn
http://y9BNcwfX.rccpL.cn
http://rNOsTerv.rccpL.cn
http://hqtbbShn.rccpL.cn
http://O5Y2xBqT.rccpL.cn
http://k8wlr67Z.rccpL.cn
http://RS1xhK0g.rccpL.cn
http://MWpjHlpR.rccpL.cn
http://Byryi22Z.rccpL.cn
http://DaOWwoIp.rccpL.cn
http://www.dtcms.com/a/371848.html

相关文章:

  • Java反射与动态代理学习笔记
  • 实现 SpringBoot 程序加密,禁止 jadx 反编译
  • Kubeadm部署Kubernetes-v1.30.1【容器运行时containerd】
  • HOT100--Day14--543. 二叉树的直径,102. 二叉树的层序遍历,108. 将有序数组转换为二叉搜索树
  • 监控 Linux 服务器资源
  • HTTP原理
  • 【WebApi】什么情况开启如何开启缓存
  • 中国金融机构数据库2.0-许可证、机构设立、退出、失控信息2007-2023.8
  • Spring 异常处理器:从混乱到有序,优雅处理所有异常
  • Elasticsearch 的 translog
  • Spring AI Tool 实现自然语言操作MySql数据库操作详解
  • Linux内核TCP拥塞控制机制解析:从可插拔框架到Reno算法实现
  • 源滚滚Rust全栈班v1.02 无符号整数详解
  • 2025最新超详细FreeRTOS入门教程:第四章 FreeRTOS消息队列
  • Rust 登堂 之 Drop 释放资源(十一)
  • 开关电源的原理、结构和实物入门篇-超简单解读
  • Environments
  • 上架商品合规流程有多条,有的长,有的短,有的需要审核,校验商品的合规性
  • 简单聊一聊js
  • 合格齿轴工艺工程师要修炼哪些功法?
  • LwIP入门实战 — 5 LwIP 的内存管理
  • 【三维生成】Matrix-3D:全向可探索的三维世界生成
  • DispatcherServlet 初始化过程:SpringMVC 的 “启动引擎” 详解
  • Simulink中使用Test sequence单元测试
  • 20250907-02:LangChain 架构和LangChain 生态系统包是什么
  • 大数据(非结构化数据,Spark,MongoDB)
  • FastAPI + LangChain 和 Spring AI + LangChain4j
  • Python基础语法篇:整数和浮点数,加减乘除怎么算?
  • 现成的AI模型:训练+评估框架汇总
  • 服务器断电引起的一例ORA-01207故障处理----惜分飞