home *** CD-ROM | disk | FTP | other *** search
/ Amiga Developer CD 2.1 / Amiga Developer CD v2.1.iso / CD32 / CD32_Support / examples / SA_Examples / lowlevel / TimerInt / timer.c < prev    next >
Encoding:
C/C++ Source or Header  |  1996-03-17  |  3.5 KB  |  206 lines

  1. /*
  2.  * System includes
  3.  */
  4.  
  5. #include <exec/types.h>
  6. #include <exec/memory.h>
  7.  
  8. #include <dos/dos.h>
  9.  
  10. #include <intuition/intuition.h>
  11. #include <intuition/gadgetclass.h>
  12.  
  13. #include <libraries/gadtools.h>
  14.  
  15. #include <devices/timer.h>
  16.  
  17. #include <libraries/lowlevel.h>
  18.  
  19. #include <clib/exec_protos.h>
  20. #include <clib/dos_protos.h>
  21. #include <clib/intuition_protos.h>
  22. #include <clib/gadtools_protos.h>
  23. #include <clib/timer_protos.h>
  24. #include <clib/lowlevel_protos.h>
  25. #include <clib/alib_protos.h>
  26. /*#include <clib/debug_protos.h>*/
  27. extern void kprintf(const char *,...);
  28.  
  29. #include <pragmas/lowlevel_pragmas.h>
  30.  
  31. /*
  32.  * ANSI includes
  33.  */
  34.  
  35. #include <stdio.h>
  36. #include <stdlib.h>
  37. #include <string.h>
  38. #include <math.h>
  39.  
  40. /*
  41.  * Local includes
  42.  */
  43.  
  44. #include "timerint.h"
  45.  
  46.  
  47. /****** timerInt/timerStart ******************************************
  48. *
  49. *   NAME
  50. *       timerStart -- start timer interrupt
  51. *
  52. *   SYNOPSIS
  53. *       timerStart();
  54. *
  55. *       void timerStart(void);
  56. *
  57. *   FUNCTION
  58. *       Start timer interrupt.
  59. *
  60. *   INPUTS
  61. *       None
  62. *
  63. *   RESULT
  64. *       None
  65. *
  66. *   EXAMPLE
  67. *
  68. *   NOTES
  69. *
  70. *   BUGS
  71. *
  72. *   SEE ALSO
  73. *       timerStop()
  74. *
  75. ******************************************************************************
  76. *
  77. */
  78. void timerStart(void)
  79. {
  80.  
  81.     /* Clear deviation */
  82.     deviation=0L;
  83.     GT_SetGadgetAttrs(deviationGadget,window,NULL,
  84.         GTNM_Number, deviation,
  85.         TAG_DONE);
  86.  
  87.     /* Get starting system time */
  88.     GetSysTime(&startTime);
  89.  
  90.     /* Start timer interrupt */
  91.     StartTimerInt(timerIntHandle,timerInterval,timerContinuous);
  92.  
  93. }
  94.  
  95.  
  96. /****** timerInt/timerStop ******************************************
  97. *
  98. *   NAME
  99. *       timerStop -- stop timer interrupt
  100. *
  101. *   SYNOPSIS
  102. *       timerStop();
  103. *
  104. *       void timerStop(void);
  105. *
  106. *   FUNCTION
  107. *       Stop timer interrupt.
  108. *
  109. *   INPUTS
  110. *       None
  111. *
  112. *   RESULT
  113. *       None
  114. *
  115. *   EXAMPLE
  116. *
  117. *   NOTES
  118. *
  119. *   BUGS
  120. *
  121. *   SEE ALSO
  122. *       timerStart()
  123. *
  124. ******************************************************************************
  125. *
  126. */
  127. void timerStop(void)
  128. {
  129.  
  130.     /* Stop timer interrupt */
  131.     StopTimerInt(timerIntHandle);
  132.  
  133. }
  134.  
  135. /****** timerInt/timerInterrupt ******************************************
  136. *
  137. *   NAME
  138. *       timerInterrupt -- timer interrupt handler
  139. *
  140. *   SYNOPSIS
  141. *       timerInterrupt(intData);
  142. *
  143. *       void __asm __interrupt __saveds timerInterrupt(register __a1 APTR intData);
  144. *
  145. *   FUNCTION
  146. *       Timer interrupt handler.
  147. *
  148. *   INPUTS
  149. *       intData -- interrupt data
  150. *
  151. *   RESULT
  152. *       None
  153. *
  154. *   EXAMPLE
  155. *
  156. *   NOTES
  157. *
  158. *   BUGS
  159. *
  160. *   SEE ALSO
  161. *
  162. ******************************************************************************
  163. *
  164. */
  165.  
  166. void __asm __interrupt __saveds timerInterrupt(register __a1 APTR intData)
  167. {
  168.  
  169.     static struct timeval elapsedTime, oldStartTime;
  170.     LONG thisDeviation;
  171.  
  172.     /* Test interrupt data */
  173.     if (intData!=(APTR) TIMERINT_COOKIE) {
  174.         timerIntBadData++;
  175.     }
  176.  
  177.     /* Get ending system time */
  178.     GetSysTime(&stopTime);
  179.  
  180.     /* Store start time */
  181.     oldStartTime=startTime;
  182.  
  183.     /* If in continuous mode ... */
  184.     if (timerContinuous) {
  185.         /* Get starting system time for next interval */
  186.         GetSysTime(&startTime);
  187.     }
  188.  
  189.     /* Compute elapsed time */
  190.     elapsedTime=stopTime;
  191.     SubTime(&elapsedTime,&oldStartTime);
  192.  
  193.     /* Compute deviation */
  194.     thisDeviation=timerInterval-elapsedTime.tv_micro;
  195.  
  196.     /* If deviation greater than previous maximum ... */
  197.     if (abs(thisDeviation)>abs(deviation)) {
  198.         /* Update deviation */
  199.         deviation=thisDeviation;
  200.     }
  201.  
  202.     /* Signal main task */
  203.     Signal(mainTask,1<<timerSignal);
  204.  
  205. }
  206.