首页 > 其他分享 >AvalonMM接口Interval Timer IP的寄存器介绍和Interval Timer寄存器读写操作详解

AvalonMM接口Interval Timer IP的寄存器介绍和Interval Timer寄存器读写操作详解

时间:2024-07-16 17:41:50浏览次数:17  
标签:定时器 内部 间隔 Interval Timer 计数器 寄存器

一、间隔定时器结构

间隔定时器的结构框图:

 

该间隔定时器有如下两个特点:

- Avalon-MM接口,提供对6个16位寄存器的访问;
- 有一个脉冲输出接口(可选),可用作周期性脉冲发生器;

该间隔定时器的所有寄存器都是16位的,可兼容16-bit和32-bit处理器。某些寄存器只存在于特定的配置中,例如,当该间隔定时器配置为固定周期,那么period寄存器就不存在。

以下序列描述了间隔定时器的基本行为:

- Avalon-MM主设备可通过 control 寄存器实现以下行为:
- 启动和停止定时器;
- 使能或禁用IRQ;
- 指定count-down once或者continuous count-down模式;
- 处理器可通过读取 status 寄存器来获取当前定时器的行为;
- 处理器可通过向 period 寄存器写入特定的值来指定定时器的周期;
- 当内部的计数器计数到0时,会立即从 *period* 寄存器中重新加载计数值;
- 处理器可通过如下方式读取当前内部计数器的计数值:首先对 *snap* 寄存器执行写操作,然后再对 snap 寄存器执行读操作,就可以获得当前内部计数器的计数值;
- 当计数到0时,会触发以下一个或多个事件:
- 若使能了IRQ,则会生成一个IRQ;
- 脉冲发生器输出接口(可选)会输出一个时钟周期的有效值;
- 看门狗输出会使系统复位。

二、间隔定时器寄存器描述

Interval Timer寄存器描述:

status寄存器有2个域:

 

control寄存器有4个域:

 

注:同时向START位和STOP位写1会产生不确定的结果。

period 寄存器

periodlperiodh 寄存器共同存放了计数器的初始计数值。当下列情况之一发生时,内部计数器就会加载 periodlperiodh 寄存器中的值:

  • periodlperiodh 寄存器执行写操作;

  • 内部计数器计数到0。

snap 寄存器

主设备可以通过对 snaplsnaph 寄存器执行写操作(写数据被忽略)来读取当前内部计数器的值。执行写操作后,内部计数器的值便会存放在 snaplsnaph 寄存器中。无论内部计数器是否正在计数,对 snaplsnaph 寄存器执行写操作都可以获取内部计数器的值,并且此操作不会影响内部计数器的行为。

三、间隔定时器的中断

当内部计数器计数到0,并且 control 寄存器的 ITO 位为1时,间隔定时器会产生中断IRQ。可通过以下两种方式对IRQ进行应答:

  • 清除 status 寄存器的 TO 位;

  • 通过清除 control 寄存器的 ITO 位来禁用中断。

 

四、间隔定时器计数器的操作

间隔定时器在IP设置界面的配置:

image-20240711162243136

定时器寄存器文件位于Quartus Prime软件安装路径下的...\intelFPGA\22.1std\ip\altera\sopc_builder_ip\altera_avalon_timer\inc文件夹中。

image-20240710165547613

主要用了定时器的状态寄存器和控制寄存器中的两个函数:

image-20200812111331529

 下面对寄存器操作举例:

对于状态寄存器中定义的IOWR(base, ALTERA_AVALON_TIMER_STATUS_REG, data)函数,在Nios V软件工程的main.c中为IOWR(TIMER_0_BASE, 0, 0x00)。

 

对于控制寄存器中定义的IOWR(base, ALTERA_AVALON_TIMER_CONTROL_REG, data)函数,在Nios V软件工程的main.c中为IOWR(TIMER_0_BASE, 1, 0x07),作为使能中断语句。

标签:定时器,内部,间隔,Interval,Timer,计数器,寄存器
From: https://www.cnblogs.com/DoreenLiu/p/18305767

