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
相关推荐
EVERSPIN23 分钟前
分享国产32位单片机的电机控制方案
单片机·嵌入式硬件
每天一杯冰美式oh25 分钟前
51单片机的家用煤气报警系统【proteus仿真+程序+报告+原理图+演示视频】
嵌入式硬件·51单片机·proteus
芯橦3 小时前
【瑞昱RTL8763E】音频
单片机·嵌入式硬件·mcu·物联网·音视频·visual studio code·智能手表
夜间去看海7 小时前
基于单片机的智能浇花系统
单片机·嵌入式硬件·智能浇花
VirtuousLiu8 小时前
LM74912-Q1用作电源开关
单片机·嵌入式硬件·ti·电源设计·lm74912·电源开关
打地基的小白8 小时前
软件I2C-基于江科大源码进行的原理解析和改造升级
stm32·单片机·嵌入式硬件·通信模式·i2c
Echo_cy_8 小时前
STM32 DMA+AD多通道
stm32·单片机·嵌入式硬件
朴人8 小时前
【从零开始实现stm32无刷电机FOC】【实践】【7.2/7 完整代码编写】
stm32·单片机·嵌入式硬件·foc
追梦少年时8 小时前
STM32中断——外部中断
stm32·单片机·嵌入式硬件
bai_lan_ya9 小时前
stm32定时器中断和外部中断
stm32·单片机·嵌入式硬件