Initial commit of files
This commit is contained in:
113
src/libPIC/dly_usec.c
Normal file
113
src/libPIC/dly_usec.c
Normal file
@ -0,0 +1,113 @@
|
||||
/*****************************************************************************
|
||||
* Copyright (C) 2008
|
||||
* ProbeStar Telematics, LLC
|
||||
* All Rights Reserved. Proprietary and Confidential.
|
||||
*============================================================================
|
||||
* Microsecond Delay Routine using Timer 0
|
||||
*----------------------------------------------------------------------------
|
||||
* 200nsec instruction cycle at 20Mhz, 100nsec at 40Mhz
|
||||
* You have to examine the asm output to count the instructions
|
||||
* Make sure this code is compiled with optimization -O -Zg4
|
||||
*****************************************************************************/
|
||||
|
||||
/*****************************************************************************
|
||||
* includes
|
||||
*****************************************************************************/
|
||||
|
||||
#include "system.h"
|
||||
#include "delay.h"
|
||||
|
||||
/*****************************************************************************
|
||||
* defines
|
||||
*****************************************************************************/
|
||||
|
||||
/*****************************************************************************
|
||||
* macros
|
||||
*****************************************************************************/
|
||||
|
||||
/*****************************************************************************
|
||||
* structs & typedefs
|
||||
*****************************************************************************/
|
||||
|
||||
/*****************************************************************************
|
||||
* global constants
|
||||
*****************************************************************************/
|
||||
|
||||
/*****************************************************************************
|
||||
* global variables
|
||||
*****************************************************************************/
|
||||
|
||||
// used by DelayUs() macro
|
||||
LIBBANK volatile BYTE _dcnt = 0;
|
||||
|
||||
/*****************************************************************************
|
||||
* static constants
|
||||
*****************************************************************************/
|
||||
|
||||
/*****************************************************************************
|
||||
* static variables
|
||||
*****************************************************************************/
|
||||
|
||||
/*****************************************************************************
|
||||
* static prototypes
|
||||
*****************************************************************************/
|
||||
|
||||
/*****************************************************************************
|
||||
* C functions
|
||||
*****************************************************************************/
|
||||
|
||||
void DelayInit( void )
|
||||
{
|
||||
// timer #0 as counter, 2 nsec counts (5 per usec)
|
||||
#ifdef _PIC18
|
||||
#if XTAL==40
|
||||
T0CON = 0b10000000; // prescalar = 2
|
||||
#else
|
||||
T0CON = 0b10001000; // no prescalar
|
||||
#endif
|
||||
#else
|
||||
OPTION = 0b10000000;
|
||||
#endif
|
||||
}
|
||||
|
||||
// short delays up to 255 usec
|
||||
void DelayUsec( BYTE n )
|
||||
{
|
||||
// clear counter
|
||||
#ifdef _PIC18
|
||||
TMR0H = 0;
|
||||
TMR0L = 0;
|
||||
#else
|
||||
TMR0 = 0;
|
||||
#endif
|
||||
// # ticks per usec
|
||||
n--; // calling overhead
|
||||
n *= 5;
|
||||
|
||||
// wait till count reaches
|
||||
#ifdef _PIC18
|
||||
while ( TMR0L < n )
|
||||
;
|
||||
#else
|
||||
while ( TMR0 < n )
|
||||
;
|
||||
#endif
|
||||
}
|
||||
|
||||
// longer delays up to 10000 usec (10 msec)
|
||||
#ifdef _PIC18
|
||||
void DelayUsecW( WORD n )
|
||||
{
|
||||
// clear counter
|
||||
TMR0H = 0;
|
||||
TMR0L = 0;
|
||||
|
||||
// 5 ticks per usec
|
||||
n--; // calling overhead
|
||||
n *= 5;
|
||||
|
||||
// wait till count reaches
|
||||
while ( TMR0 < n )
|
||||
;
|
||||
}
|
||||
#endif
|
||||
Reference in New Issue
Block a user