Paparazzi UAS
v5.18.0_stable
Paparazzi is a free software Unmanned Aircraft System.
servos_4017_hw.h
Go to the documentation of this file.
1
/*
2
* Copyright (C) 2012 ENAC
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
*/
22
23
#ifndef SERVOS_4017_HW_H
24
#define SERVOS_4017_HW_H
25
26
#include <
inttypes.h
>
27
#include "
std.h
"
28
29
#include "
LPC21xx.h
"
30
#include "
mcu_periph/sys_time.h
"
31
32
#include BOARD_CONFIG
33
34
#define SERVOS_TICS_OF_USEC(s) cpu_ticks_of_usec(s)
35
#define ClipServo(x,a,b) Clip(x, a, b)
36
37
#if defined NB_CHANNELS
38
#define _4017_NB_CHANNELS Clip(NB_CHANNELS,0,10)
39
#else
40
#define _4017_NB_CHANNELS 10
41
#endif
42
43
extern
uint16_t
servos_values
[
_4017_NB_CHANNELS
];
44
#define Actuator4017Set(_i, _v) { servos_values[_i] = SERVOS_TICS_OF_USEC(_v); }
45
46
extern
void
actuators_4017_init
(
void
);
47
#define Actuators4017Commit() {}
48
#define Actuators4017Init() actuators_4017_init()
49
50
extern
uint8_t
servos_4017_idx
;
51
52
#define ACTUATORS_IT TIR_MR1I
53
54
#ifndef SERVOS_4017_CLOCK_FALLING
55
#define SERVOS_4017_ISR() { \
56
if (servos_4017_idx >= _4017_NB_CHANNELS) { \
57
SetBit(IO1SET, SERVO_RESET_PIN); \
58
servos_4017_idx = 0; \
59
SetBit(IO1CLR, SERVO_RESET_PIN); \
60
} \
61
\
62
/* request clock high on next match */
\
63
T0MR1 += servos_values[servos_4017_idx]; \
64
/* lower clock pin */
\
65
T0EMR &= ~TEMR_EM1; \
66
servos_4017_idx++; \
67
}
68
#else
/* SERVOS_4017_CLOCK_FALLING */
69
70
#define SERVOS_4017_RESET_WIDTH SERVOS_TICS_OF_USEC(1000)
71
#define SERVOS_4017_FIRST_PULSE_WIDTH SERVOS_TICS_OF_USEC(100)
72
73
#define SERVOS_4017_ISR() { \
74
if (servos_4017_idx == _4017_NB_CHANNELS) { \
75
SetBit(IO1SET, SERVO_RESET_PIN); \
76
/* Start a long 1ms reset, keep clock low */
\
77
T0MR1 += SERVOS_4017_RESET_WIDTH; \
78
servos_4017_idx++; \
79
T0EMR &= ~TEMR_EM1; \
80
} \
81
else if (servos_4017_idx > _4017_NB_CHANNELS) { \
82
/* Clear the reset*/
\
83
SetBit(IO1CLR,SERVO_RESET_PIN); \
84
/* assert clock */
\
85
T0EMR |= TEMR_EM1; \
86
/* Starts a short pulse-like period */
\
87
T0MR1 += SERVOS_4017_FIRST_PULSE_WIDTH; \
88
servos_4017_idx=0; \
89
} \
90
else { \
91
/* request next match */
\
92
T0MR1 += servos_values[servos_4017_idx]; \
93
/* clock low if not last one, last is done with reset */
\
94
if (servos_4017_idx != _4017_NB_CHANNELS-1) { \
95
/* raise clock pin */
\
96
T0EMR |= TEMR_EM1; \
97
} \
98
servos_4017_idx++; \
99
} \
100
}
101
#endif
/* SERVOS_4017_CLOCK_ON_RESET */
102
103
#endif
/* SERVOS_4017_HW_H */
uint16_t
unsigned short uint16_t
Definition:
types.h:16
LPC21xx.h
std.h
sys_time.h
Architecture independent timing functions.
uint8_t
unsigned char uint8_t
Definition:
types.h:14
servos_4017_idx
uint8_t servos_4017_idx
Definition:
servos_4017_hw.c:27
servos_values
uint16_t servos_values[_4017_NB_CHANNELS]
Definition:
servos_4015_hw.c:29
_4017_NB_CHANNELS
#define _4017_NB_CHANNELS
Definition:
servos_4017_hw.h:40
inttypes.h
actuators_4017_init
void actuators_4017_init(void)
Definition:
servos_4017_hw.c:31
sw
airborne
arch
lpc21
subsystems
actuators
servos_4017_hw.h
Generated on Tue Feb 1 2022 13:51:13 for Paparazzi UAS by
1.8.17