2002-11-19 11:04:11 +00:00
|
|
|
/****************************************************************************
|
|
|
|
*
|
|
|
|
* Ultra Long Period Timer
|
|
|
|
*
|
|
|
|
* ========================================================================
|
|
|
|
*
|
|
|
|
* The contents of this file are subject to the SciTech MGL Public
|
|
|
|
* License Version 1.0 (the "License"); you may not use this file
|
|
|
|
* except in compliance with the License. You may obtain a copy of
|
|
|
|
* the License at http://www.scitechsoft.com/mgl-license.txt
|
|
|
|
*
|
|
|
|
* Software distributed under the License is distributed on an
|
|
|
|
* "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
|
|
|
* implied. See the License for the specific language governing
|
|
|
|
* rights and limitations under the License.
|
|
|
|
*
|
|
|
|
* The Original Code is Copyright (C) 1991-1998 SciTech Software, Inc.
|
|
|
|
*
|
|
|
|
* The Initial Developer of the Original Code is SciTech Software, Inc.
|
|
|
|
* All Rights Reserved.
|
|
|
|
*
|
|
|
|
* ========================================================================
|
|
|
|
*
|
|
|
|
* Language: ANSI C
|
|
|
|
* Environment: *** TODO: ADD YOUR OS ENVIRONMENT NAME HERE ***
|
|
|
|
*
|
|
|
|
* Description: Module to implement OS specific services to measure the
|
|
|
|
* CPU frequency.
|
|
|
|
*
|
|
|
|
****************************************************************************/
|
|
|
|
|
|
|
|
/*----------------------------- Implementation ----------------------------*/
|
|
|
|
|
|
|
|
/****************************************************************************
|
|
|
|
REMARKS:
|
|
|
|
Increase the thread priority to maximum, if possible.
|
|
|
|
****************************************************************************/
|
|
|
|
static int SetMaxThreadPriority(void)
|
|
|
|
{
|
2003-06-27 21:31:46 +00:00
|
|
|
/* TODO: If you have thread priorities, increase it to maximum for the */
|
|
|
|
/* thread for timing the CPU frequency. */
|
2002-11-19 11:04:11 +00:00
|
|
|
return oldPriority;
|
|
|
|
}
|
|
|
|
|
|
|
|
/****************************************************************************
|
|
|
|
REMARKS:
|
|
|
|
Restore the original thread priority.
|
|
|
|
****************************************************************************/
|
|
|
|
static void RestoreThreadPriority(
|
|
|
|
int priority)
|
|
|
|
{
|
2003-06-27 21:31:46 +00:00
|
|
|
/* TODO: Restore the original thread priority on exit. */
|
2002-11-19 11:04:11 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/****************************************************************************
|
|
|
|
REMARKS:
|
|
|
|
Initialise the counter and return the frequency of the counter.
|
|
|
|
****************************************************************************/
|
|
|
|
static void GetCounterFrequency(
|
|
|
|
CPU_largeInteger *freq)
|
|
|
|
{
|
2003-06-27 21:31:46 +00:00
|
|
|
/* TODO: Return the frequency of the counter in here. You should try to */
|
|
|
|
/* normalise this value to be around 100,000 ticks per second. */
|
2002-11-19 11:04:11 +00:00
|
|
|
freq->low = 0;
|
|
|
|
freq->high = 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
/****************************************************************************
|
|
|
|
REMARKS:
|
|
|
|
Read the counter and return the counter value.
|
|
|
|
|
|
|
|
TODO: Implement this to read the counter. It should be done as a macro
|
|
|
|
for accuracy.
|
|
|
|
****************************************************************************/
|
|
|
|
#define GetCounter(t) \
|
|
|
|
{ \
|
|
|
|
(t)->low = 0; \
|
|
|
|
(t)->high = 0; \
|
|
|
|
}
|