📄 timer.c
字号:
/*============================================================================
Project QT60xx0 Demo Code
File timer.c
Function Utilities
Requires *******This file is used by the C8051F310 demo application only ******
Originated D Spokes
(c) Quantum Research Group
============================================================================*/
#include "C8051F310.H"
#include "common.h"
#include "timer.h"
/* DEFINES */
#define TB_DIVISOR(x) (-(((SYSCLK_FREQUENCY / 1000 ) * (x))/1000)) /* x in us */
/* LOCAL DATA */
UINT16 xdata TimerCount;
/* MODULE FUNCTIONS */
/*----------------------------------------------------------------------------
FUNCTION InitTimers
PURPOSE Initialise timer 2 as timebase generator
----------------------------------------------------------------------------*/
void InitTimer ( void )
{
TMR2CN = 0x00; /* Init control - Stop Timer2; */
CKCON |= 0x10; /* set T2ML; selects SYSCLK as clock source */
TMR2RL = TB_DIVISOR(1000); /* Init reload values */
TMR2 = TB_DIVISOR(1000); /* init counter */
TimerCount = 0; /* Initialise timebase counter */
ET2 = 1; /* enable Timer2 interrupts */
TR2 = 1; /* activate Timer2 */
}
/*----------------------------------------------------------------------------
FUNCTION TickHandler
PURPOSE timer tick handler
----------------------------------------------------------------------------*/
void Timer2_ISR (void) interrupt 5
{
TF2H = 0; /* clear Timer2 interrupt flag */
TimerCount++;
}
/*----------------------------------------------------------------------------
FUNCTION StartTimer
PURPOSE Return a millisecond time stamp for timing purposes
----------------------------------------------------------------------------*/
UINT16 StartTimer ( void )
{
UINT16 CopyTimer;
/* timer 2 interrupt is disabled while reading TimerCOunt to avoid half being
updated during read. */
ET2 = 0; /* disable timer2 interrupts */
CopyTimer = TimerCount;
ET2 = 1; /* enable timer2 interrupts */
return CopyTimer;
}
/*----------------------------------------------------------------------------
FUNCTION CheckTimer
PURPOSE Compare a millisecond timestamp to a desired period
----------------------------------------------------------------------------*/
UINT8 CheckTimer ( UINT16 Timer, UINT16 Period )
{
UINT16 CopyTimer;
UINT8 RetCode = 0;
/* timer 2 interrupt is disabled while reading TimerCOunt to avoid half being
updated during read. */
ET2 = 0; /* disable timer2 interrupts */
CopyTimer = TimerCount;
ET2 = 1; /* enable timer2 interrupts */
if ( ( CopyTimer - Timer ) >= Period ) RetCode = 1;
return RetCode;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -