首页 > 其他分享 >DW_apb_timers介绍 --20240305

DW_apb_timers介绍 --20240305

时间:2024-03-05 22:58:00浏览次数:28  
标签:20240305 定时器 -- 清除 timer 中断 timers 寄存器 加载

DW_apb_timers是新思设计的基于APB总线的一个IP   DW_apb_timers框图如下: 0 DW_apb_timers特性: 1、多达8个可编程定时器; 2、定时器宽度可设:8至32位; 3、支持两种运行模式:free running和user-mode; 4、支持定时器的独立计时; 5、每个中断可配置极性:低电平(下降沿),高电平(上升沿); 6、单个或组合中断输出标志的可配置选项; 7、可配置选项,为每个定时器提供读/写一致性寄存器; 8、可配置选项,包括定时器切换输出,每当定时器计数器重新加载时切换; 9、可配置选项,包含PWM切换输出0%-100%占空比   使用流程: 0 timer使用较为简单,内部寄存器也很少 设置timer模式为free running或者user-mode,设置中断处理函数,初始化load值,后开启使能timer 根据wclk的大小,(初始load值-当前读取值TimerNCurrentValue)/wclk,就可以得出计时时间   定时器配置: 1、选择定时器数量(最多有8个定时器) 每个定时器的有5个单独的寄存器,加载计数寄存器(TimerNLoadCount)、当前值计数器(TimerNCurrentValue)、控制寄存器(TimerNControlReg)、中断结束寄存器(TimerNEOI)、中断状态寄存器(TimerNIntStatus) 2、启用和禁用定时器 当定时器启用并运行时,其计数器在时钟信号timer_N_clk的每个上升沿递减。当定时器从禁用转换为启用时,其TimerNLoadCount寄存器的当前值在timer_N_clk的下一个上升沿加载到定时器计数器。 当定时器使能位被置位时,初始值在tiemer_en信号的上升沿被加载到定时器计数器中。当定时器未使能时,总是回读“0”;否则,定时器的当前值(TimerNCurrentValue寄存器)被读回。 3、配置定时器位宽 通过配置Timer_WIDTH_N寄存器的参数配置宽度,每个定时器宽度范围为:8~32位。如果APB数据总线的宽度小于定时器的宽度(APB总线位宽可以是8、16、32位),则必须有多个APB写访问才能加载数据。 4、加载计数器倒计时值 使用加载计数寄存器(TimerNLoadCount)将初始值加载到定时器中,两个事件会导致定时器从TimerALoadCount寄存器加载初始计数: (1)定时器在复位或禁用后启用; (2)定时器倒计时至0; 当定时器倒计时至0时,会加载两个值之一,具体取决于定时器的操作模式: (1)user mode:定时器加载TimerNLoadCount寄存器的当前值。若需要固定的定时中断,使用该模式。通过给TimerNControlReg寄存器位1写“1”来指定该模式。 (2)free running:定时器加载最大值,取决于定时器宽度; 4、使用中断 通过TimerNStatus和TimerNEOI寄存器处理中断以确保中断清除的安全操作。由于HCLK/PCLK的比率,如果pclk执行写操作清除中断,它可以在不知道写入是否发生的情况下继续总线上的另一次传输。因此,通过读操作清除中断会安全的多。 要检测和服务中断,系统时钟必须处于活动状态。timer模块timer_en输出总线用于激活定时器时钟,并确保定时器运行时为组件提供活动系统时钟。 5、清除中断 如果定时器被使能,则中断保持有效,直到通过读取TimerNEOI(单独中断结束寄存器)和TimersEOI(全局中断结束寄存器)之一时将其清除。如果定时器被禁止,定时器中断被清除。可以通过读取TimerNEOI寄存器来清除单个定时器中断。也可以通过读取TimersEOI寄存器或禁用定时器来一次清除所有活动的定时器中断。 6、检查中断状态 通过读取TimerNIntStatus寄存器来查询单个定时器的状态,而无需清除其中断。也可以通过读取全局TimersNIntStatus寄存器来查询所有定时器的中断状态而不清除中断。 7、屏蔽中断 使用TimerNControlReg寄存器屏蔽每个单独的定时器中断。通过给TimenNControlReg寄存器的第2位写“1”来屏蔽一个中断。 如果所有单独的定时器中断都被屏蔽,那么组合中断也要被屏蔽。 8、设置中断极性 通过使用TIM_INTRPT_PLRITY参数将生成的定时器中断的极性配置为高电平有效或低电平有效。除了每个定时器的中断输出的信号之外,还有一个全局中断标志timer_intr_flag,如果任何定时器发生中断,则该标志被断言。该中断标志与其他生成的中断具有相同的极性特征。  

