AXI Timer v2.0定时器

AXI Timer v2.0定时器

LogiCORE IP AXI Timer/Counter 是一个32/64位计时器模块,与 AXI4-Lite 接口接口。

特性

  • 基于 AXI4-Lite 规范的 AXI 接口
  • 两个具有中断、事件生成和事件捕获功能的可编程间隔计时器
  • 可配置计数器宽度
  • 单脉冲宽度调制(PWM)输出
  • 定时器在生成和捕获模式下的级联操作
  • 在软件调试期间暂停计数器的冻结输入

方框图

在这里插入图片描述

  • AXI4-Lite Interface: AXI4-Lite 接口模块实现了一个 AXI4-Lite 从接口,用于访问内存映射的定时器寄存器。
  • Timer Register: Register 块为每个计时器/计数器实现一组32位寄存器。这套寄存器包括载入寄存器、计时器/计数器寄存器和控制/状态寄存器
  • 32-bit Counters: 计时器/计数器模块有两个32位计数器,每个计数器都可以配置为向上/向下计数,并且可以从load register中加载一个值。
  • Interrupt Control: 中断控制模块根据操作模式生成单个中断。
  • Pulse Width Modulation (PWM):PWM 块产生具有指定频率和占空比的脉冲信号 PWM0。它使用定时器0作为 PWM0周期,定时器1作为 PWM0输出宽度。

时钟工作模式

  • 生成模式
  • 捕捉模式
  • 脉冲宽度调制模式
  • 级联模式

Generate Mode 生成模式

  • 在 Generate 模式下,加载寄存器中的值被加载到计数器中。当计数器启用时,根据定时器控制状态寄存器(TCSR)中向上/向下计数定时器(UDT)位的选择,开始计数。
  • 在计数器执行的转换过程中,计数器停止或自动从负载寄存器重新加载生成值,在达到超时值后,继续按照 TCSR 中的 Auto Relload/Hold (ARHT)位选择的方式进行计数。
  • 定时器中断状态(TINT)位在 TCSR 中设置,如果启用,外部 GenerateOut 信号在一个时钟周期内被驱动为1。
  • 如果启用,当到达超时值时,计时器的中断信号被驱动到1。通过向定时器中断寄存器写入一个1来清除中断。使用此模式生成具有指定间隔的重复中断或外部信号。

Capture Mode 捕捉模式

  • 在捕获模式下,当外部捕获信号被断言时,计数器的值存储在负载寄存器中。TINT 位也在 TCSR 中设置,用于检测捕获事件。根据 TCSR 中 UDT 位的选择,可以将计数器配置为此模式的向上或向下计数器。
  • Auto Reload/Hold (ARHT)位控制是否在清除前一个 TINT 标志之前用新的捕获值覆盖捕获值。使用此模式对外部事件进行时间标记,同时生成一个中断。

Pulse Width Modulation Mode 脉冲宽度调制模式

在脉冲宽度调制(PWM)模式下,两个定时器/计数器作为一对,产生具有指定频率和占空比的输出信号(PWM0)。定时器0设置周期,定时器1设置 PWM0输出的高时间。

Cascade Mode 级联模式

  • 在 Cascade 模式下,两个计时器/计数器被级联,作为单个64位计数器/计数器运行。级联计数器可以在生成和捕获模式下工作。TCSR0充当级联计数器的控制和状态寄存器。在此模式中忽略 TCSR1。
  • 当需要超过32位宽度的计时器/计数器时,请使用此模式。级联操作需要将 Timer0和 Timer1作为一对使用。计时器1的计数事件是当计时器0从所有的1滚动到所有的0,或者在倒计时时反过来。

Interrupts 中断

TC 中断信号可以通过 TCSR 中的 Enabel 定时器中断(ENIT)位来启用或禁用。TCSR 中的中断状态位(TINT)不能被禁用,并且总是反映计时器中断的当前状态。
在生成模式下,计数器中断是由
计数器滚动
引起的(与 ARHT 设置为1时重新加载计数器的条件相同)。在捕获模式下,中断事件是捕获事件

寄存器地址

在这里插入图片描述
在这里插入图片描述### Control/Status Register 0 (TCSR0) 控制/状态寄存器 0
在这里插入图片描述

1. CASC:
在这里插入图片描述
在这里插入图片描述

Load Register (TLR0 and TLR1)负载寄存器

在这里插入图片描述在这里插入图片描述

Timer/Counter Register (TCR0 and TCR1)计时器/计数器寄存器

在这里插入图片描述

