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
相关推荐
恒锐丰小瑞5 小时前
率能SS8841T 40V/2.5A/双通道H桥驱动芯片,PWM控制接口与低导通电阻(350mΩ),用于POS打印机/安防相机/机器人
单片机·嵌入式硬件·机器人
zcmodeltech6 小时前
钢铁冶金沙盘模型控制系统设计与实现:高炉-连铸-热轧多工序联动方案
分布式·stm32·单片机·嵌入式硬件·交互
徽京人7 小时前
VS Code 接入Esp 32步骤
vscode·单片机·嵌入式硬件
QH139292318808 小时前
Keysight N5183B N5183B 微波模拟信号发生器
网络·单片机·嵌入式硬件·集成测试·信息与通信
笨笨饿9 小时前
#110_SCH3000 平台图传系统配置指南:从 DVP 摄像头到 UVC/WiFi 双通道传输
c语言·stm32·单片机·嵌入式硬件·物联网·vim
笨笨饿11 小时前
#109_BK7258 蓝牙 A2DP 音频数据通路深度解析
python·stm32·单片机·mcu·物联网·编辑器·音视频
千秋岁rr11 小时前
5.0 TIM
单片机·嵌入式硬件
qq_4017004112 小时前
ADC基准电压与参考电压详细解读:以STM32和28335为例
stm32·单片机·嵌入式硬件
zcmodeltech13 小时前
水利水电沙盘模型控制系统设计与实现:多场景多工况联动方案
网络·stm32·嵌入式硬件·制造·多分类
2601_9667990414 小时前
CH398 技术解析:USB 3.0转千兆以太网单芯片方案与内置电源设计要点
单片机·嵌入式硬件