首页 > 其他分享 >zynq7000 TTC定时器中断

zynq7000 TTC定时器中断

时间:2024-10-31 13:00:25浏览次数:1  
标签:定时器 zynq7000 中断 void flag TTC define

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

标签:定时器,zynq7000,中断,void,flag,TTC,define
From: https://www.cnblogs.com/tiruo/p/18517407

相关文章

  • 【JavaEE】【多线程】定时器
    目录一、定时器简介1.1Timer类1.2使用案例二、实现简易定时器2.1MyTimerTask类2.2实现schedule方法2.3构造方法2.4总代码2.5测试一、定时器简介定时器:就相当于一个闹钟,当我们定的时间到了,那么就执行一些逻辑。1.1Timer类Java的标准库中提供了在java.ut......
  • zynq7000使用私有定时器中断
    Zynq-7000系列SoC(SystemonChip)的定时器系统是由几个不同的定时器模块组成的,这些定时器可以满足广泛的嵌入式应用需求。主要包括:全局定时器(GlobalTimer)特点:全局定时器是一个64位的计时器,存在于Cortex-A9处理器内核中,提供一个全局的时间基准。用途:主要用于需要......
  • 【STM32+HAL库】使用通用定时器生成的PWM实现呼吸灯效果
    板子:STM32F103C8仿真软件:Proteus8软件平台:cubemx+keil1新建STM32CubeMX工程1.1配置系统时钟RCC  1.2配置定时器这里用的PB3和PA15一对在TIM2中,时钟源选择内部时钟InternalClock,通道1选择PWM输出PWMGenerationCH1通道2选择PWM输出PWMGenerationCH2 ......
  • Linux驱动开发 内核时间管理 内核定时器使用 以及 从 应用层通过ioctl接口控制内核定
    Linux内核时间管理以及内核定时器使用在Linux驱动开发中,内核时间管理和内核定时器是用于管理时间和调度任务的重要工具。内核定时器允许开发者在指定的时间间隔内执行某些任务,而内核时间管理则提供了时间相关的功能,如获取当前时间、时间延迟等。1.内核时间管理内核......
  • Qt开发技巧(十九):定时器的调用问题,控件的透明问题,慎用事件过滤器,依赖库的路径链接,对话框
    继续讲一些Qt开发中的技巧操作:1.定时器的调用问题有一个场景经常遇到,那就是在符合某个条件下,延时一段时间去执行一段代码,如果短时间内触发多次又不需要频繁执行,只需要执行一次就行。如果选择用QTimer::singleShot无法终止已经触发的,这个时候就要主动实例化一个单次定时器,......
  • oracle数据库---PL/SQL、存储函数、存储过程、触发器、定时器job、备份
    PL/SQL什么是PL/SQLPL/SQL(Procedure Language/SQL)是Oracle对sql语言的过程化扩展,指在SQL命令语言中增加了过程处理语句(如分支、循环等),使SQL语言具有过程处理能力。把SQL语言的数据操纵能力与过程语言的数据处理能力结合起来,使得PLSQL面向过程但比过程语言简单......
  • 基于32位单片机的裸机开发:使用定时器进行任务调度 V2.0
     在嵌入式系统开发中,合理地管理和调度任务对于提高系统的实时性、可靠性和可维护性非常重要。本文将详细介绍一个基于定时器的任务管理系统的设计与实现,该系统无需使用系统滴答定时器(SysTick)来增加堆栈深度,而是采用基本的定时器来实现任务的分时执行。V2.0对比V1.0优点V2.0......
  • .net6定时器
    因业务涉及到定时执行任务所以要使用到定时器直接写在program里(如果发布到iis服务器上面的话一定要将iis部署绑定的应用程序池->高级设置->闲置时间设置为0)//须要先注入调用的service//添加服务到容器中builder.Services.AddScoped<BaseAutoService>();...//回调方法......
  • java_day19_线程组、线程池、定时器、InetAddress、网络编程、设计模式
    一、线程组:线程组:将属于同一类的线程划分到同一组中,可以直接对线程组进行设置。ThreadGroup构造方法:ThreadGroup(Stringname)构造一个新的线程组。代码案例:classMyThread1extendsThread{publicMyThread1(){}publicMyThread1(ThreadGr......
  • 定时器
    定时器:Timer定时任务:TimerTask点击查看代码importjava.util.Timer;importjava.util.TimerTask;/*定时器:Timer定时任务:TimerTask*/publicclassTimerDemo1{publicstaticvoidmain(String[]args){//创建一个定时器Tim......