SOC系统经典IP介绍以及使用方法说明之dw_timer

系列文章目录


第一章 DW_TIMER功能及使用流程介绍


文章目录

目录

系列文章目录

文章目录

前言

一、使用步骤

1.定义中断服务子程序

2.定义main函数

总结



前言

dw_timer即定时器,在SOC系统中属于常用的模块,目前synopsis工具可以根据需求自动生成RTL代码,具有很强的通用性和移植性。本文主要针对dw_timer进行简单的介绍,包括寄存器配置flow以及使用过程中的一些注意事项。

timer的运行模式可以分为freerun以及user_mode两种,软件根据需求选择其中一种,其中user mode模式下,timer发生中断后会自动load初始配置的TIMER0_LOADCNT,而freerun模式下,每次timer发生中断后,需要软件更新TIMER0_LOADCNT寄存器。

一、使用步骤

举例:假如我们生成的timer为1拖2的timer,即同一个apb接口下面挂载两个timer定时器。当然也可以根据需求,生成1拖N的timer,下文介绍的内容都以1拖2为例子。

注意:本文介绍过程中使用的寄存器定义均严格与DW文档datasheet上保持一致,方便大家查阅分析。详细的寄存器描述这里不再赘述,需要大家自行查阅datasheet上的描述。

1.定义中断服务子程序

int timer_int_handler()
{
   rdata = REG32(TIMERS_INTSTATUS);
   if((rdata & 0x1) = 0x1){
      REG32(TIMER0_EOI);
   }
   else if((rdata & 0x2) = 0x2){
      REG32(TIMER1_EOI);
   }
   ......
}

 上述中断服务子程序,主要用于CPU处理中断,当timer计数到目标值后会给CPU上报中断,CPU收到中断后会跳转到中断服务子程序中,在上述服务子程序中,CPU先通过读总timer中断寄存器,根据其信息得知是哪个timer上报的中断,然后通过读其对应的中断状态位来清除当前timer中断。

2.定义main函数

CLK_TIMER_EN;  //配置当前timer的时钟使能,根据RTL设计来决定

TIMER_CLK_SEL; //选择timer计数时钟源,根据RTL设计来决定

set_irq_vector(NVIC_NUM_TIMER0,(int)timer_int_handler); //配置中断服务程序

enable_int(NVIC_NUM_TIMER0) //使能CPU中断服务

REG32(TIMER0_CONTROLREG) |= (0x1 << 1); //设置timer运行模式为user mode

REG32(TIMER0_CONTROLREG) &= ~(0x1 << 1); //设置timer运行模式为freerun mode

REG32(TIMER0_CONTROLREG) |= (0x1 << 2); //设置timer内部中断使能

REG32(TIMER0_LOADCNT) = 0xFF ; //设置timer计数值为256

REG32(TIMER0_CONTROLREG) |= (0x1 << 0); //设置timer 使能


总结

1. 首先需要先配置timer模块的时钟enable,打开timer的pclk,否则后续无法配置timer内部寄存器,理论上来说还需要保证timer的复位正常释放掉。

2. 然后配置timer的模式以及目标计数值。

3. 最后一步使能timer,自此timer开始工作,一旦计数达到预设的值就会产生中断。

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
dw_apb_timer是一种APB总线定时器模块,常用于系统计时和定时器功能的设计。该模块是用于处理器外围设备的接口,可以与ARM Cortex处理器进行通信。dw_apb_timer通常由以下部分组成: 1. APB接口:该接口用于与处理器进行通信,可以通过总线来读取和写入寄存器。 2. 时钟和计数器:dw_apb_timer包含一个内部时钟和计数器,可以提供精确的时间测量功能。通过读取计数器的值,可以获取经过的时间。 3. 计时模式:dw_apb_timer可以设置为计时模式,可以用于实现系统中的延时和计时任务。通过配置寄存器,可以设置定时器的触发条件和计时时间。 4. 中断功能:dw_apb_timer支持中断功能,可以在特定条件下触发中断,用于通知处理器定时器达到了预设的计时时间。中断信号可以作为处理器中断请求的一部分,用于实现定时任务的同步控制。 5. 预分频器:dw_apb_timer还包含一个预分频器,可以对时钟频率进行设置和调节,以适应不同的应用需求。 6. 寄存器:dw_apb_timer拥有一系列寄存器,用于配置和控制定时器的不同功能。通过读写这些寄存器,可以实现对定时器的各种设置和操作。 总之,dw_apb_timer是一种功能强大的定时器模块,常用于嵌入式系统的计时和定时任务设计。通过与处理器进行通信,提供精确的时间测量和控制功能,可以满足不同系统对计时器的需求。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

love混世_魔王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值