标签:20240305,定时器,--,清除,timer,中断,timers,寄存器,加载
From: https://www.cnblogs.com/lethe1203/p/18055461

相关文章

  • 天梯选拔赛第一场
    B孵化小鸡-SMUOJ题解:因为数据很小我们可以枚举每一个状态然后判断一下是否可以达到孵化的温度即可我们用二进制枚举,一共1<<m相当于2的m次方,用二进制枚举每一个状态//#include<bits/stdc++.h>//#pragmaGCCoptimize("Ofast")#include<iostream>#include<cstdio>#inc......
  • 自我介绍+软工5问
    这个作业属于哪个课程https://edu.cnblogs.com/campus/gdgy/SoftwareEngineering2024>这个作业要求在哪里https://edu.cnblogs.com/campus/gdgy/SoftwareEngineering2024/homework/13135这个作业的目标1.自我介绍2.熟悉博客园和github的使用3.通过自学提前了解软......
  • 软件工程第二周开课博客
    1.介绍自己 本人是一名软件工程专业大二学生,之所以报考计算机专业是因为小时候对软件制作感兴趣并且曾经接触过相关职业人员。但经过两年的学习,我发现计算机,尤其是软件工程专业的现状与我想象的有许多不同。任何一名软件工程师都是经过长期不懈的学习及练习铸就,并非仅仅兴趣......
  • Java11改进的垃圾回收器
       传统的C/C++等编程语言,需要程序员负责回收已经分配的内存。显示进行垃圾回收是一件比较困难的事情,因为程序员并不总是知道内存应该何时被释放。如果一些分配出去的内存得不及时回收,就会引起系统运行速度下降,甚至导致程序瘫痪,这种现象被称为内存泄漏。总体而言,显示进行垃圾......
  • 24-3-5 个人赛
    A-瑞士轮难度:⭐⭐⭐题目大意现有n个人,n一定是偶数,每个人都有一个初始分数p和能力值s;进行进行r轮比赛,每轮比赛先按分数将n人进行排序,第一名和第二名比,第三名和第四名比,以此类推,能力值高者获胜,胜者加一分,败者不加分;问r轮过后排名第k的人是谁;解题......
  • 《MySQL是怎样运行的:从根儿上理解 MySQL》PDF
    《MySQL是怎样运行的:从根儿上理解MySQL》采用诙谐幽默的表达方式,对MySQL的底层运行原理进行了介绍,内容涵盖了使用MySQL的同学在求职面试和工作中常见的一些核心概念。《MySQL是怎样运行的:从根儿上理解MySQL》总计22章,划分为4个部分。第1部分介绍了MySQL入门的一些知识,比如MySQ......
  • 用 Putty SSH 切换 openpilot 分支版本
    -----BEGINRSAPRIVATEKEY-----MIIEogIBAAKCAQEAvol16t9E6vieTSmrdylhws3JsGeeZxoeloIAKhAmuQmrAZTPVXkTqVbt23gPuYdDIm0YGw+AzLVVwbeoBL2fJ3dOBO3iwPS02chQ2e0pEjlY+KFzkLE9BpyZiqwEluSrJU1qlc036NlwrWftNOIpC8ZshXgTvDTnBK1taWvIBXUA06B/RawO5IMrInP11REkzqHu15c0aHv3......
  • C语言基础-1、逻辑类型和运算
    一、逻辑类型和运算#include<stdbool.h>之后就可以使用bool和true、falseex1:#include<stdio.h>#include<stdbool.h>intmain(){ boolb=6>5; boolt=true; printf("%d\n",t); t=2; printf("%d\n",t); printf("%d\n&q......
  • code top push
    `typeIntHeapstruct{sort.IntSlice}func(h*IntHeap)Push(vinterface{}){h.IntSlice=append(h.IntSlice,v.(int))}func(h*IntHeap)push(vint){heap.Push(h,v)}func(h*IntHeap)Pop()interface{}{n:=len(h.IntSlice)-1num:=h.IntSlice[n......
  • div contenteditable="true" 添加placehoder效果
    <divclass="contain":style="{height:editableHeight+'px'}" v-html="innerText" ref="editableDiv" contenteditable="true" :placeholder=placeholder @input="inputTe......