Paparazzi UAS  v4.2.2_stable-4-gcc32f65
Paparazzi is a free software Unmanned Aircraft System.
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
sys_time_arch.h
Go to the documentation of this file.
1 /*
2  *
3  * Copyright (C) 2009-2011 The Paparazzi Team
4  *
5  * This file is part of paparazzi.
6  *
7  * paparazzi is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 2, or (at your option)
10  * any later version.
11  *
12  * paparazzi is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with paparazzi; see the file COPYING. If not, write to
19  * the Free Software Foundation, 59 Temple Place - Suite 330,
20  * Boston, MA 02111-1307, USA.
21  *
22  */
23 
30 #ifndef SYS_TIME_ARCH_H
31 #define SYS_TIME_ARCH_H
32 
33 #include "mcu_periph/sys_time.h"
34 
35 #include BOARD_CONFIG
36 #include "LPC21xx.h"
37 #include "armVIC.h"
38 
39 #include "std.h"
40 
41 void TIMER0_ISR ( void ) __attribute__((naked));
42 
43 /* T0 prescaler, set T0_CLK to 15MHz, T0_CLK = PCLK / T0PCLK_DIV */
44 #if (PCLK == 15000000)
45 #define T0_PCLK_DIV 1
46 
47 #elif (PCLK == 30000000)
48 #define T0_PCLK_DIV 2
49 
50 #elif (PCLK == 60000000)
51 #define T0_PCLK_DIV 4
52 
53 #else
54 #error unknown PCLK frequency
55 #endif
56 
57 #ifndef TIMER0_VIC_SLOT
58 #define TIMER0_VIC_SLOT 1
59 #endif /* TIMER0_VIC_SLOT */
60 
61 #define CPU_TICKS_OF_SEC(s) (uint32_t)(s * PCLK / T0_PCLK_DIV + 0.5)
62 #define SIGNED_CPU_TICKS_OF_SEC(s) (int32_t)(s * PCLK / T0_PCLK_DIV + 0.5)
63 
64 #define SEC_OF_CPU_TICKS(t) (t / PCLK * T0_PCLK_DIV)
65 #define MSEC_OF_CPU_TICKS(t) (t / (PCLK/1000) * T0_PCLK_DIV)
66 #define USEC_OF_CPU_TICKS(t) (t / (PCLK/1000000) * T0_PCLK_DIV)
67 
68 
69 /* Generic timer macros */
70 #define SysTimeTimerStart(_t) { _t = USEC_OF_CPU_TICKS(T0TC); }
71 #define SysTimeTimer(_t) ( USEC_OF_CPU_TICKS(T0TC) - (_t))
72 #define SysTimeTimerStop(_t) { _t = ( USEC_OF_CPU_TICKS(T0TC) - (_t)); }
73 
74 #define SysTickTimerStart(_t) { _t = T0TC; }
75 #define SysTickTimer(_t) ((uint32_t)(T0TC - _t))
76 #define SysTickTimerStop(_t) { _t = (T0TC - _t); }
77 
79 static inline void sys_time_usleep(uint32_t us) {
80  uint32_t start = T0TC;
81  uint32_t ticks = CPU_TICKS_OF_USEC(us);
82  while ((uint32_t)(T0TC-start) < ticks);
83 }
84 
85 #endif /* SYS_TIME_ARCH_H */
static void sys_time_usleep(uint32_t us)
Busy wait, in microseconds.
Definition: sys_time_arch.h:79
Architecture independent timing functions.
#define T0TC
Definition: LPC21xx.h:52
#define CPU_TICKS_OF_USEC(us)
Definition: sys_time.h:102
unsigned long uint32_t
Definition: types.h:18
void TIMER0_ISR(void) __attribute__((naked))
__attribute__((always_inline))
Definition: i2c_arch.c:35