DW_apb_timers是新思设计的基于APB总线的一个IP DW_apb_timers框图如下: DW_apb_timers特性: 1、多达8个可编程定时器; 2、定时器宽度可设:8至32位; 3、支持两种运行模式:free running和user-mode; 4、支持定时器的独立计时; 5、每个中断可配置极性:低电平(下降沿),高电平(上升沿); 6、单个或组合中断输出标志的可配置选项; 7、可配置选项,为每个定时器提供读/写一致性寄存器; 8、可配置选项,包括定时器切换输出,每当定时器计数器重新加载时切换; 9、可配置选项,包含PWM切换输出0%-100%占空比 使用流程: 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