zcu102_6_AXI_TIMER精确计时

本文介绍了如何在ZCU102开发板上利用Zynq芯片和AXI Timer模块进行精确计时。通过Vivado建立Block Design,配置AXI Timer并连接ILA模块。在SDK中,创建工程并编写计数器和定时器的代码,需要注意时钟频率的设置,以便在PS和PL之间进行精确的时间同步。参考BSP中的示例程序,可以实现计数器和定时器功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

博客配套原码工程已上传https://download.csdn.net/download/botao_li/10915619

AXI Timer

axi_timer模块即为PS可以访问的PL计数器,通过计数值以及接入axi_timer的计数时钟周期,可以在PS内取得比较精确的计时

axi_timer有2种使用方式,一种是作为计数器使用,另一种是作为定时器使用

Block Design

建立Vivado工程,新建Block Design,并且添加zynq模块,AXI Timer模块,以及ILA模块

保持zynq模块的默认配置

使能UART0,连接至MIO 18 19,用于串口显示调试信息
在这里插入图片描述

添加PL至PS的中断输入接口
在这里插入图片描述

双击axi_timer模块,按下图设置
在这里插入图片描述

在Block Design中自动连接和手动连接之后,完成设计
在这里插入图片描述

在Vivado中生成bitstream,并且Export to Hardware,之后打开SDK

SDK

建立helloworld模板工程,双击helloworld.c添加功能代码

注意,无论axi_timer模块作为计数器还是定时器,都是每个时钟周期计数增1或者减1,由于在Block Design中时钟输入接口来源于PS模块的时钟输出,注意需要打开PS模块设置界面确认Actual Frequency
在这里插入图片描述

在SDK建立的BSP工程中,xparameters.h也保存该频率值XPAR_AXI_TIMER_0_CLOCK_FREQ_HZ

具体编程参考自BSP中system.mss中导入的示例程序
在这里插入图片描述

计数器代码

#include <stdio.h>
#include "platform.h"
#include "xil_printf.h"
#include "xtmrctr.h"
#include "sleep.h"


int main()
{
   
	print("axi_timer test\r\n");

	int sta = -1;
	//timer初始化
	XTmrCtr tmr;
	sta = XTmrCtr_Initialize(&tmr, XPAR_AXI_TIMER_0_DEVICE_ID);//ID来自于xparameters.h定义
	if (sta != XST_SUCCESS)
	{
   
		return XST_FAILURE;
	}

	//如果timer没有自动加载模式
	//向上计数溢出时置为0值停止计数
	//向下计数溢出时置为0xFFFFFFFF时停止计数

	//设置timer1的option为自动加载模式
    //在不设置reset value的情况下,计数寄存器循环计数
    //在设置reset value的情况下
    //计数寄存器向上计数至0xFFFFFFFF后变为reset value
    //计数寄存器向下计数至0后变为reset value
	//option为mask形式,定义见xtmrctr.h
	XTmrCtr_S
文档共60页。主要向初学者提供了Zynq开发的技术方向,针对不同应用给出了基本的参考文档;同时对Zynq双核AMP加载方式做了详细描述,对Zynq的fsbl启动流程做了简单介绍。章节如下: Zynq User Guide 1 介绍 4 2 快速上手指南 4 3 多核开发教程 4 3.1 AMP开发说明 6 3.1.1 快速生成amp工程 6 3.1.2 Generating Boot File 8 3.1.3 烧写程序 9 3.1.4 启动 10 3.1.5 调试 10 3.1.6 总结 11 3.2 SMP开发说明 11 4 ZC706启动代码分析 11 4.1 启动代码 12 4.2 FSBL流程(FOR AMP) 13 4.3 CPU0启动CPU1流程 14 5 程序在线烧写方案及流程 14 5.1 程序烧写需求 14 5.2 提出该需求的原因 14 5.3 程序烧写方案 14 5.3.1 BOOT.BIN组成 14 5.3.2 BOOT.BIN生成方法 15 5.4 FSBL.BIN和APP.BIN等的生成 15 5.5 制作*BIN及烧写的具体步骤 15 5.5.1 制作*bin流程 15 5.5.2 BOOT.bin制作过程 15 5.5.3 FSBL.bin和APP.bin等的生成过程 22 5.6 烧写BOOT.BIN步骤 26 5.6.1 通过SDK工具烧写步骤 26 5.6.2 通过上位机烧写软件的烧写步骤 29 5.6.3 通过串口调试助手烧写步骤 29 6 Zynq Qspi控制器 30 6.1 基本特性 30 6.2 I/O接口 31 6.3 QSPI控制器模式 33 6.3.1 I/O模式 33 6.3.2 线性地址(linear address)模式 33 6.3.3 传统(legacy)SPI模式 34 6.4 QSPI 例程 34 6.5 QSPI控制器支持访问32MB方法 35 6.5.1 Bank地址寄存器(Bank address register) 35 6.5.2 扩展地址模式(Extended address mode) 35 6.5.3 使用新写命令(New commands) 35 6.6 QSPI FLASH选择 35 6.7 作为BOOT器件考虑 35 7 µC/OS系统启动指南 36 7.1 INTRODUCTION 36 7.1.1 Software Requirements 36 7.1.2 Hardware Requirements 36 7.2 HARDWARE DESIGN 37 7.2.1 Step 1. Invoke the Vivado IDE and Create a project 37 7.2.2 Step 2. Create an IP Integrator Design 39 7.2.3 Step 3. Add and setup the Zynq processor system IP block 39 7.2.4 Step 4. Customize the Zynq block for our design 41 7.2.5 Step 5. Add the soft peripherals 45 7.2.6 Step 6. Generate HDL Design Files 47 7.2.7 Step 7. Synthesis, Implement and Generate Bitstream 48 7.3 SOFTWARE DESIGN 49 7.3.1 Step 1. Installation of the µC/OS Repository 49 7.3.2 Step 2. Generate the µC/OS BSP 50 7.3.3 Step 3. Build and Debug the Demonstration Project 54 7.3.4 Step 4. Program the AXI Timer 0 with the ucos_axitimer Driver 55 7.3.5 Step 5. Program the AXI Timer 1 with the Xilinx tmrctr Driver 58 7.4 CONCLUSION 59 8 Linux系统启动指南 59
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值