作者:少年阿炳
前言
本次分享是使用瑞萨的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
- }
复制代码 实验现象
LED1按照一秒每次的频率闪烁。
|