AvrIO  1.4.5
Bibliothèque C modulaire pour ATMEL AVR
delay.h
1 
18 #ifndef _AVRIO_DELAY_H_
19 #define _AVRIO_DELAY_H_
20 
21 #include <avrio/defs.h>
22 
23 __BEGIN_C_DECLS
24 /* ======================================================================== */
35 #if defined(__DOXYGEN__)
36 /*
37  * __DOXYGEN__ defined
38  * Partie documentation ne devant pas être compilée.
39  * =============================================================================
40  */
41 /* internal public functions ============================================== */
55 void vDelayWaitMs (time_t usMs);
56 
65 #define delay_ms(__ms) vDelayWaitMs(__ms)
66 
76 #define delay_us(__us)
77 
81 ticks_t xDelayMsToTicks (time_t xTimeMs);
82 
86 time_t xDelayTicksToMs (ticks_t xTicks);
87 
92 #else
93 /*
94  * __DOXYGEN__ not defined
95  * Partie ne devant pas être documentée.
96  * =============================================================================
97  */
98 #include "avrio-config.h"
99 
100 #ifdef AVRIO_TASK_ENABLE
101 #include "avrio-board-kernel.h"
102 
103 INLINE ticks_t
104 xDelayMsToTicks (time_t xTimeMs) {
105 
106  return xTimeMs * AVRIO_KERNEL_TICK_RATE / 1000.0;
107 }
108 
109 INLINE time_t
110 xDelayTicksToMs (ticks_t xTicks) {
111 
112  return xTicks * 1000. / AVRIO_KERNEL_TICK_RATE;
113 }
114 
115 #endif
116 
117 #include <util/delay.h>
118 
119 #ifndef AVRIO_FAST_SIM
120 #define delay_us(__us) _delay_us(__us)
121 #define delay_ms(__ms) vDelayWaitMs(__ms)
122 #else
123 #define delay_us(__us)
124 #define delay_ms(__ms)
125 #endif
126 
127 
128 #if !defined(AVRIO_AVRX_ENABLE) && defined(AVRIO_TASK_ENABLE)
129 
130 /* Fonction défini dans les modules avrx ou task */
131 void vDelayWaitMs (time_t usMs);
132 
133 #else /* !defined(AVRIO_AVRX_ENABLE) && defined(AVRIO_TASK_ENABLE) */
134 
135 /* ======================================================================== */
136 
137 // ---------------------------------------------------------------------------
138 INLINE void
139 vDelayWaitMs (time_t ms) {
140 
141  while (ms--) {
142 
143 #if defined(__HAS_DELAY_CYCLES) && defined(__OPTIMIZE__) && !defined(__DELAY_BACKWARD_COMPATIBLE__)
144  extern void __builtin_avr_delay_cycles (unsigned long);
145 
146  __builtin_avr_delay_cycles (AVRIO_CPU_FREQ / 1000);
147 #else
148  _delay_loop_2 (AVRIO_CPU_FREQ / (4.0 * 1000.0));
149 #endif
150 
151  }
152 }
153 
154 #endif /* !defined(AVRIO_AVRX_ENABLE) && defined(AVRIO_TASK_ENABLE) */
155 /* ========================================================================== */
156 
157 #endif /* __DOXYGEN__ not defined */
158 /* ========================================================================== */
159 __END_C_DECLS
160 #endif /* _AVRIO_DELAY_H_ */
void vDelayWaitMs(time_t usMs)
Temporisation en millisecondes.
ticks_t xDelayMsToTicks(time_t xTimeMs)
Convertit une valeur de temps (millisecondes) en ticks.
time_t xDelayTicksToMs(ticks_t xTicks)
Convertit une valeur de ticks en millisecondes.