IAR For Arm 的精确定时及延时等

网上查了一些,一种是使用循环,但是时间是估算的。还有的是使用intrinsics.h文件中的__delay_cycles(x)函数。

但是在我的IAR 7.8版本中,没有看到此函数。 我使用的是德州仪器TMS570LS系列的芯片,它是有定时功能的,我们可以使用RTI模块的代码,获取定时器开启后的时钟数, 依照我们的配置文件Hal Code Generator中的RTI配置,1000个周期是0.1ms, 这个应该是根据cpu频率不同,可以用hal来查看。


然后我们就可以添加一个函数来获取定时器开启后的tick数。 参数compare表示是那个定时器,根据cpu型号来定取值范围。

uint32_t rtiGetTick(uint32_t compare)
{
    uint32_t tick;
    uint32_t counter = ((rtiREG1->COMPCTRL & (1U << (compare << 2U))) != 0U) ? 1U : 0U;
    tick = rtiREG1->CNT[counter].FRCx;

    return tick;

}

这个函数返回的就是定时器启动后的tick数,按照我的项目的配置,是1000tick数代表0.1ms,这样我们就可以再编写下面的函数。 这样就可以得到一个精度是0.1ms的延时程序了。 需要注意的是,这个函数只有在定时器启动后才可以使用。 

void rtiDelay(uint32_t msec)
{
uint32_t curTick = rtiGetTick(0);

uint32_t endTick = curTick + msec * 1000 * 10;    

while(  curTick < endTick)

{
curTick = rtiGetTick(0);      
}
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值