这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » 软件与操作系统 » 野火启明6M5适配硬件定时器

共6条 1/1 1 跳转至

野火启明6M5适配硬件定时器

工程师
2025-01-05 21:52:13     打赏

      分析完硬件定时器框架和瑞萨已经适配的硬件定时器部分,接下来就是实际地适配硬件定时器了。

硬件资源

   从RA6M5规格书上可以看到,RA6M5支持6个32位通用定时器 和 4个16位通用定时器(支持pwm输出功能)。

软件配置

Kconfig增加硬件定时器选项

     通过查看瑞萨驱动目录中地SConscript文件,会发现硬件定时器对应地宏名为BSP_USING_TIM,因此只需要搜索瑞萨平台仓库,找到适配过硬件定时器地板卡,将其对应地Kconfig配置中硬件定时器部分复制到启明6M5板卡上即可,具体修改如下。1.png

从RA6M3目录拷贝timer_config.h至ra6m5目录下

     因为找到的带硬件定时器的板卡为RA6M3,因此就从此芯片的配置中拷贝文件。

1.png

menuconfig打开定时器开关

1.png     配好后保存再在emu环境中运行scons --target=mdk5

FSP设置

      以timer0为例

修改代码

     由于drv_hwtimer.c中已经写好了硬件定时器测试接口,因此不需要再去写新的测试代码,直接使用即可。但是由于原始的hwtimer定时器驱动仅仅适配了RA6M3,因此需要修改一下代码配置(在数组const rt_uint32_t PLCKD_FREQ_PRESCALER[PLCKD_PRESCALER_MAX_SELECT]中添加RA6M5配置)

const rt_uint32_t PLCKD_FREQ_PRESCALER[PLCKD_PRESCALER_MAX_SELECT] =
{
#ifdef SOC_SERIES_R7FA6M3
    PLCKD_PRESCALER_120M,
    PLCKD_PRESCALER_60M,
    PLCKD_PRESCALER_30M,
    PLCKD_PRESCALER_15M,
    PLCKD_PRESCALER_7_5M,
    PLCKD_PRESCALER_3_75M,
    PLCKD_PRESCALER_1_875M,
#endif
#ifdef SOC_SERIES_R7FA6M5 // 添加部分
    PLCKD_PRESCALER_120M,
    PLCKD_PRESCALER_60M,
    PLCKD_PRESCALER_30M,
    PLCKD_PRESCALER_15M,
    PLCKD_PRESCALER_7_5M,
    PLCKD_PRESCALER_3_75M,
    PLCKD_PRESCALER_1_875M,
#endif
};

      另外,由于目前plld时钟配置是100M,明显速率过高(32位计数器都不够用了),需要手动将PLLD时钟降下来,我改成配置在6.25M(rtthread框架曾看,是要求设置到1M,但实在设不下去了,再低串口打印就乱码了),具体修改如下:

1.png

功能验证

Hello RT-Thread!
msh >
msh >
msh >hw
hwtimer_sample
msh >hwtimer_sample
Read: Sec = 1, Usec = 0
msh >this is hwtimer timeout callback fucntion!
tick is :3422 !
this is hwtimer timeout callback fucntion!
tick is :3718 !
this is hwtimer timeout callback fucntion!
tick is :4014 !
this is hwtimer timeout callback fucntion!
tick is :4310 !
this is hwtimer timeout callback fucntion!
tick is :4606 !
this is hwtimer timeout callback fucntion!
tick is :4902 !
this is hwtimer timeout callback fucntion!
tick is :5198 !
this is hwtimer timeout callback fucntion!
tick is :5494 !
this is hwtimer timeout callback fucntion!
tick is :5790 !
this is hwtimer timeout callback fucntion!
tick is :6086 !
this is hwtimer timeout callback fucntion!
tick is :6382 !
this is hwtimer timeout callback fucntion!
tick is :6678 !
this is hwtimer timeout callback fucntion!
tick is :6974 !

     此时会发现硬件定时器的计数明显偏快(按照msh测试代码的写法,tick is的差值应该在1000左右才是正确的),但目前配置已经不能更慢了,只能到这程度(也可能是自己没找到正确的适配方法,毕竟看测试代码,那打印逻辑,像是在ra6m3上正确跑起来的)。验证完timer0后,仅需要将测试文件中的定时器指定成timer1,便可测试timer1 。

总结      至此,硬件定时器部分已经适配完毕,遗留一个硬件定时器定时不准的问题待解决。由于瑞萨目前驱动文件仅仅适配了timer0和timer1,若需要适配剩余的8个timer,则需要自行修改drv_hwtimer.c和板级的timer_config.h和Kconfig文件,修改量不算大,仅仅是复制粘贴罢了。






关键词: 瑞萨     适配     硬件     定时器     框架    

高工
2025-01-06 00:24:18     打赏
2楼

感谢楼主分享


专家
2025-01-06 00:53:12     打赏
3楼

谢谢分享


专家
2025-01-06 01:10:04     打赏
4楼

感谢楼主分享


专家
2025-01-06 06:45:12     打赏
5楼

学习一下


专家
2025-01-06 08:05:27     打赏
6楼

学习了


共6条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]