微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 一种高效定时器模块的设计与实现

一种高效定时器模块的设计与实现

时间:03-25 来源:电子产品世界 点击:

mer_index=0;timer_index

{

if(RUNNING==TIMER[timer_index].timer_state)

{

TIMER[timer_index].duration++;

if(TIMER[timer_index].duration>=TIMER[timer_index].timeout)

{

TIMER[timer_index].overflow_ag=1;

if(TIMER[timer_index].cycle)

{

TimerReStart(timer_index);

}

else

{

TIMER[timer_index].cnt_times--;

if(0==TIMER[timer_index].cnt_times)

{

TimerStall(timer_index);

}

else

{

TimerReStart(timer_index);

}}}}}

TimerTicked=0;

}

软件定时器只有在有嘀嗒发生且自身状态为RUNNING的情况下才会运行,其计时时间-duration随嘀嗒而累加,如果duration达到超时值,则置overow_ag,然后判断该定时器是否周期定时器,是则重启定时-清零duration,否则判断是否多次定时,定时次数计数未满则重启定时,计数满后停止该定时器。

  定时器应用

定时器模块在软件系统中是一个基本功能单元,它为其他模块或上层应用提供超时、计时服务[5]。以门锁的驱动为例讲述下定时器的应用。

在门锁闭锁时,BCM对门锁电机的闭锁驱动控制需要保持200ms的时间,在逻辑上便是输出一个200ms的控制脉冲,该部分代码如下:

...

DrivePort(ALLDR_LK_OUT,DRIVEON);

TimerStart(ALLDR_LOCK_200MS,200,0,1);

if(1==TM[ALLDR_LOCK_200MS].overow_ag)

{

DrivePort(ALLDR_LK_OUT,DRIVEOFF);

TM[ALLDR_LOCK_200MS].overow_ag=0;

}

...

可见,在设计良好的定时器驱动以后,实现某种定时应用非常简单,其他应用示例在此不再赘述。

  结语

本文设计的定时器模块,逻辑清晰,使用方便,做为一个稳定的底层驱动,在实际应用中得到了很好的应用。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top