前言
本次分享是使用瑞萨的RASC自动生成定时器的基础配置,在尝试使用定时器时,试了N遍都不得其法,最终求助后完成了定时器的配置。感谢。
本文只分享定时器相关的内容,新手需要有一点点的基础,至少会点灯了。
配置定时器的注意事项
1.PCLKB时钟频率较高,秒中断需要切换其他低速时钟,本次我选择的是LOCO。
2.RASC里配置是直接配置中断间隔时间,和stm32需要计算的方式不一样。
配置过程
选择 New Stack-->timers-->Timer,Low-Power(r_agt)
点击新生成的Stack,
分别在General和Interrupt中配置参数和回调函数。
时钟选择:LOCO
Period Unit:选择 milliseconds(毫秒)
Period:输入500
上面的意思是让定时器没500ms产生一次中断。
在Interrupt中定义回调函数,函数名可自定义。
设置中断优先级Priority 3
同时我配置了LED1。
到这里就配置完毕。点击生成工程。
代码部分
#include "hal_data.h"
FSP_CPP_HEADER
void R_BSP_WarmStart(bsp_warm_start_event_t event)
FSP_CPP_FOOTER
volatile uint32_t time0_500ms = 0
void g_timer0_callback(timer_callback_args_t *p_args)
{
/* TODO: add your own code here */
if (TIMER_EVENT_CYCLE_END == p_args->event)
{
time0_500ms ++;
}
}
/*******************************************************************************************************************//**
* main() is generated by the RA Configuration editor and is used to generate threads if an RTOS is used. This function
* is called by main() when no RTOS is used.
**********************************************************************************************************************/
void hal_entry(void)
{
/* TODO: add your own code here */
fsp_err_t err;
/* TODO: add your own code here */
err = R_AGT_Open(&g_timer0_ctrl, &g_timer0_cfg);
assert(FSP_SUCCESS == err);
err = R_AGT_Start (&g_timer0_ctrl);
while(1)
{
if(time0_500ms >= 2)
{
time0_500ms = 0;
R_PORT4->PODR ^= 1<<(BSP_IO_PORT_04_PIN_15 & 0xFF);
}
}
#if BSP_TZ_SECURE_BUILD
/* Enter non-secure code */
R_BSP_NonSecureEnter();
#endif
}
实现现象
*附件:r_agt.rarLED1按照一秒每次的频率闪烁。
代码
|