aboutsummaryrefslogtreecommitdiff
path: root/lib/chibios-contrib/os/hal/ports/MSP430X/hal_serial_lld.h
diff options
context:
space:
mode:
Diffstat (limited to 'lib/chibios-contrib/os/hal/ports/MSP430X/hal_serial_lld.h')
-rw-r--r--lib/chibios-contrib/os/hal/ports/MSP430X/hal_serial_lld.h320
1 files changed, 320 insertions, 0 deletions
diff --git a/lib/chibios-contrib/os/hal/ports/MSP430X/hal_serial_lld.h b/lib/chibios-contrib/os/hal/ports/MSP430X/hal_serial_lld.h
new file mode 100644
index 000000000..3de94d796
--- /dev/null
+++ b/lib/chibios-contrib/os/hal/ports/MSP430X/hal_serial_lld.h
@@ -0,0 +1,320 @@
1/*
2 ChibiOS - Copyright (C) 2016 Andrew Wygle aka awygle
3
4 Licensed under the Apache License, Version 2.0 (the "License");
5 you may not use this file except in compliance with the License.
6 You may obtain a copy of the License at
7
8 http://www.apache.org/licenses/LICENSE-2.0
9
10 Unless required by applicable law or agreed to in writing, software
11 distributed under the License is distributed on an "AS IS" BASIS,
12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 See the License for the specific language governing permissions and
14 limitations under the License.
15*/
16
17/**
18 * @file MSP430X/hal_serial_lld.h
19 * @brief MSP430X serial subsystem low level driver header.
20 *
21 * @addtogroup SERIAL
22 * @{
23 */
24
25#ifndef _SERIAL_LLD_H_
26#define _SERIAL_LLD_H_
27
28#if (HAL_USE_SERIAL == TRUE) || defined(__DOXYGEN__)
29
30/*===========================================================================*/
31/* Driver constants. */
32/*===========================================================================*/
33
34#define NONE 0
35#define ODD 2
36#define EVEN 3
37
38#define MSB 1
39#define LSB 0
40
41#define SEVEN 1
42#define EIGHT 0
43
44#define ONE 0
45#define TWO 1
46
47#define MSP430X_SERIAL_SMCLK UCSSEL__SMCLK
48#define MSP430X_SERIAL_UCLK UCSSEL__UCLK
49#define MSP430X_SERIAL_ACLK UCSSEL__ACLK
50
51/*===========================================================================*/
52/* Driver pre-compile time settings. */
53/*===========================================================================*/
54
55/**
56 * @name USART0 configuration options
57 * @{
58 */
59/**
60 * @brief USART0 driver enable switch.
61 * @details If set to @p TRUE the support for USART1 is included.
62 * @note The default is @p FALSE.
63 */
64#if !defined(MSP430X_SERIAL_USE_USART0) || defined(__DOXYGEN__)
65#define MSP430X_SERIAL_USE_USART0 FALSE
66#endif
67/** @} */
68
69/**
70 * @name USART1 configuration options
71 * @{
72 */
73/**
74 * @brief USART1 driver enable switch.
75 * @details If set to @p TRUE the support for USART1 is included.
76 * @note The default is @p FALSE.
77 */
78#if !defined(MSP430X_SERIAL_USE_USART1) || defined(__DOXYGEN__)
79#define MSP430X_SERIAL_USE_USART1 FALSE
80#endif
81/** @} */
82
83/**
84 * @name USART2 configuration options
85 * @{
86 */
87/**
88 * @brief USART2 driver enable switch.
89 * @details If set to @p TRUE the support for USART1 is included.
90 * @note The default is @p FALSE.
91 */
92#if !defined(MSP430X_SERIAL_USE_USART2) || defined(__DOXYGEN__)
93#define MSP430X_SERIAL_USE_USART2 FALSE
94#endif
95/** @} */
96
97/**
98 * @name USART3 configuration options
99 * @{
100 */
101/**
102 * @brief USART3 driver enable switch.
103 * @details If set to @p TRUE the support for USART1 is included.
104 * @note The default is @p FALSE.
105 */
106#if !defined(MSP430X_SERIAL_USE_USART3) || defined(__DOXYGEN__)
107#define MSP430X_SERIAL_USE_USART3 FALSE
108#endif
109
110#if MSP430X_SERIAL_USE_USART0
111 #if !defined(MSP430X_USART0_PARITY)
112 #define MSP430X_USART0_PARITY NONE
113 #endif
114 #if !defined(MSP430X_USART0_ORDER)
115 #define MSP430X_USART0_ORDER LSB
116 #endif
117 #if !defined(MSP430X_USART0_SIZE)
118 #define MSP430X_USART0_SIZE EIGHT
119 #endif
120 #if !defined(MSP430X_USART0_STOP)
121 #define MSP430X_USART0_STOP ONE
122 #endif
123 #if !defined(MSP430X_USART0_CLK_SRC)
124 #define MSP430X_USART0_CLK_SRC MSP430X_UCLK_SRC
125 #ifndef MSP430X_USART0_CLK_FREQ
126 #error "Requested external UART0 clock but no frequency given"
127 #endif
128 #define MSP430X_USART0_UCSSEL UCSSEL__UCLK
129 #elif MSP430X_USART0_CLK_SRC == MSP430X_ACLK_SRC
130 #define MSP430X_USART0_CLK_SRC MSP430X_ACLK_SRC
131 #define MSP430X_USART0_CLK_FREQ MSP430X_ACLK_FREQ
132 #define MSP430X_USART0_UCSSEL UCSSEL__ACLK
133 #elif MSP430X_USART0_CLK_SRC == MSP430X_SMCLK_SRC
134 #define MSP430X_USART0_CLK_SRC MSP430X_SMCLK_SRC
135 #define MSP430X_USART0_CLK_FREQ MSP430X_SMCLK_FREQ
136 #define MSP430X_USART0_UCSSEL UCSSEL__SMCLK
137 #else
138 #error "MSP430X_USART0_CLK_SRC invalid"
139 #endif
140#endif
141
142#if MSP430X_SERIAL_USE_USART1
143 #if !defined(MSP430X_USART1_PARITY)
144 #define MSP430X_USART1_PARITY NONE
145 #endif
146 #if !defined(MSP430X_USART1_ORDER)
147 #define MSP430X_USART1_ORDER LSB
148 #endif
149 #if !defined(MSP430X_USART1_SIZE)
150 #define MSP430X_USART1_SIZE EIGHT
151 #endif
152 #if !defined(MSP430X_USART1_STOP)
153 #define MSP430X_USART1_STOP ONE
154 #endif
155 #if !defined(MSP430X_USART1_CLK_SRC)
156 #define MSP430X_USART1_CLK_SRC MSP430X_UCLK_SRC
157 #ifndef MSP430X_USART1_CLK_FREQ
158 #error "Requested external UART0 clock but no frequency given"
159 #endif
160 #define MSP430X_USART1_UCSSEL UCSSEL__UCLK
161 #elif MSP430X_USART1_CLK_SRC == MSP430X_ACLK_SRC
162 #define MSP430X_USART1_CLK_SRC MSP430X_ACLK_SRC
163 #define MSP430X_USART1_CLK_FREQ MSP430X_ACLK_FREQ
164 #define MSP430X_USART1_UCSSEL UCSSEL__ACLK
165 #elif MSP430X_USART1_CLK_SRC == MSP430X_SMCLK_SRC
166 #define MSP430X_USART1_CLK_SRC MSP430X_SMCLK_SRC
167 #define MSP430X_USART1_CLK_FREQ MSP430X_SMCLK_FREQ
168 #define MSP430X_USART1_UCSSEL UCSSEL__SMCLK
169 #else
170 #error "MSP430X_USART1_CLK_SRC invalid"
171 #endif
172#endif
173
174#if MSP430X_SERIAL_USE_USART2
175 #if !defined(MSP430X_USART2_PARITY)
176 #define MSP430X_USART2_PARITY NONE
177 #endif
178 #if !defined(MSP430X_USART2_ORDER)
179 #define MSP430X_USART2_ORDER LSB
180 #endif
181 #if !defined(MSP430X_USART2_SIZE)
182 #define MSP430X_USART2_SIZE EIGHT
183 #endif
184 #if !defined(MSP430X_USART2_STOP)
185 #define MSP430X_USART2_STOP ONE
186 #endif
187 #if !defined(MSP430X_USART2_CLK_SRC)
188 #define MSP430X_USART2_CLK_SRC MSP430X_UCLK_SRC
189 #ifndef MSP430X_USART2_CLK_FREQ
190 #error "Requested external UART0 clock but no frequency given"
191 #endif
192 #define MSP430X_USART2_UCSSEL UCSSEL__UCLK
193 #elif MSP430X_USART2_CLK_SRC == MSP430X_ACLK_SRC
194 #define MSP430X_USART2_CLK_SRC MSP430X_ACLK_SRC
195 #define MSP430X_USART2_CLK_FREQ MSP430X_ACLK_FREQ
196 #define MSP430X_USART2_UCSSEL UCSSEL__ACLK
197 #elif MSP430X_USART2_CLK_SRC == MSP430X_SMCLK_SRC
198 #define MSP430X_USART2_CLK_SRC MSP430X_SMCLK_SRC
199 #define MSP430X_USART2_CLK_FREQ MSP430X_SMCLK_FREQ
200 #define MSP430X_USART2_UCSSEL UCSSEL__SMCLK
201 #else
202 #error "MSP430X_USART2_CLK_SRC invalid"
203 #endif
204#endif
205
206#if MSP430X_SERIAL_USE_USART3
207 #if !defined(MSP430X_USART3_PARITY)
208 #define MSP430X_USART3_PARITY NONE
209 #endif
210 #if !defined(MSP430X_USART3_ORDER)
211 #define MSP430X_USART3_ORDER LSB
212 #endif
213 #if !defined(MSP430X_USART3_SIZE)
214 #define MSP430X_USART3_SIZE EIGHT
215 #endif
216 #if !defined(MSP430X_USART3_STOP)
217 #define MSP430X_USART3_STOP ONE
218 #endif
219 #if !defined(MSP430X_USART3_CLK_SRC)
220 #define MSP430X_USART3_CLK_SRC MSP430X_UCLK_SRC
221 #ifndef MSP430X_USART3_CLK_FREQ
222 #error "Requested external UART0 clock but no frequency given"
223 #endif
224 #define MSP430X_USART3_UCSSEL UCSSEL__UCLK
225 #elif MSP430X_USART3_CLK_SRC == MSP430X_ACLK_SRC
226 #define MSP430X_USART3_CLK_SRC MSP430X_ACLK_SRC
227 #define MSP430X_USART3_CLK_FREQ MSP430X_ACLK_FREQ
228 #define MSP430X_USART3_UCSSEL UCSSEL__ACLK
229 #elif MSP430X_USART3_CLK_SRC == MSP430X_SMCLK_SRC
230 #define MSP430X_USART3_CLK_SRC MSP430X_SMCLK_SRC
231 #define MSP430X_USART3_CLK_FREQ MSP430X_SMCLK_FREQ
232 #define MSP430X_USART3_UCSSEL UCSSEL__SMCLK
233 #else
234 #error "MSP430X_USART3_CLK_SRC invalid"
235 #endif
236#endif
237
238/** @} */
239
240/*===========================================================================*/
241/* Derived constants and error checks. */
242/*===========================================================================*/
243
244/*===========================================================================*/
245/* Driver data structures and types. */
246/*===========================================================================*/
247
248/**
249 * @brief MSP430X Serial Driver configuration structure.
250 * @details An insance of this structure must be passed to @p sdStart()
251 * in order to configure and start a serial driver operations.
252 * @note This structure content is architecture dependent, each driver
253 * implementation defines its own version and the custom static
254 * initializers.
255 */
256typedef struct {
257 /**
258 * @brief Bit rate.
259 */
260 uint32_t sc_bitrate;
261
262 /* End of the mandatory fields.*/
263} SerialConfig;
264
265/**
266 * @brief @p SerialDriver specific data.
267 */
268#define _serial_driver_data \
269 _base_asynchronous_channel_data \
270 /* Driver state.*/ \
271 sdstate_t state; \
272 /* Input queue.*/ \
273 input_queue_t iqueue; \
274 /* Output queue.*/ \
275 output_queue_t oqueue; \
276 /* Input circular buffer.*/ \
277 uint8_t ib[SERIAL_BUFFERS_SIZE]; \
278 /* Output circular buffer.*/ \
279 uint8_t ob[SERIAL_BUFFERS_SIZE]; \
280 /* End of the mandatory fields.*/
281
282/*===========================================================================*/
283/* Driver macros. */
284/*===========================================================================*/
285
286/*===========================================================================*/
287/* External declarations. */
288/*===========================================================================*/
289
290#if (MSP430X_SERIAL_USE_USART0 == TRUE) && !defined(__DOXYGEN__)
291extern SerialDriver SD0;
292#endif
293
294#if (MSP430X_SERIAL_USE_USART1 == TRUE) && !defined(__DOXYGEN__)
295extern SerialDriver SD1;
296#endif
297
298#if (MSP430X_SERIAL_USE_USART2 == TRUE) && !defined(__DOXYGEN__)
299extern SerialDriver SD2;
300#endif
301
302#if (MSP430X_SERIAL_USE_USART3 == TRUE) && !defined(__DOXYGEN__)
303extern SerialDriver SD3;
304#endif
305
306#ifdef __cplusplus
307extern "C" {
308#endif
309 void sd_lld_init(void);
310 void sd_lld_start(SerialDriver *sdp, const SerialConfig *config);
311 void sd_lld_stop(SerialDriver *sdp);
312#ifdef __cplusplus
313}
314#endif
315
316#endif /* HAL_USE_SERIAL == TRUE */
317
318#endif /* _SERIAL_LLD_H_ */
319
320/** @} */