基于TI-RTOS的CC2650DK开发(16)---Timer(定时器)

之前一直把Timer翻译为计时器,感觉定时器更贴切些。之后全部翻译为定时器。
5.3 定时器模块
ti.sysbios.hal.Timer模块是一个面向定时器外设的标准接口。此模块将于8.3节进行详细描述,因为它是硬件抽象层(HAL)的一部分。

你可以使用此模块创建定时器(就是标记使用的定时器)并配置为定时器到期时调用一个tickFxn。仅在定时器外设无需任何自定义配置时使用此模块。

计时器可被配置为单周期或多周期模式。period可被指定为定时器次数或微秒。

5.4 Seconds模块
 ti.sysbios.hal.Seconds模块提供了一种设置或获取自格林尼治时间1970年1月1日00:00:00以来走过的秒数。Seconds模块如果可用的话,将通过一个指定设备Seconds委托来维护时间。如果指定设备Seconds模块不可用,ti.sysbios.hal.SecondsClock模块将作为Seconds委托使用。SecondsClock内部使用时钟模块周期性地增加秒数。

Seconds模块的APIs是:
Void Seconds_set(UInt32 seconds);
UInt32 Seconds_get(Void);
应用程序应该调用Seconds_set()来初始化Seconds数量。如果需要,Seconds_set()可被再次调用以更新或重设Seconds数量。应用在调用Seconds_get()之前必须至少调用一次Seconds_set()。否则返回结果毫无意义。Seconds_set()函数是非可重入的。

Seconds模块包括一个time()函数,它调用Seconds_get()。它重写了C标准库time()函数。你可使用此time()函数联合C标准头文件(time.h)中的其它函数来以一种可读格式显示当前时间和日期。

例子
此例初始化Seconds模块,设置日期,获取当前日期并以人类可读模式显示当前日期和时间:
#include <time.h>
#include <ti/sysbios/hal/Seconds.h>
UInt32 t;
time_t t1;
struct tm *ltm;
char *curTime;
/* set to today’s date in seconds since Jan 1, 1970 */
Seconds_set( 1412800000);  /* Wed, 08 Oct 2014 20:26:40 GMT */
/* retrieve current time relative to Jan 1, 1970 */
t = Seconds_get();
/*
* Use overridden time() function to get the current time.
* Use standard C RTS library functions with return from time().
* Assumes Seconds_set() has been called as above
*/

t1 = time( NULL);
ltm = localtime(&t1);
curTime = asctime(ltm);
System_printf( "Time(GMT): %s\n", curTime);

注意:对于某些编译器的运行时库,包括TI的,time()函数返回自1990年1月1日走过的秒数。这种情况下,为与运行时支持库的其它APIs保持一致,Seconds模块的time()函数会给Seconds_get()的返回值添加一个位移值。

5.5 Timestamp(时间戳)模块
 xdc.runtime.Timestamp模块,正如其名字所言,提供时间戳服务。Timestamp模块可用于基准测试代码和添加时间戳日志。调用Timestamp模块函数有利于指定平台的TimestampProvider实施。

Timestamp模块的包路径是xdc.runtime.Timestamp,所以SYS/BIOS应用将包含以下#include声明:
#include <xdc/runtime/Timestamp.h>
配置文件(*.cfg)将使用以下声明:
var BIOS = xdc.useModule( 'xdc.runtime.Timestamp');
以下Timestamp模块APIs是SYS/BIOS应用中经常使用的:
  • Timestamp_get32() — 返回一个32bit时间戳。
  • Timestamp_get64() — 如果目标支持64bit解决方案,返回一个64bit时间戳。
  • Timestamp_getFreq() — 获取timestamp定时器的频率(Hz)。你可以使用此函数将timestamp值转换为实时单位。
如果你需要一个平台依赖版本的Timestamp,可以使用TimestampStd模块,它使用的是ANSI C clock()函数。

指定平台的TimestampProvider模块位于ti.sysbios.family包,例如,ti.sysbios.family.msp430.TimestampProvider和ti.sysbios.family.arm.m3.TimestampProvider。大多TimestampProvider模块都有配置参数可用于控制硬件时钟源和如果时间戳计数器溢出后的行为。

下例计算CPU周期所关联的时间戳增量因子:
Types_FreqHz freq1;  /* Timestamp frequency */
Types_FreqHz freq2;  /* BIOS frequency */
Float factor;  /* Clock ratio cpu/timestamp */
Timestamp_getFreq(&freq1);
BIOS_getCpuFreq(&freq2);
factor = (Float)freq2.lo / freq1.lo;
System_printf( "%lu\t%lu\t%lu\t Timestamp Freq, BIOS Freq, Factor\n",
freq1.lo, freq2.lo, (UInt32) factor);
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值