Paparazzi UAS v7.0_unstable
Paparazzi is a free software Unmanned Aircraft System.
Loading...
Searching...
No Matches
sys_time_arch.c
Go to the documentation of this file.
1/*
2 * Copyright (C) 2009-2011 The Paparazzi Team
3 *
4 * This file is part of paparazzi.
5 *
6 * paparazzi is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2, or (at your option)
9 * any later version.
10 *
11 * paparazzi is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with paparazzi; see the file COPYING. If not, write to
18 * the Free Software Foundation, 59 Temple Place - Suite 330,
19 * Boston, MA 02111-1307, USA.
20 */
21
30#include "mcu_periph/sys_time.h"
31#include "mcu_periph/sys_time_arch.h"
32
33#include "libopencm3/cm3/systick.h"
34
35#ifdef SYS_TIME_LED
36#include "led.h"
37#endif
38
39#ifndef USE_OCM3_SYSTICK_INIT
40#define USE_OCM3_SYSTICK_INIT 1
41#endif
42
43void sys_tick_handler(void);
44
49{
50 /* run cortex systick timer with 72MHz (FIXME only 72 or does it work with 168MHz???) */
51#if USE_OCM3_SYSTICK_INIT
53#endif
55
56 /* cpu ticks per desired sys_time timer step */
58
59#if USE_OCM3_SYSTICK_INIT
60 /* The timer interrupt is activated on the transition from 1 to 0,
61 * therefore it activates every n+1 clock ticks.
62 */
64
67#endif
68}
69
70
71// FIXME : nb_tick rollover ???
72//
73// 97 days at 512hz
74// 12 hours at 100khz
75//
77{
79
84
85#ifdef SYS_TIME_LED
87#endif
88 }
89 for (unsigned int i = 0; i < SYS_TIME_NB_TIMER; i++) {
90 if (sys_time.timer[i].in_use &&
93 sys_time.timer[i].elapsed = true;
94 if (sys_time.timer[i].cb) {
95 sys_time.timer[i].cb(i);
96 }
97 }
98 }
99}
100
107{
108 // start time
109 uint32_t start = systick_get_value();
110 // max time of one full counter cycle (n + 1 ticks)
112 // number of cycles
113 uint32_t n = us / DT;
114 // remaining number of cpu ticks
116 // end time depend on the current value of the counter
117 uint32_t end;
118 if (rem < start) {
119 end = start - rem;
120 } else {
121 // one more count flag is required
122 n++;
123 end = systick_get_reload() - rem + start;
124 }
125 // count number of cycles (when counter reachs 0)
126 while (n) {
127 while (!systick_get_countflag());
128 n--;
129 }
130 // wait remaining ticks
131 while (systick_get_value() > end);
132}
133
#define AHB_CLK
Definition apogee_1.0.h:8
#define LED_TOGGLE(i)
Definition led_hw.h:53
void sys_time_msleep(uint32_t ms)
Sleep.
static void sys_tick_handler(void)
void sys_time_usleep(uint32_t us)
sys_time_usleep(uint32_t us)
void sys_time_arch_init(void)
arch independent LED (Light Emitting Diodes) API
uint16_t foo
Definition main_demo5.c:58
Architecture independent timing functions.
volatile uint32_t nb_tick
SYS_TIME_TICKS since startup.
Definition sys_time.h:74
volatile uint32_t nb_sec
full seconds since startup
Definition sys_time.h:72
uint32_t cpu_ticks_per_sec
cpu ticks per second
Definition sys_time.h:80
uint32_t duration
in SYS_TIME_TICKS
Definition sys_time.h:68
uint32_t resolution_cpu_ticks
sys_time_timer resolution in cpu ticks
Definition sys_time.h:79
volatile uint32_t nb_sec_rem
remainder of seconds since startup in CPU_TICKS
Definition sys_time.h:73
float resolution
sys_time_timer resolution in seconds
Definition sys_time.h:77
static uint32_t cpu_ticks_of_usec(uint32_t usec)
Definition sys_time.h:197
sys_time_cb cb
Definition sys_time.h:65
#define SYS_TIME_NB_TIMER
Definition sys_time.h:44
uint32_t end_time
in SYS_TIME_TICKS
Definition sys_time.h:67
struct sys_time_timer timer[SYS_TIME_NB_TIMER]
Definition sys_time.h:75
static uint32_t usec_of_cpu_ticks(uint32_t cpu_ticks)
Definition sys_time.h:217
volatile bool elapsed
Definition sys_time.h:66
unsigned int uint32_t
Typedef defining 32 bit unsigned int type.