AXI Timer IP核使用说明

AXI Timer是提供定时技术功能的集成IP核,具有时间生成、事件捕获、产生PWM波以及产生中断的功能,下面具体讲述Timer IP核的使用说明。

1 Timer组成结构

Timer定时器计数器的组成结构框图如图所示:
在这里插入图片描述
主要有4部分组成

1 定时寄存器:包含2个状态/控制寄存器,加载寄存器;
2计数器:2个32位计数器;
3 中断;
4 PWM波形产生。

Timer可以配置的应用模式有:

1 生成模式;
2 捕获模式;
3 PWM脉宽调制模式;
4 级联模式。

1 生成模式

生成模式下,设置加载寄存器 (load register)为初始值,递增或者递减计数,计数值溢出后,依据定时器控制寄存器(TCSR)中的自动重载/保持(ARHT)位执行重新加载 load regster寄存器中的值或者保持不变。如果TCSR中的TINIT中断使能为1,则产生一个中断,generate out一个周期置位1,需要手动清除中断标志,

2 捕获模式

外部捕获触发(capture trig)置位1时,计数器加载 load regieter,根据TCSR寄存器的递增递减标志 UDT 相应计数,同时中断标志TINT置位1,捕获模式标定时间同时产生一个中断。

3 PWM模式

用于产生PWM波形,计数器0产生脉宽周期,计数器产生占空比,两者共同产生PWM。

4 级联模式

级联模式下,两个32位计数器合并为一个64位的计数器。可用于时间生成和事件捕获模式,由TSCR0寄存器控制。

5 中断

中断的使能位是TCSR中的ENIT位,ENIT控制中断的使能和禁用。中断状态位TINT不能写入,其根据计数值自动置位。

2 接口资源

AXI Timer IP核接口资源如下所示:

接口 输入输出 描述
s_axi_aclk 输入 时钟
s_axi_aresetn 输入 复位
s_axi_* 输入 axi总线
capture trig0 输入 捕获模式下的输入
文档共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
好的,以下是一个参考的 MicroBlaze 软 AXI Timer IP 精确微秒级延时函数的示例代码: ```c #include "xparameters.h" #include "xtmrctr.h" #define TIMER_DEVICE_ID XPAR_AXI_TIMER_0_DEVICE_ID #define TIMER_LOAD_VALUE 9999 // 设置定时器计数器的最大值 static XTmrCtr Timer; // 定时器实例 void delay_us(u32 us) { u32 tCount = 0; // 定时器计数器 u32 tDelta = 0; // 计算微秒延时的差值 u32 tTicks = 0; // 计算微秒延时的时钟周期数 XTmrCtr_Initialize(&Timer, TIMER_DEVICE_ID); // 初始化定时器 tDelta = (us * XPAR_CPU_CORE_CLOCK_FREQ_HZ) / 1000000; // 计算微秒延时的差值 tTicks = tDelta / (TIMER_LOAD_VALUE + 1); // 计算微秒延时的时钟周期数 XTmrCtr_SetLoadReg(Timer.BaseAddress, 0, TIMER_LOAD_VALUE); // 设置定时器计数器的最大值 XTmrCtr_LoadTimerCounterReg(Timer.BaseAddress, 0); // 重置定时器计数器 while (tCount < tTicks) { // 循环等待计时器计数 if (XTmrCtr_IsExpired(Timer.BaseAddress, 0)) { // 如果计时器计数溢出 tCount++; // 增加计数器计数 XTmrCtr_LoadTimerCounterReg(Timer.BaseAddress, 0); // 重置计时器计数器 } } } ``` 该函数接受一个以微秒为单位的参数,会在给定的时间内阻塞程序执行。函数内部使用 MicroBlaze 软AXI Timer IP 进行计时,并根据计时器的时钟频率和计时器计数器的最大值计算出微秒延时的差值和时钟周期数。然后,在一个循环中,该函数会等待计时器计数达到预设的时钟周期数,以实现精确的微秒级延时。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值