Renesas MCU之定时器计数功能应用

目录

概述

[1 功能介绍](#1 功能介绍)

[1.1 时钟相关配置](#1.1 时钟相关配置)

[1.2 应用接口](#1.2 应用接口)

[2 FSP配置Project参数](#2 FSP配置Project参数)

[2.1 软件版本信息](#2.1 软件版本信息)

[2.2 配置参数](#2.2 配置参数)

[2.3 项目生成](#2.3 项目生成)

[3 定时器功能代码实现](#3 定时器功能代码实现)

[3.1 定时器初始化函数](#3.1 定时器初始化函数)

[3.2 定时器回调函数](#3.2 定时器回调函数)

[4 功能测试](#4 功能测试)

[5 参考文档](#5 参考文档)


概述

本文主要介绍Renesas MCU的定时器功能的基本用法,笔者使用FSP工具配置定时器参数,基于Renesas e² studio编写和调试代码。

1 功能介绍

1.1 时钟相关配置

时钟配置:

AGT时钟基于PCLKB、LOCO或子时钟频率。可以使用RA Configuration编辑器的Clocks选项卡或在运行时使用CGC接口来设置时钟频率。

定时器周期

RA Configuration编辑器将根据所选的周期时间、单位和时钟速度自动计算周期计数值和源时钟分配器。当选择的单位为"Raw counts"时,根据选择的时钟源不同,允许的最大周期设置不同:

Clock source 16-bit Timer Maximum period (counts) 32-bit Timer Maximum period (counts)
LOCO/Subclock 0x800000 0x8000000000
PCLKB 0x80000 0x800000000
All other sources 0x10000 0x100000000

注意:

虽然AGT是一个16位定时器,但由于计数器溢出时发生周期中断,将周期寄存器设置为0导致有效周期为1个计数。因此,所有用户提供的原始计数值都反映了周期计数的实际数量(而不是原始寄存器值)。

1.2 应用接口

1)启动和停止AGT

在启动或停止定时器后,AGT寄存器不能被访问,直到AGT状态在3个AGTCLK周期后更新。如果在3 AGTCLK周期结束之前调用另一个AGT函数,则该函数旋转等待AGT状态更新。启动或停止计时器后所需的等待时间可以使用AGTCLK的频率来确定,该频率由timer_cfg_t::source_div和agt_extended_cfg_t::count_source派生。

在访问MCU外设寄存器之前,应用程序负责确保所需的时钟启动和稳定。

2)低功耗模式

AGT1(仅通道1)可用于进入贪睡模式,或在计数器底流发生时唤醒MCU从贪睡、软件待机或深度软件待机模式。比较匹配A和B事件也可用于从软件待机或贪睡模式中唤醒。

3)一次性模式

AGT定时器本身不支持单次模式。单次模式是通过在调用回调之前停止中断服务程序中的计时器来实现的。如果在计时器到期之前中断没有得到服务,计时器将生成多个事件。在这种情况下,回调只被调用一次,但如果计时器链接到Transfer (r_dtc),则可能生成多个事件。

2 FSP配置Project参数

2.1 软件版本信息

软硬件信息 版本信息
Renesas MCU R7FA4M2AD3C
Renesas e² studio 2024-04 (24.4.0)
FSP 版本 5.3.0

2.2 配置参数

1)添加和定时器相关的Stacks

2)配置定时器参数

修改属性信息,定时器中断函数触发时间为1ms

定义定时器中断函数

2.3 项目生成

完成以上参数配置就可以生成项目,嗲你Generate project content 就可以生成项目文件,具体文件架构如下:

3 定时器功能代码实现

3.1 定时器初始化函数

代码24行:初始化定时器相关的参数,包括分频系数、中断回调函数等

代码26行:启动定时器

源代码:

cpp 复制代码
void g_timer0_Init(void)
{
    fsp_err_t err = FSP_SUCCESS;
    /* Initializes the module. */
    err = R_AGT_Open(&g_timer0_ctrl, &g_timer0_cfg);
    /* Handle any errors. This function should be defined by the user. */
    assert(FSP_SUCCESS == err);
    /* Start the timer. */
    (void) R_AGT_Start(&g_timer0_ctrl);
}

3.2 定时器回调函数

代码37行:检测定时器中断溢出事件

代码40行:实现1s定时

代码41行:当时间到达1s之后,LED翻转

源代码

cpp 复制代码
void g_timer0_callback(timer_callback_args_t *p_args)
{
    static int count =0 ;

    /* 1毫秒定时器溢出事件 */
    if (TIMER_EVENT_CYCLE_END == p_args->event)
    {
        count++;
        if( count %1000 == 0)
            LED3_TOGGLE;
    }
}

4 功能测试

编译代码下载代板卡中,可以看见LED3会以1s的间隔闪烁

1)点亮LED3的效果

2)关闭LED3的效果

5 参考文档

bash 复制代码
file:///D:/Renesas/RA/e2studio_v2024-04_fsp_v5.3.0/fsp_documentation/v5.3.0/fsp_user_manual_v5.3.0/index.html
相关推荐
网易独家音乐人Mike Zhou6 小时前
【卡尔曼滤波】数据预测Prediction观测器的理论推导及应用 C语言、Python实现(Kalman Filter)
c语言·python·单片机·物联网·算法·嵌入式·iot
zy张起灵6 小时前
48v72v-100v转12v 10A大功率转换电源方案CSM3100SK
经验分享·嵌入式硬件·硬件工程
lantiandianzi13 小时前
基于单片机的多功能跑步机控制系统
单片机·嵌入式硬件
哔哥哔特商务网13 小时前
高集成的MCU方案已成电机应用趋势?
单片机·嵌入式硬件
跟着杰哥学嵌入式13 小时前
单片机进阶硬件部分_day2_项目实践
单片机·嵌入式硬件
电子科技圈14 小时前
IAR与鸿轩科技共同推进汽车未来
科技·嵌入式硬件·mcu·汽车
东芝、铠侠总代1361006839315 小时前
浅谈TLP184小型平面光耦
单片机·嵌入式硬件·物联网·平面
lantiandianzi15 小时前
基于单片机中医药柜管理系统的设计
单片机·嵌入式硬件
嵌入式知识大讲堂15 小时前
HDMI数据传输三种使用场景
单片机
黑客呀16 小时前
[系统安全]Rootkit基础
stm32·单片机·系统安全