HAL
HAL layer above libopencm3 library.
Main Page
Related Pages
Modules
All
Files
Functions
Macros
Groups
Pages
pin_v1.h
Go to the documentation of this file.
1
/*
2
* This file is part of the HAL project, inline library above libopencm3.
3
*
4
* This library is free software: you can redistribute it and/or modify
5
* it under the terms of the GNU Lesser General Public License as published by
6
* the Free Software Foundation, either version 3 of the License, or
7
* (at your option) any later version.
8
*
9
* This library is distributed in the hope that it will be useful,
10
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
* GNU Lesser General Public License for more details.
13
*
14
* You should have received a copy of the GNU Lesser General Public License
15
* along with this library. If not, see <http://www.gnu.org/licenses/>.
16
*/
17
#ifndef HAL_PIN_STM32_V1_H_INCLUDED
18
#define HAL_PIN_STM32_V1_H_INCLUDED
19
20
#if !defined(HAL_PIN_H_INCLUDED)
21
# error please do not include HAL library internals directly
22
#endif
23
24
#include <
hal/arch/stm32/pin_common.h
>
25
26
BEGIN_DECLS
27
28
/*****************************************************************************/
29
30
INLINE
uint32_t
_pin_port
(
const
uint32_t pin)
31
{
32
return
pin & ~15;
33
}
34
35
INLINE
uint32_t
_pin_pin
(
const
uint32_t pin)
36
{
37
return
1 << (pin & 15);
38
}
39
40
INLINE
uint32_t
_pin_pinno
(
const
uint32_t pin)
41
{
42
return
pin & 15;
43
}
44
45
/*****************************************************************************/
46
47
INLINE
bool
pin_get
(
const
uint32_t pin)
48
{
49
return
(GPIO_IDR(
_pin_port
(pin)) &
_pin_pin
(pin)) != 0;
50
}
51
52
INLINE
void
pin_set
(
const
uint32_t pin,
const
bool
val)
53
{
54
GPIO_BSRR(
_pin_port
(pin)) = (val) ?
_pin_pin
(pin) : (
_pin_pin
(pin) << 16);
55
}
56
57
INLINE
void
pin_toggle
(
const
uint32_t pin)
58
{
59
uint32_t val = GPIO_ODR(
_pin_port
(pin));
60
GPIO_BSRR(
_pin_port
(pin)) = ((val &
_pin_pin
(pin)) << 16) | (~val &
_pin_pin
(pin));
61
}
62
63
/******************************************************************************/
64
65
INLINE
void
pin_pull_disable
(
const
uint32_t pin)
66
{
67
GPIO_PUPDR(
_pin_port
(pin)) = (GPIO_PUPDR(
_pin_port
(pin)) & ~GPIO_PUPD_MASK(
_pin_pinno
(pin))) | GPIO_PUPD(
_pin_pinno
(pin), GPIO_PUPD_NONE);
68
}
69
70
INLINE
void
pin_pull_down
(
const
uint32_t pin)
71
{
72
GPIO_PUPDR(
_pin_port
(pin)) = (GPIO_PUPDR(
_pin_port
(pin)) & ~GPIO_PUPD_MASK(
_pin_pinno
(pin))) | GPIO_PUPD(
_pin_pinno
(pin), GPIO_PUPD_PULLDOWN);
73
}
74
75
INLINE
void
pin_pull_up
(
const
uint32_t pin)
76
{
77
GPIO_PUPDR(
_pin_port
(pin)) = (GPIO_PUPDR(
_pin_port
(pin)) & ~GPIO_PUPD_MASK(
_pin_pinno
(pin))) | GPIO_PUPD(
_pin_pinno
(pin), GPIO_PUPD_PULLUP);
78
}
79
80
/******************************************************************************/
81
82
INLINE
void
pin_output_pushpull
(
const
uint32_t pin)
83
{
84
GPIO_MODER(
_pin_port
(pin)) = (GPIO_MODER(
_pin_port
(pin)) & ~GPIO_MODE_MASK(
_pin_pinno
(pin))) | GPIO_MODE(
_pin_pinno
(pin), GPIO_MODE_OUTPUT);
85
GPIO_OTYPER(
_pin_port
(pin)) &= ~
_pin_pin
(pin);
86
}
87
88
INLINE
void
pin_output_opendrain
(
const
uint32_t pin)
89
{
90
GPIO_OTYPER(
_pin_port
(pin)) |=
_pin_pin
(pin);
91
GPIO_MODER(
_pin_port
(pin)) = (GPIO_MODER(
_pin_port
(pin)) & ~GPIO_MODE_MASK(
_pin_pinno
(pin))) | GPIO_MODE(
_pin_pinno
(pin), GPIO_MODE_OUTPUT);
92
}
93
94
INLINE
void
pin_af_pushpull
(
const
uint32_t pin)
95
{
96
GPIO_MODER(
_pin_port
(pin)) = (GPIO_MODER(
_pin_port
(pin)) & ~GPIO_MODE_MASK(
_pin_pinno
(pin))) | GPIO_MODE(
_pin_pinno
(pin), GPIO_MODE_AF);
97
GPIO_OTYPER(
_pin_port
(pin)) &= ~
_pin_pin
(pin);
98
}
99
100
INLINE
void
pin_af_opendrain
(
const
uint32_t pin)
101
{
102
GPIO_OTYPER(
_pin_port
(pin)) |=
_pin_pin
(pin);
103
GPIO_MODER(
_pin_port
(pin)) = (GPIO_MODER(
_pin_port
(pin)) & ~GPIO_MODE_MASK(
_pin_pinno
(pin))) | GPIO_MODE(
_pin_pinno
(pin), GPIO_MODE_AF);
104
}
105
106
INLINE
void
pin_input
(
const
uint32_t pin)
107
{
108
GPIO_MODER(
_pin_port
(pin)) = (GPIO_MODER(
_pin_port
(pin)) & ~GPIO_MODE_MASK(
_pin_pinno
(pin))) | GPIO_MODE(
_pin_pinno
(pin), GPIO_MODE_INPUT);
109
}
110
111
INLINE
void
pin_analog
(
const
uint32_t pin)
112
{
113
GPIO_PUPDR(
_pin_port
(pin)) = (GPIO_PUPDR(
_pin_port
(pin)) & ~GPIO_PUPD_MASK(
_pin_pinno
(pin))) | GPIO_PUPD(
_pin_pinno
(pin), GPIO_PUPD_NONE);
114
GPIO_MODER(
_pin_port
(pin)) = (GPIO_MODER(
_pin_port
(pin)) & ~GPIO_MODE_MASK(
_pin_pinno
(pin))) | GPIO_MODE(
_pin_pinno
(pin), GPIO_MODE_ANALOG);
115
}
116
117
/******************************************************************************/
118
119
INLINE
void
pin_speed_low
(
const
uint32_t pin)
120
{
121
GPIO_OSPEEDR(
_pin_port
(pin)) = (GPIO_OSPEEDR(
_pin_port
(pin)) & ~GPIO_OSPEED_MASK(
_pin_pinno
(pin))) | GPIO_OSPEED(
_pin_pinno
(pin), 0);
122
}
123
124
INLINE
void
pin_speed_medium
(
const
uint32_t pin)
125
{
126
GPIO_OSPEEDR(
_pin_port
(pin)) = (GPIO_OSPEEDR(
_pin_port
(pin)) & ~GPIO_OSPEED_MASK(
_pin_pinno
(pin))) | GPIO_OSPEED(
_pin_pinno
(pin), 1);
127
}
128
129
INLINE
void
pin_speed_fast
(
const
uint32_t pin)
130
{
131
GPIO_OSPEEDR(
_pin_port
(pin)) = (GPIO_OSPEEDR(
_pin_port
(pin)) & ~GPIO_OSPEED_MASK(
_pin_pinno
(pin))) | GPIO_OSPEED(
_pin_pinno
(pin), 2);
132
}
133
134
INLINE
void
pin_speed_high
(
const
uint32_t pin)
135
{
136
GPIO_OSPEEDR(
_pin_port
(pin)) = (GPIO_OSPEEDR(
_pin_port
(pin)) & ~GPIO_OSPEED_MASK(
_pin_pinno
(pin))) | GPIO_OSPEED(
_pin_pinno
(pin), 3);
137
}
138
139
140
/******************************************************************************/
141
142
INLINE
void
pin_af_map
(
const
uint32_t pin,
const
uint32_t af)
143
{
144
GPIO_MODER(
_pin_port
(pin)) = (GPIO_MODER(
_pin_port
(pin)) & ~GPIO_MODE_MASK(
_pin_pinno
(pin))) |
145
GPIO_MODE(
_pin_pinno
(pin), GPIO_MODE_AF);
146
147
148
if
(
_pin_pinno
(pin) < 8)
149
GPIO_AFRL(
_pin_port
(pin)) = (GPIO_AFRL(
_pin_port
(pin)) & ~GPIO_AFR_MASK(pin)) |
150
GPIO_AFR(
_pin_pinno
(pin), af);
151
else
152
GPIO_AFRH(
_pin_port
(pin)) = (GPIO_AFRH(
_pin_port
(pin)) & ~GPIO_AFR_MASK(pin-8)) |
153
GPIO_AFR(
_pin_pinno
(pin)-8, af);
154
}
155
156
END_DECLS
157
158
#endif
/* HAL_PIN_STM32_V1_H_INCLUDED */
include
hal
arch
stm32
pin_v1.h
Generated on Tue Dec 23 2014 23:48:05 for HAL by
1.8.4