RH850开发板StarterKit示例程序分析--R_SYSTEM_TimerInit()定时器初始化

本文将开始分析定时器初始化的代码,其他已发布的代码分析可参看以下链接
一、系统时钟初始化R_SYSTEM_ClockInit();

email:1256153255@qq.com

website for get 瑞萨RH850开发板 and 瑞萨E1仿真器
在这里插入图片描述

言归正传开始介绍本文的内容。

2、定时器OSTM0初始化
此处是初始化定时器OSTM0,用于产生1ms tick
在这里插入图片描述
Code segment 2.1

2.1、R_OSTM0_Init()
在这里插入图片描述
Code segment 2.2
Code segment 2.2-> Line82配置OSTM0仿真寄存器
在这里插入图片描述
图2.1
通过上图可知,配置OSTM0仿真寄存器,使之在Debuger接入MCU时,count clock停止。
由下图可知,EPS.SVSTOP可通过Debugger进行set,用户禁止对其进行设置。
在这里插入图片描述
图2.2

Code segment 2.2-> Line83配置OSTM0CTL寄存器
①配置counter的操作模式(Interval timer mode或Free-run compare mode),此处设置为Interval timer mode
②配置开始计数时OSTMTINT中断的产生(开始计数时禁能中断或开始计数时使能中断),此处配置为开始计数时禁能中断
在这里插入图片描述
图2.3
在这里插入图片描述
Code segment 2.3
在这里插入图片描述
图2.4
在这里插入图片描述
图2.5
在Code segment 2.2->Line83中设置opereation mode为 Interva timer mode,因此Code segment 2.3 -> Line116的形参cmp_value值为计数器向下计数的初始值。
那么到了这里之后可能就有朋友纳闷了,在code segment 2.1->Line241的注释中说经过配置后产生1ms的tick,这个1ms tick怎么产生的,和 code segment 2.1->Line248的实参39999有什么关系?又是怎么算出来的?
别急!稳住!且听我徐徐道来。
首先从图2.6可知OSTM0的时钟是由CPUCLK2提供的,那么我只要知道CPUCLK2是多少就行了。
从图2.7可知,PLL→CPUCLKS→CPUCLKD→CPUCLK2(CPUCLKD/2),所以呢其实CPUCLK2是由PLL二分频得到的,那么PLL又是多少呢?请看图2.8,一切尽在不言中。
综上分析可知OSTM0的频率为40MHz,那么从39999减到0需要多长时间呢?答对了,正好是1ms。
在这里插入图片描述
图2.6
在这里插入图片描述
图2.7
在这里插入图片描述
图2.8
至此,定时器OSTM0初始化完成

这里以一个实例来说明定时时间的用法:
在Code segment 2.1->Line 248,函数的实参是39999,算出的定时时间是1ms
在后边的Mode1中,会以倒计时方式串口打印距离进入DeepStop模式的时间
在这里插入图片描述
code segment 2.4
从code segment2.4得知,计数满100,进行一次打印

我们要求无操作30s后Mode1 → DeepStop,因此会出现图2.9的打印信息
在这里插入图片描述
图2.9
结合图2.9和code segment2.4可知变量是1ms自加一次, 自加100次是100ms,刚好和图2.9吻合

将Code segment 2.1->Line 248,函数的实参变成399999,算出的定时时间应该是是10ms,变量自加100次进行一次打印,那么应该是1s打印一次,经实参调整验证,确实是1s打印一次
在这里插入图片描述
到此,大家对OSTM0的定时应该有个初步了解了吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值