相关文章

  • 解决 React 中 setInterval 无法更新状态的问题:长按加速的实现
    解决React中setInterval无法更新状态的问题:长按加速的实现在开发React应用时,我们经常会遇到需要定时更新组件状态的场景。setInterval是一个常用的定时器函数,但在React中使用它时,可能会遇到状态无法更新的问题。今天,我们就来深入探讨一下这个问题,并通过一个长按加速的例......
  • AT_arc166_d [ARC166D] Interval Counts
    我们可以将题转化为选择若干区间,给区间中的每个\(y_i\)减一,这样我们就可以将问题转化为差分了。我们枚举区间的左端点,从左到右枚举,当我们枚举到\(i\)时,显然如果当前差分数组\(d_i>0\),那么我们需要将其减去\(d_i\),这样我们获得了一个向后加总共\(d_i\)个\(1\)的机会,此时......
  • mormot.rest.core--TRestBackgroundTimer
    mormot.rest.core--TRestBackgroundTimer{************自定义REST执行}type///TRestServer.Uri()方法可能执行的所有命令//-execSoaByMethod用于基于方法的服务//-execSoaByInterface用于基于接口的服务//-execOrmGet用于ORM读取操作,即Retrieve......
  • HAL库源码移植与使用之高级定时器REP寄存器
    高级定时器的溢出中断信号与更新要想输出,要经过一个重复计数寄存器,该寄存器由REP控制并由TIMX_RCR控制计数值它的原理是计数器每次上溢或下溢而输出中断信号和更新都能使重复计数器值减1,减到0时,再发生一次溢出就会产生更新事件所以如果设置RCR为N,更新事件将在N+1次溢出时发......
  • BKP备份寄存器和实时时钟笔记
    BKP(BackupRegisters)备份寄存器BKP可用于存储用户应用程序数据。当VDD(2.0~3.6V)电源被切断,他们仍然由VBAT(1.8~3.6V)维持供电。当系统在待机模式下被唤醒,或系统复位或电源复位时,他们也不会被复位TAMPER引脚产生的侵入事件将所有备份寄存器内容清除RTC引脚输出RTC校准时钟、RTC闹......
  • 最简 INA226 写寄存器的代码
    #include"hardware/i2c.h"#include"pico/binary_info.h"#defineI2C_SDA16#defineI2C_SCL17voidsetup(){//putyoursetupcodehere,torunonce:Serial.begin(115200);i2c_init(i2c_default,100*1000);gpio_set_functio......
  • ROS2开发BUG记录:在将 use_sim_timer 置为 true 时,节点的 Timer_Callback 行为“异常”
    问题:在将use_sim_timer置为true时,节点Timer_Callback行为“异常”。在回调函数中,使用self.get_logger().info("xxxx")输出信息,希望通过查看Info中的时间戳(如下),测试Timer_Callback回调频率是否正常。发现该时间戳与预期回调频率不符。[target_server-7][INFO][17......
  • mormot.core.threads--TSynBackgroundTimer
    mormot.core.threads--TSynBackgroundTimertype//TSynBackgroundThreadProcess类声明(稍后定义)TSynBackgroundThreadProcess=class;///由TSynBackgroundThreadProcess定期执行的事件回调TOnSynBackgroundThreadProcess=procedure(Sender:TSynBackgroundThr......
  • 这一篇让你更了解GPIO_Init()函数,了解CNF和MODE是如何配置输入输出模式,GPIOX_CR端口配置
    1GPIO初始化配置函数 GPIO_Init(GPIOC,&GPIOInitStruct); 1.1  正常的初始化函数代码1.2解读GPIO_Init(GPIOC,&GPIOInitStruct); 所以GPIOC的地址为  0x40000000+0x00010000+0x00001000=0x40011000STM32F103C8T6通用与复用功能I/O(GPIO与AFIO)、......
  • [oeasy]python024_vim读取文件_从头复制到尾_撤销_重做_reg_寄存器
    Guido的简历......