今天继续和大家分享瑞萨AGT定时器的软件配置过程。
一:低功耗定时器知识分享:
低功耗异步通用计时器(AGT)是一款16位计时器,可用于脉冲输出、外部脉冲宽度或周期的测量,以及计数外部事件。:该计时器由一个重装寄存器和下计数器组成。重装寄存器和下计数器被分配至相同的地址,可通过AGT寄存器进行访问。
定时器几种工作模式
定时器模式 :在该模式下,计数值在计数源的每个上升沿递减1。当计数值到达 0x0000 并输人下一个计数源时,发生计数器下溢事件并产生中断请求。
脉冲输出模式 :可以从 AGTIOn 和 AGTOn 引脚输出脉冲。每次发生下溢时,输出电平都会反转。实现输出PWM功能。
事件计数器模式 :在事件计数器模式下,计数器由输人到 AGTIOn 引脚的外部事件信号(计数源)驱动(递减计数)。
脉冲宽度测量模式: 在脉冲宽度测量模式下,测量输人到 AGTIOn 引脚的外部信号的脉冲宽度。
脉冲周期测量模式 在脉冲周期测量模式下,测量输入到 AGTOn 引脚的外部信号的脉冲周期。仅测量周期长于计数源周期两倍的输入脉冲。此外,低电平和高电平宽度都必须长于计数源的周期。如果输人比这些条件短的脉冲周期,输人可能会被忽略。
比较匹配功能:PWM 模式比较匹配功能可用于PWM输出。
主要特性如下所示:
超低功耗运行:
可在CPU休眠模式下独立工作、典型功耗在微安(μA)级别
多种工作模式:
间隔定时器模式、脉冲输出模式、唤醒定时器模式
宽范围时钟源选择:
内部低速振荡器(LOCO)、外部32.768kHz晶体、内部主时钟分频
灵活的时钟分频:
二:软件配置E2S软件配置过程如下:
2.1 开启低功耗定时器的功能
这里我们使能低功耗定时0。
2.2 配置低功耗定时器基本属性
这里时钟源如下
主要有四类时钟输人源:
PCLKB:PCLKB,PCLKB/2.PCLKB/8
LOCO,SUBCLK:AGTLCLK/d, AGTsCLK/d (d = 1, 2,4, 8, 16, 32, 64, 128)·
仅 AGTn (n=1,3,5)也可以连接到 AGTn (n=0,2,4)的下溢信号进行计数
外部事件输人(通过 AGTIO 引脚)
三:软件代码如下:
3.1 初始化定时器0:
/*定时器0 初始化函数*/ /* AGT初始化函数 系统定时器0用作系统时钟*/ void AGT_Timing_Init(void) { /* 初始化 APT 模块 */ R_AGT_Open(&g_timer0_ctrl, &g_timer0_cfg); /* 启动 APT 定时器 */ R_AGT_Start(&g_timer0_ctrl); }
3.2 定时器0回调函数编写:
宏定义一下LED的功能函数:
#define LED_TOGGLE R_PORT10->PODR ^= 1<<(BSP_IO_PORT_10_PIN_01 & 0xFF)
回调函数如下:
/* 定时器溢出 中断回调函数 运行时间100MS */ void g_timer0_callback(timer_callback_args_t * p_args) { if (TIMER_EVENT_CYCLE_END == p_args->event) { LED_TOGGLE ; } // R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_10_PIN_01, BSP_IO_LEVEL_LOW); }
中断回调函数非常简单,使用if语句判断引起中断的事件,若是定时器溢出中断(TIMER EVENT_CYCLE END)则翻转一次 板载LED引脚 的电平。
总结如下:
1:使用FSP配置底层的定时器的驱动函数很方便,只需要简单的操作就可以。
2:配置时候注意定时器的时钟来源,时钟频率和时基的选择,错误的配置可能导致定时器无法输出想要的时基。
3:回调函数的里面的中断选择,触发时,添加用户代码即可。
四:试验现象:
板载的LED灯以1S的时间间隔闪烁。
五:应用场景如下:
系统唤醒定时器、周期性数据采集、实时时钟(RTC)辅助、看门狗定时器替代、节能模式下的时间基准