27.6
实验1:基本定时功能
本实验较为简单,我们将使用GPT定时器进行定时并产生中断请求触发中断,然后通过这个中断,切换LED的电平。
27.6.1
硬件设计
本次实验需要使用到LED灯来展示定时的效果,LED灯具体的电路讲解请参考本教程内容:第一个实验:用寄存器点亮LED灯——瑞萨RA系列FSP库开发实战指南(18)
注:
本实验仅用到LED1~3当中的其中一盏。
27.6.2
软件设计
27.6.2.1
新建工程
由于本实验需要用到LED,也会用到串口打印提示信息,因此我们在前面串口通信章节例程的基础上修改程序:UART波特率计算及实验1:UART收发回显————瑞萨RA系列FSP库开发实战指南(46)
对于e2studio开发环境:拷贝一份我们之前的e2s工程模板“19_UART_Receive_Send”,然后将工程文件夹重命名为“27_GPT_Basic_Timing”,最后再将它导入到我们的e2studio工作空间中。
对于Keil开发环境:拷贝一份我们之前的Keil工程模板“19_UART_Receive_Send”,然后将工程文件夹重命名为“27_GPT_Basic_Timing”,并进入该文件夹里面双击Keil工程文件,打开该工程。
工程新建好之后,在工程根目录的“src”文件夹下面新建“gpt”文件夹,再进入该文件夹里面新建源文件和头文件:“bsp_gpt_timing.c”和“bsp_gpt_timing.h”。工程文件结构如下。
列表1:文件结构
左右滑动查看完整内容
27_GPT_Basic_Timing ├─ ...... └─src ├─ led │ ├─ bsp_led.c │ └─ bsp_led.h ├─ debug_uart │ ├─ bsp_debug_uart.c │ └─ bsp_debug_uart.h ├─ gpt │ ├─ bsp_gpt_timing.c │ └─ bsp_gpt_timing.h └─ hal_entry.c
27.6.2.2
FSP配置
首先打开FSP配置界面,在Stacks中加入GPT,如下图所示。

我们使用GPT0来实现定时和触发中断功能,需要修改的只有“General”和“Interrupts”部分,其他按照默认即可,如下图所示。

在上图中我们可以将GPT模块属性进行区域性地划分为:“Common”、“General”、“Output”、“Input”、“Interrupts”、“Extra Features”、“Pins”这几个部分。
本实验主要配置“General”和“Interrupts”这几个部分的属性,因此在这里会对它们进行详细讲解。
“Common”部分的配置属性:
表2:GPT属性描述:“Common”部分

“General”部分的配置属性:
表3:GPT属性描述:“General”部分

“Interrupts”部分的配置属性:
表4:GPT属性描述:“Interrupts”部分

“Extra Features”部分的配置属性:
表5:GPT属性描述:“Extra Features”部分

27.6.2.3
GPT初始化函数
GPT初始化函数用于初始化GPT模块,并且启动GPT定时器,该函数如下所示。
列表2:代码清单27-1
GPT初始化函数
左右滑动查看完整内容
/* GPT 初始化函数*/
voidGPT_Timing_Init(void)
{
/* 初始化GPT0 模块*/
R_GPT_Open(&g_timer_gpt0_ctrl, &g_timer_gpt0_cfg);
/* 启动GPT0 定时器*/
R_GPT_Start(&g_timer_gpt0_ctrl);
}
在GPT初始化函数里面,首先通过R_GPT_Open函数初始化GPT模块,随后调用R_GPT_Start函数来启动GPT定时器。
27.6.2.4
GPT中断回调函数
我们在FSP配置里配置了GPT的中断,溢出中断优先级为10,GPT中断回调函数如下。
列表3:代码清单27-2:GPT中断回调函数
左右滑动查看完整内容
#include"led/bsp_led.h"
/* GPT 中断回调函数*/
voidgpt0_timing_callback(timer_callback_args_t* p_args)
{
/* 定时器溢出事件*/
if(TIMER_EVENT_CYCLE_END == p_args->event)
{
/* 翻转LED1 */
LED1_TOGGLE;//每秒翻转一次
}
}
该中断回调函数非常地简单,直接在回调函数里面使用if语句判断触发中断的事件是否是定时器溢出事件,若是定时器溢出事件则翻转一次LED1引脚的电平。由于定时器被我们配置为1秒的计时周期,因此每1秒会溢出一次,控制LED1的引脚的电平会每秒钟翻转一次。
27.6.2.5
hal_entry入口函数
以启明6M5开发板的RA6M5工程为例,hal_entry入口函数如下所示。
列表4:代码清单27-3:hal_entry函数
左右滑动查看完整内容
/* 用户头文件包含*/
#include"led/bsp_led.h"
#include"debug_uart/bsp_debug_uart.h"
#include"gpt/bsp_gpt_timing.h"
voidhal_entry(void)
{
/*TODO:add your own code here */
LED_Init();// LED 初始化
Debug_UART4_Init();// SCI4 UART 调试串口初始化
GPT_Timing_Init();// GPT 初始化
printf("这是一个GPT 的基本定时功能实验
");
while(1)
{
printf("The program is running ...
");
R_BSP_SoftwareDelay(1, BSP_DELAY_UNITS_SECONDS);
}
#ifBSP_TZ_SECURE_BUILD
/* Enter non-secure code */
R_BSP_NonSecureEnter();
#endif
}
27.6.3
下载验证
编译并下载到开发板后,复位板子让程序运行,然后可以观察到板载LED1(红色)每秒钟翻转一次状态,即以两秒为周期在缓慢闪烁。
未完待续
-
瑞萨
+关注
关注
38文章
22516浏览量
91164 -
中断
+关注
关注
5文章
919浏览量
43868 -
定时器
+关注
关注
23文章
3372浏览量
124445 -
GPT
+关注
关注
0文章
371浏览量
16956
原文标题:实验1:基本定时功能——瑞萨RA系列FSP库开发实战指南(99)
文章出处:【微信号:瑞萨嵌入式小百科,微信公众号:瑞萨嵌入式小百科】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
瑞萨RA系列FSP库开发实战指南之使用GPT基本定时功能实验
评论