MCPcopy Create free account
hub / github.com/RT-Thread/rt-thread / rt_cputimer_control

Function rt_cputimer_control

components/drivers/cputime/cputimer.c:202–269  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

200}
201
202rt_err_t rt_cputimer_control(rt_cputimer_t timer, int cmd, void *arg)
203{
204 rt_base_t level;
205
206 /* parameter check */
207 RT_ASSERT(timer != RT_NULL);
208 RT_ASSERT(clock_cpu_issettimeout() != RT_FALSE);
209
210 level = rt_hw_interrupt_disable();
211 switch (cmd)
212 {
213 case RT_TIMER_CTRL_GET_TIME:
214 *(rt_uint64_t *)arg = timer->init_tick;
215 break;
216
217 case RT_TIMER_CTRL_SET_TIME:
218 RT_ASSERT((*(rt_uint64_t *)arg) < 0x7fffffffffffffff);
219 timer->init_tick = *(rt_uint64_t *)arg;
220 timer->timeout_tick = *(rt_uint64_t *)arg + clock_cpu_gettime();
221 break;
222
223 case RT_TIMER_CTRL_SET_ONESHOT:
224 timer->parent.flag &= ~RT_TIMER_FLAG_PERIODIC;
225 break;
226
227 case RT_TIMER_CTRL_SET_PERIODIC:
228 timer->parent.flag |= RT_TIMER_FLAG_PERIODIC;
229 break;
230
231 case RT_TIMER_CTRL_GET_STATE:
232 if (timer->parent.flag & RT_TIMER_FLAG_ACTIVATED)
233 {
234 /*timer is start and run*/
235 *(rt_uint32_t *)arg = RT_TIMER_FLAG_ACTIVATED;
236 }
237 else
238 {
239 /*timer is stop*/
240 *(rt_uint32_t *)arg = RT_TIMER_FLAG_DEACTIVATED;
241 }
242 break;
243
244 case RT_TIMER_CTRL_GET_REMAIN_TIME:
245 *(rt_uint64_t *)arg = timer->timeout_tick;
246 break;
247 case RT_TIMER_CTRL_GET_FUNC:
248 arg = (void *)timer->timeout_func;
249 break;
250
251 case RT_TIMER_CTRL_SET_FUNC:
252 timer->timeout_func = (void (*)(void *))arg;
253 break;
254
255 case RT_TIMER_CTRL_GET_PARM:
256 *(void **)arg = timer->parameter;
257 break;
258
259 case RT_TIMER_CTRL_SET_PARM:

Callers

nothing calls this directly

Calls 4

clock_cpu_issettimeoutFunction · 0.85
clock_cpu_gettimeFunction · 0.85
rt_hw_interrupt_disableFunction · 0.50
rt_hw_interrupt_enableFunction · 0.50

Tested by

no test coverage detected