自我设计-根据上述寄存器

  1. 对Load寄存器设置需要计数值(baseaddr + 0x04,0x100000000);//100Mhz

  2. 对 Control/Status Register打开生成模式:0比特位为0

  3. 对 Control/Status Register打开向下计数:1比特位为1

  4. 对 Control/Status Register打开外部生成信号计数:2比特位为1

  5. 对 Control/Status Register设置为自动加载模式:4比特位为1

  6. 对 Control/Status Register设置为加载计数:5比特为1

  7. 对 Control/Status Register设置为清楚:5比特为0 ####################################################

  8. 对 Control/Status Register定时器中断开始工作:6比特位为1

  9. 对 Control/Status Register打定时器开始工作:7比特位为1 ####################################################

  10. 其中2-8总结为,设置(baseaddr + 0x00,0xf6);

  11. 再变为(baseaddr + 0x00,0xd6);

  12. 对 Control/Status Register清楚定时器中断:8比特位为1(需要查看其是否有中断)

文档中设计

生成模式

在这里插入图片描述
对于向上计数和向下计数,其中断输出时间的计算。

捕获模式

  1. 当 ARHT 位设置为0并发生捕获事件时,捕获值被写入负载寄存器,该寄存器保存捕获值,直到读取负载寄存器。如果未读取负载寄存器,则后续捕获事件不会更新负载寄存器并丢失。
  2. 当 ARHT 位设置为1并发生捕获事件时,捕获值总是写入负载寄存器。随后的捕获事件更新负载寄存器并覆盖以前的值,无论它是否已被读取
  3. 可以设置计数器,根据 TCSR 中 UDT 位的选择决定是向上还是向下计数。

PWM模式

  1. Timer0和 Timer1的模式必须设置为 Generate 模式(TCSR 中的位 MDT设置为0)。
  2. TCSR0中的 PWMA0位和 TCSR1中的 PWMB0位必须设置为1才能启用 PWM 模式。
  3. GenerateOut 信号必须在 TCSR 中启用(位 GENT 设置为1)。PWM0信号是由 Timer 0和 Timer 1的 GenerateOut 信号生成的,因此这些信号必须在两个定时器/计数器中都启用
  4. 对中两个计时器的 GenerateOut 信号的断言级别必须设置为 ActiveHigh。
    计数器可以设置为向上或向下计数。
    在这里插入图片描述

级联模式

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

IP界面讲解

在这里插入图片描述

  1. Enable 64-bit Mode:如果需要64位宽度的 Axl 定时器,请选中此框。此选项禁用 Timer2选项,因为64位 AxITimer 是通过在 IP 核内部级联2个计时器创建的。
  2. Width of the Timer/Counter (bits): 根据用户需求选择8、16、32位计数宽度。
  3. Capture Trigger:选择将此信号配置为高有效或低有效。默认为高有效。
  4. Generate Out:选择将此信号配置为高有效或低有效。默认为高有效。

自己代码尝试

在这里插入图片描述
在初始化定时器,把计数值加载到计数器中后,设置为向下减法,generateout输出一个脉冲信号。中断interrupt为常一。
在这里插入图片描述
在通过对状态控制寄存器中清楚中断,中断输出归零。
在这里插入图片描述
上图为不打断点,直接运行的结果。可知,每次中断产生和清除都是成功运行的。

官方例程代码-无中断

在这里插入图片描述
其中,

  1. 进行初始化,对结构体分配地址和设备ID
  2. 自我测试,主要是先对load寄存器清零,对其重新赋值,启动计数器,再重新关闭计数器。比较启动计数器前后,计数寄存器中的值是否变化,若是变化,则计数器正常工作;若是不变,则计数器工作异常。
  3. 设置自动加载模式
  4. 获取计数寄存器中的值
  5. 开启计数器
  6. 获取计数寄存器中的值
  7. 若是两次取值相同,则计数异常;相同则计数正常
  8. 关闭计数器

需要注意的是,例程中计数器是从0开始加的。

官方例程代码-有中断

在这里插入图片描述

  1. 首先是计数器初始化,自我检测
  2. 然后是进行中断的初始化,中断函数的连接,设置为外部中断,打开中断、异常中断处理三件套
  3. 接下来就是中断处理函数
    为什么和其他中断不一样,此处中断处理函数是单独写出来的
    在这里插入图片描述
  4. 设置计数器的状态控制寄存器模式为自动加载和计数器初始化的
  5. 设置一个计数器初始值,该值会在计数器启动时被加载到计数器中
  6. 开启计数器
    需要注意,其中例程中计数器是向上加实现的
    清除中断是通过中断控制器连接的中断函数完成的。

对于上述的问题,可以通过以下方法解决:

在这里插入图片描述
这样,就是向下计数,并且generatedout可以输出。
在这里插入图片描述
但是上述寄存器位和文档中似乎并不一一对应
在这里插入图片描述
这个寄存器位才和文档中的寄存器位一一对应
主要是上图和本图一一匹配,对于XTmrCtr_SetOptions(XTmrCtr * InstancePtr, u8 TmrCtrNumber, u32 Options)函数中的Options,若为1,则添加对应的mask;若不为1,则置为0。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值