📄 fc161.c
字号:
/** ###################################################################
** THIS BEAN MODULE IS GENERATED BY THE TOOL. DO NOT MODIFY IT.
** Filename : FC161.C
** Project : Capture
** Processor : MC9S12DG128BCPV
** Beantype : FreeCntr16
** Version : Bean 02.051, Driver 01.09, CPU db: 2.87.280
** Compiler : Metrowerks HC12 C Compiler
** Date/Time : 2008-3-5, 上午 09:25
** Abstract :
** This device "FreeCntr16" implements 16-bit Free Running Counter
** Settings :
** Timer name : ECT (16-bit)
** Compare name : TC0
** Counter shared : Yes
**
** High speed mode
** Prescaler : divide-by-32
** Clock : 250000 Hz
** Resolution of timer
** Xtal ticks : 1600
** microseconds : 100
** seconds (real) : 0.0001000
** Hz : 10000
** kHz : 10
**
** Initialization:
** Timer : Enabled
**
** Timer registers
** Counter : TCNT [68]
** Mode : TIOS [64]
** Run : TSCR1 [70]
** Prescaler : TSCR2 [77]
**
** Compare registers
** Compare : TC0 [80]
** Contents :
** Reset - byte FC161_Reset(void);
** GetTimeUS - byte FC161_GetTimeUS(word *Time);
** GetTimeMS - byte FC161_GetTimeMS(word *Time);
**
** (c) Copyright UNIS, spol. s r.o. 1997-2005
** UNIS, spol. s r.o.
** Jundrovska 33
** 624 00 Brno
** Czech Republic
** http : www.processorexpert.com
** mail : info@processorexpert.com
** ###################################################################*/
/* MODULE FC161. */
#include "FC161.h"
#pragma DATA_SEG FC161_DATA
#pragma CODE_SEG FC161_CODE
static word TTicks; /* Counter of timer ticks */
static word LTicks; /* Working copy of variable TTicks */
static bool TOvf; /* Counter overflow flag */
static bool LOvf; /* Working copy of variable TOvf */
/*
** ===================================================================
** Method : LoadTicks (bean FreeCntr16)
**
** Description :
** The method loads actual number of timer ticks and actual state
** of overflow flag.
** This method is internal. It is used by Processor Expert only.
** ===================================================================
*/
static void LoadTicks(void)
{
EnterCritical(); /* Save the PS register */
LTicks = TTicks; /* Loading actual number of timer ticks */
LOvf = TOvf; /* Loading actual state of "overflow flag" */
ExitCritical(); /* Restore the PS register */
}
/*
** ===================================================================
** Method : FC161_Reset (bean FreeCntr16)
**
** Description :
** Clears the counter.
** Parameters : None
** Returns :
** --- - Error Code
** ===================================================================
*/
byte FC161_Reset(void)
{
EnterCritical(); /* Save the PS register */
TC0 = TCNT + (word)25; /* Store new value to compare register */
TTicks = 0; /* Reset counter of timer ticks */
TOvf = FALSE; /* Reset counter overflow flag */
ExitCritical(); /* Restore the PS register */
return ERR_OK; /* OK */
}
/*
** ===================================================================
** Method : FC161_GetTimeUS (bean FreeCntr16)
**
** Description :
** Returns the time (as a 16-bit unsigned integer) in microseconds
** since the last resetting after the last reset.
** Parameters :
** NAME - DESCRIPTION
** * Time - A pointer to the returned 16-bit value
** in microseconds
** Returns :
** --- - Error code, possible codes:
** ERR_OK - OK
** ERR_SPEED - This device does not work in
** the active speed mode
** ERR_OVERFLOW - Software counter overflow
** ERR_MATH - Overflow during evaluation
** ===================================================================
*/
byte FC161_GetTimeUS(word *Time)
{
dlong rtval; /* Result of two 32-bit numbers multiplication */
LoadTicks(); /* Load actual state of counter */
if (LOvf) { /* Testing counter overflow */
return ERR_OVERFLOW; /* If yes then error */
}
PE_Timer_LngMul((dword)LTicks,(dword)1677721600,&rtval); /* Multiply ticks and high speed CPU mode coefficient */
if (PE_Timer_LngHi3(rtval[0],rtval[1],Time)) { /* Is the result greater or equal than 65536 ? */
return ERR_MATH; /* If yes then error */
} else { /* Is the result less than 65536 ? */
return ERR_OK; /* If yes then OK */
}
}
/*
** ===================================================================
** Method : FC161_GetTimeMS (bean FreeCntr16)
**
** Description :
** Returns the time (as a 16-bit unsigned integer) in milliseconds
** since the last resetting after the last reset.
** Parameters :
** NAME - DESCRIPTION
** * Time - A pointer to the returned 16-bit value
** in milliseconds
** Returns :
** --- - Error code, possible codes:
** ERR_OK - OK
** ERR_SPEED - This device does not work in
** the active speed mode
** ERR_OVERFLOW - Software counter overflow
** ERR_MATH - Overflow during evaluation
** ===================================================================
*/
byte FC161_GetTimeMS(word *Time)
{
dlong rtval; /* Result of two 32-bit numbers multiplication */
LoadTicks(); /* Load actual state of counter */
if (LOvf) { /* Testing counter overflow */
return ERR_OVERFLOW; /* If yes then error */
}
PE_Timer_LngMul((dword)LTicks,(dword)429496730,&rtval); /* Multiply ticks and high speed CPU mode coefficient */
if (PE_Timer_LngHi4(rtval[0],rtval[1],Time)) { /* Is the result greater or equal than 65536 ? */
return ERR_MATH; /* If yes then error */
} else { /* Is the result less than 65536 ? */
return ERR_OK; /* If yes then OK */
}
}
/*
** ===================================================================
** Method : FC161_Init (bean FreeCntr16)
**
** Description :
** Initializes the associated peripheral(s) and the beans
** internal variables. The method is called automatically as a
** part of the application initialization code.
** This method is internal. It is used by Processor Expert only.
** ===================================================================
*/
void FC161_Init(void)
{
TTicks = 0; /* Counter of timer ticks */
TOvf = FALSE; /* Counter overflow flag */
/* TC0: BIT15=0,BIT14=0,BIT13=0,BIT12=0,BIT11=0,BIT10=0,BIT9=0,BIT8=0,BIT7=0,BIT6=0,BIT5=0,BIT4=1,BIT3=1,BIT2=0,BIT1=0,BIT0=1 */
setReg16(TC0, 25); /* Store value to the compare register */
}
/*
** ===================================================================
** Method : FC161_Interrupt (bean FreeCntr16)
**
** Description :
** The method services the interrupt of the selected peripheral(s)
** and eventually invokes the beans event(s).
** This method is internal. It is used by Processor Expert only.
** ===================================================================
*/
#pragma CODE_SEG __NEAR_SEG NON_BANKED
ISR(FC161_Interrupt)
{
TC0 += (word)25; /* Add value corresponding with periode */
TTicks++; /* Increment counter of timer ticks */
if (TTicks == 0) { /* Testing counter overflow */
TOvf = TRUE; /* If yes then set overflow flag */
}
TFLG1 = 1; /* Reset interrupt request flag */
}
#pragma CODE_SEG FC161_CODE
/* END FC161. */
/*
** ###################################################################
**
** This file was created by UNIS Processor Expert 2.96 [03.76]
** for the Freescale HCS12 series of microcontrollers.
**
** ###################################################################
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -