📄 spptimer.c
字号:
/*****************************************************************************
* *
* ********** *
* ************ *
* *** *** *
* *** +++ *** *
* *** + + *** *
* *** + CHIPCON CC1010 *
* *** + + *** CUL - spp *
* *** +++ *** *
* *** *** *
* *********** *
* ********* *
* *
*****************************************************************************
* *
*****************************************************************************
* Author: JOL *
*****************************************************************************
* Revision history: *
* *
* $Log: sppTimer.c,v $
* Revision 1.2 2002/11/18 13:39:23 tos
* Initialisation of pointers to timer callback functions before timer
* interrupt is started/enabled.
*
* Revision 1.1 2002/10/14 12:27:35 tos
* Initial version in CVS.
*
* *
****************************************************************************/
#include <chipcon/sppInternal.h>
// Internal variables
pCBF xdata sppCBFSM;
word* xdata sppCNTFSM;
pCBF xdata sppCB0;
word* xdata sppCNT0;
pCBF xdata sppCB1;
word* xdata sppCNT1;
byte xdata sppCBCount;
word xdata sppTime;
//----------------------------------------------------------------------------
// void sppStartTimer (void)
//
// Description:
// Run timer3 with a period of 10 msecs.
//
// Arguments:
// word clkFreq
// The XOSC clock frequency in kHz.
//----------------------------------------------------------------------------
void sppStartTimer (word clkFreq) {
sppTime = 0;
sppCBFSM = NULL;
sppCB0 = NULL;
sppCB1 = NULL;
INT_SETFLAG (INUM_TIMER3, INT_CLR);
halConfigTimer23(TIMER3 | TIMER23_INT_TIMER, 10000, clkFreq);
TIMER3_RUN(TRUE);
} // sppStartTimer
//----------------------------------------------------------------------------
// void sppSetTimerCB (void)
//
// Description:
// Add timer callback
//
// Arguments:
// byte cb
// Callback index - use SPP_CUSTOM_0_TIMER or SPP_CUSTOM_1_TIMER
// The SPP finite state machine uses SPP_FSM_TIMER
// void *pF
// Pointer to the function to call
// word *pTicks
// The timeout in 10s of msecs
//
// NOTE: *pTicks will be decremented by the Timer 3 interrupt
//----------------------------------------------------------------------------
void sppSetTimerCB (byte cb, void (*pF) (), word *pTicks) {
INT_ENABLE (INUM_TIMER3, INT_OFF);
if (cb == SPP_FSM_TIMER) {
sppCBFSM = pF;
sppCNTFSM = pTicks;
} else if (cb == SPP_CUSTOM_0_TIMER) {
sppCB0 = pF;
sppCNT0 = pTicks;
} else if (cb == SPP_CUSTOM_1_TIMER) {
sppCB1 = pF;
sppCNT1 = pTicks;
}
INT_ENABLE (INUM_TIMER3, INT_ON);
} // sppSetTimerCB
//----------------------------------------------------------------------------
// word sppGetTime (void)
//
// Description:
// Returns the value of the 10-msec counter, which is started by
// sppSetupRF(...)
//
// Return value:
// The current time in 10s of msecs
//----------------------------------------------------------------------------
word sppGetTime (void) {
word temp;
INT_ENABLE (INUM_TIMER3, INT_OFF);
temp = sppTime;
INT_ENABLE (INUM_TIMER3, INT_ON);
return temp;
} // sppGetTime
//----------------------------------------------------------------------------
// Timer 3 interrupt service routine:
//----------------------------------------------------------------------------
void TIMER3_ISR () interrupt INUM_TIMER3 {
INT_SETFLAG (INUM_TIMER3, INT_CLR);
if (*sppCNTFSM && !--(*sppCNTFSM)) {
if (sppCBFSM != NULL) sppCBFSM();
}
if (*sppCNT0 && !--(*sppCNT0)) {
if (sppCB0 != NULL) sppCB0();
}
if (*sppCNT1 && !--(*sppCNT1)) {
if (sppCB1 != NULL) sppCB1();
}
sppTime++;
} // TIMER3_ISR
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -