NOS II - Timer定时器

2024-06-11 09:20
文章标签 定时器 ii timer nos

本文主要是介绍NOS II - Timer定时器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

NOS II-Time定时器

简单回忆NIOS II中定时器的使用。

一、定时器的框图

image-20240610180740613

二、定时器寄存器的描述

定时器的寄存器都是16bit的,

偏移量寄存器名称R/W15bit4bit3bit2bit1bit0bit
0Status - 状态寄存器R/W - 可读可写*****runTO
1Control - 控制寄存器R/W***stopstartcontITO
2PeriodL - 周期低16位R/W超时周期-1(位15…0)
3PeriodH - 周期高16位R/W超时周期-1(位31…16)
4SnapL - 快照低16bitR/W计时快照(位15…0)
5SnapH - 快照高16bitR/W计时快照(位31…16)

1、状态寄存器

0bit : TO,这一位表示计时器寄到定时的时间时,这一位就会被置1。

1bit : run,如果为1这表示正在计数,只要在计数,这位就是1,否则为0

2、控制寄存器

0bit :ITO表示是否允许中断,一般都是要允许中断的;

1bit:cont表示是连续的那个单词,表示是否工作在连续工作模式,还是单次工作模式.。即如果置为1,计数完一轮之后再计数第二轮,一直循环计数

2bit:start位,如果这位被置为1,则表示启动定时器;

3bit:stop位,如果是1这表示定时器IP停止工作;

3、周期寄存器

用于配置要计数多久

4、快照寄存器

用于查看当前计数到哪里了

三、中断操作

只要内部计数器减到且控制寄存器对的ITO位设置位1,定时器内核就会产生IRO。用户要用以下的任意一种方式应答IRQ:

  • 清除状态寄存器的TO位,等待下一个超时事件的发生;
  • 通过将控制寄存器的ITO位清0来禁止中断

四、定时器内核的配置选项

image-20240610184835964

五、定时器的软件编程

定时器内核提供硬件对的寄存器访问和HAL层的API函数:

定义内核的寄存器映射并提供硬件设备访问宏定义:
altera_avalon_timer_regs.h
实现了HAL系统库的定时器设备驱动程序:
altera_avalon_time.h
altera_avalon_timer_sc.c
altera_avalon_timer_ts.c
altera_avalon_timer_vars.v

定时器TIMER0的简单应用,配置步骤:

//	定时器的初始化alt_ic_isr_register(TIMER0_IRQ_INTERRUPT_CONTROLLER_ID, TIMER0_IRQ, TIMER0_Interrupts, NULL, 0);//	Timer0中断函数注册,TIMER0_Interrupts是中断服务函数,即计数到时需要执行的任务,用户自己编写IOWR_ALTERA_AVALON_TIMER_CONTROL(TIMER0_BASE, 0);//配置控制寄存器		停止Timer0。TIMER0_BASE是定时器的地址IOWR_ALTERA_AVALON_TIMER_STATUS(TIMER0_BASE, 0);//配置状态寄存器		清中断标志IOWR_ALTERA_AVALON_TIMER_PERIODH(TIMER0_BASE, (2500000 >> 16));//配置周期寄存器的高16bit,nios的时钟50MHz,周期是20ns,要计时50ms=50000000ns,50_000_000ns/20ns=2500000次,50MHz的时钟需要计数到250000次才能计数到50msIOWR_ALTERA_AVALON_TIMER_PERIODL(TIMER0_BASE, (2500000 & 0xFFFF));//配置周期寄存器的低16bit	定时时间为50ms//	启动定时器IOWR_ALTERA_AVALON_TIMER_CONTROL(TIMER0_BASE, 0x07);//	启动Timer0定时器

对注册中断函数alt_ic_isr_register()的参数进行简单的介绍:

  • TIMER0_IRQ_INTERRUPT_CONTROLLER_ID:是中断控制器标号,从system.h中复制。arm系统中一般有个中断控制器来管理中断,比如串口中断,定时中断等;
  • TIMER0_IRQ:硬件中断号,从system.h中复制
  • TIMER0_Interrupts:中断服务函数
  • NULL:这位参数是指向与设备驱动实例相关的数据结构体
  • 0:flag标志位,保留使用,一般我们置为0就可以;
--晓凡 2024610日于武汉书 

这篇关于NOS II - Timer定时器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1050764

相关文章

AI基础 L9 Local Search II 局部搜索

Local Beam search 对于当前的所有k个状态,生成它们的所有可能后继状态。 检查生成的后继状态中是否有任何状态是解决方案。 如果所有后继状态都不是解决方案,则从所有后继状态中选择k个最佳状态。 当达到预设的迭代次数或满足某个终止条件时,算法停止。 — Choose k successors randomly, biased towards good ones — Close

从0到1,AI我来了- (7)AI应用-ComfyUI-II(进阶)

上篇comfyUI 入门 ,了解了TA是个啥,这篇,我们通过ComfyUI 及其相关Lora 模型,生成一些更惊艳的图片。这篇主要了解这些内容:         1、哪里获取模型?         2、实践如何画一个美女?         3、附录:               1)相关SD(稳定扩散模型的组成部分)               2)模型放置目录(重要)

学习记录:js算法(二十八):删除排序链表中的重复元素、删除排序链表中的重复元素II

文章目录 删除排序链表中的重复元素我的思路解法一:循环解法二:递归 网上思路 删除排序链表中的重复元素 II我的思路网上思路 总结 删除排序链表中的重复元素 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。 图一 图二 示例 1:(图一)输入:head = [1,1,2]输出:[1,2]示例 2:(图

LeetCode:3177. 求出最长好子序列 II 哈希表+动态规划实现n*k时间复杂度

3177. 求出最长好子序列 II 题目链接 题目描述 给你一个整数数组 nums 和一个非负整数k 。如果一个整数序列 seq 满足在下标范围 [0, seq.length - 2] 中 最多只有 k 个下标i满足 seq[i] != seq[i + 1] ,那么我们称这个整数序列为好序列。请你返回 nums中好子序列的最长长度。 实例1: 输入:nums = [1,2,1,1,3],

代码训练营 Day26 | 47.排序II | 51. N-皇后 |

47.排序II 1.跟46题一样只不过加一个树层去重 class Solution(object):def backtracking(self,nums,path,result,used):# recursion stopif len(path) == len(nums):# collect our setresult.append(path[:])return for i in range(

【Qt】定时器事件

定时器事件 在之前学习QTimer中实现了定时器的功能,而在QTimer背后是QTimerEvent定时器事件进行支撑的。在QObject中提供了一个timeEvent这个函数。 startTimer启动定时器killTimer关闭定时器 Qt 中在进⾏窗⼝程序的处理过程中,经常要周期性的执⾏某些操作,或者制作⼀些动画效果,使⽤定 时器就可以实现。所谓定时器就是在间隔⼀定时间后,去执⾏某⼀

独立按键单击检测(延时消抖+定时器扫描)

目录 独立按键简介 按键抖动 模块接线 延时消抖 Key.h Key.c 定时器扫描按键代码 Key.h Key.c main.c 思考  MultiButton按键驱动 独立按键简介 ​ 轻触按键相当于一种电子开关,按下时开关接通,松开时开关断开,实现原理是通过轻触按键内部的金属弹片受力弹动来实现接通与断开。  ​ 按键抖动 由于按键内部使用的是机

代码随想录训练营day37|52. 携带研究材料,518.零钱兑换II,377. 组合总和 Ⅳ,70. 爬楼梯

52. 携带研究材料 这是一个完全背包问题,就是每个物品可以无限放。 在一维滚动数组的时候规定了遍历顺序是要从后往前的,就是因为不能多次放物体。 所以这里能多次放物体只需要把遍历顺序改改就好了 # include<iostream># include<vector>using namespace std;int main(){int n,m;cin>>n>>m;std::vector<i

代码随想录刷题day25丨491.递增子序列 ,46.全排列 ,47.全排列 II

代码随想录刷题day25丨491.递增子序列 ,46.全排列 ,47.全排列 II 1.题目 1.1递增子序列 题目链接:491. 非递减子序列 - 力扣(LeetCode) 视频讲解:回溯算法精讲,树层去重与树枝去重 | LeetCode:491.递增子序列_哔哩哔哩_bilibili 文档讲解:https://programmercarl.com/0491.%E9%80%92%E

代码随想录算法训练营Day37|完全背包问题、518.零钱兑换II、377. 组合总和 Ⅳ、70. 爬楼梯(进阶版)

完全背包问题                  和01背包最大区别就是一个物品可以重复放多次,因此遍历空间时可以从前往后。 import java.util.*;public class Main{public static void main (String[] args) {Scanner sc = new Scanner(System.in);int m = sc.nextInt