ESOS32
ESOSOn32-bitProcessors
all_generic.h
Go to the documentation of this file.
1 /*
2  * "Copyright (c) 2019 J. W. Bruce ("AUTHOR(S)")"
3  * All rights reserved.
4  * (J. W. Bruce, jwbruce_AT_tntech.edu, Tennessee Tech University)
5  *
6  * Permission to use, copy, modify, and distribute this software and its
7  * documentation for any purpose, without fee, and without written agreement is
8  * hereby granted, provided that the above copyright notice, the following
9  * two paragraphs and the authors appear in all copies of this software.
10  *
11  * IN NO EVENT SHALL THE "AUTHORS" BE LIABLE TO ANY PARTY FOR
12  * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
13  * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE "AUTHORS"
14  * HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
15  *
16  * THE "AUTHORS" SPECIFICALLY DISCLAIMS ANY WARRANTIES,
17  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
18  * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
19  * ON AN "AS IS" BASIS, AND THE "AUTHORS" HAS NO OBLIGATION TO
20  * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS."
21  *
22  * Please maintain this header in its entirety when copying/modifying
23  * these files.
24  *
25  *
26  */
27 
28 // Documentation for this file. If the \file tag isn't present,
29 // this file won't be documented.
37 #ifndef __ALL_GENERIC_H
38 #define __ALL_GENERIC_H
39 
40 #include <stdint.h>
41 #ifdef __linux
42 #warning Compiling for 32-bit Linux
43 #include "pc_generic.h"
44 #define HELLO_MSG "\n" __FILE__ ", built on " __DATE__ " at " __TIME__ "\n"
45 #else
46 //#warning Compiling for STM32 L4
47 #define HELLO_MSG "\n" __FILE__ ", built on " __DATE__ " at " __TIME__ "\n"
48 /*
49  * We might need to include pc_generic.h here or write a new one.
50  */
51 #endif
52 
53 
61 typedef union _UINT8 {
63  uint8_t _uint8;
65  uint8_t u8;
66  struct {
67  unsigned LSN: 4;
68  unsigned MSN: 4;
69  };
70  struct {
72 unsigned b0:
73  1;
75 unsigned b1:
76  1;
78 unsigned b2:
79  1;
81 unsigned b3:
82  1;
84 unsigned b4:
85  1;
87 unsigned b5:
88  1;
90 unsigned b6:
91  1;
93 unsigned b7:
94  1;
95  };
96 } UINT8;
97 
115 typedef union _UINT16 {
117  uint16_t _uint16;
119  uint16_t u16;
121  int16_t int16;
123  int16_t i16;
124  struct {
126  uint8_t u8Lsb;
128  uint8_t u8Msb;
129  };
130  struct {
131  unsigned LSBLSN: 4;
132  unsigned LSBMSN: 4;
133  unsigned MSBLSN: 4;
134  unsigned MSBMSN: 4;
135  };
136  struct {
138  uint8_t u8Bytes[2];
139  };
140  struct {
142 unsigned b0:
143  1;
145 unsigned b1:
146  1;
148 unsigned b2:
149  1;
151 unsigned b3:
152  1;
154 unsigned b4:
155  1;
157 unsigned b5:
158  1;
160 unsigned b6:
161  1;
163 unsigned b7:
164  1;
166 unsigned b8:
167  1;
169 unsigned b9:
170  1;
172 unsigned b10:
173  1;
175 unsigned b11:
176  1;
178 unsigned b12:
179  1;
181 unsigned b13:
182  1;
184 unsigned b14:
185  1;
187 unsigned b15:
188  1;
189  };
190 } UINT16;
191 
198 #define LSB(a) ((a).u8Bytes[0])
199 
205 #define MSB(a) ((a).u8Bytes[1])
206 
229 typedef union _UINT32 {
231  uint32_t _uint32;
233  uint32_t u32;
234  struct {
236  uint8_t u8LoLsb;
238  uint8_t u8LoMsb;
240  uint8_t u8HiLsb;
242  uint8_t u8HiMsb;
243  };
244  struct {
246  uint16_t u16LoWord;
248  uint16_t u16HiWord;
249  };
250  struct {
252  uint16_t u16Words[2];
253  };
254  struct {
256  uint8_t u8Bytes[4];
257  };
258  struct {
259 unsigned b0:
260  1;
262 unsigned b1:
263  1;
265 unsigned b2:
266  1;
268 unsigned b3:
269  1;
271 unsigned b4:
272  1;
274 unsigned b5:
275  1;
277 unsigned b6:
278  1;
280 unsigned b7:
281  1;
283 unsigned b8:
284  1;
286 unsigned b9:
287  1;
289 unsigned b10:
290  1;
292 unsigned b11:
293  1;
295 unsigned b12:
296  1;
298 unsigned b13:
299  1;
301 unsigned b14:
302  1;
304 unsigned b15:
305  1;
307 unsigned b16:
308  1;
310 unsigned b17:
311  1;
313 unsigned b18:
314  1;
316 unsigned b19:
317  1;
319 unsigned b20:
320  1;
322 unsigned b21:
323  1;
325 unsigned b22:
326  1;
328 unsigned b23:
329  1;
331 unsigned b24:
332  1;
334 unsigned b25:
335  1;
337 unsigned b26:
338  1;
340 unsigned b27:
341  1;
343 unsigned b28:
344  1;
346 unsigned b29:
347  1;
349 unsigned b30:
350  1;
352 unsigned b31:
353  1;
354  };
355 } UINT32;
356 
357 // Now, some macros to help navigate these structures.....
364 #define LOWER_WORD(a) ((a).u16Words[0])
365 
371 #define UPPER_WORD(a) ((a).u16Words[1])
372 
378 #define LOWER_LSB(a) ((a).u8Bytes[0])
379 
385 #define LOWER_MSB(a) ((a).u8Bytes[1])
386 
392 #define UPPER_LSB(a) ((a).u8Bytes[2])
393 
399 #define UPPER_MSB(a) ((a).u8Bytes[3])
400 
406 typedef enum _BOOL {
408  FALSE = 0,
411 } BOOL;
412 
414 #define OK TRUE
415 
416 #define FAIL FALSE
417 
418 
419 #define ON TRUE
420 #define OFF FALSE
421 
422 
423 #define HIGH TRUE
424 #define LOW FALSE
425 
426 // These defines are defined in the HAL include files. If we define
427 // them here, it throws compiler errors
428 // error: redeclaration of enumerator 'FALSE'
429 #ifndef USE_HAL_DRIVER
430 #define ENABLE TRUE
431 #define DISABLE FALSE
432 #endif
433 
435 #define NULLPTR 0
436 
437 #define NULLIDX 0xFF
438 
439 // Create bit masks for ease-of-use. Surround each
440 // with #ifndef because some libraries (libopencm3,
441 // for example) have already defined these constants
442 //
443 //
445 #ifndef ESOS_BIT0
446 #define ESOS_BIT0 0x0001
447 #endif
448 
449 #ifndef ESOS_BIT1
450 #define ESOS_BIT1 0x0002
451 #endif
452 
453 #ifndef ESOS_BIT2
454 #define ESOS_BIT2 0x0004
455 #endif
456 
457 #ifndef ESOS_BIT3
458 #define ESOS_BIT3 0x0008
459 #endif
460 
461 #ifndef ESOS_BIT4
462 #define ESOS_BIT4 0x0010
463 #endif
464 
465 #ifndef ESOS_BIT5
466 #define ESOS_BIT5 0x0020
467 #endif
468 
469 #ifndef ESOS_BIT6
470 #define ESOS_BIT6 0x0040
471 #endif
472 
473 #ifndef ESOS_BIT7
474 #define ESOS_BIT7 0x0080
475 #endif
476 
477 #ifndef ESOS_BIT8
478 #define ESOS_BIT8 0x0100
479 #endif
480 
481 #ifndef ESOS_BIT9
482 #define ESOS_BIT9 0x0200
483 #endif
484 
485 #ifndef ESOS_BIT10
486 #define ESOS_BIT10 0x0400
487 #endif
488 
489 #ifndef ESOS_BIT11
490 #define ESOS_BIT11 0x0800
491 #endif
492 
493 #ifndef ESOS_BIT12
494 #define ESOS_BIT12 0x1000
495 #endif
496 
497 #ifndef ESOS_BIT13
498 #define ESOS_BIT13 0x2000
499 #endif
500 
501 #ifndef ESOS_BIT14
502 #define ESOS_BIT14 0x4000
503 #endif
504 
505 #ifndef ESOS_BIT15
506 #define ESOS_BIT15 0x8000
507 #endif
508 
509 #ifndef ESOS_BIT16
510 #define ESOS_BIT16 0x00010000
511 #endif
512 
513 #ifndef ESOS_BIT17
514 #define ESOS_BIT17 0x00020000
515 #endif
516 
517 #ifndef ESOS_BIT18
518 #define ESOS_BIT18 0x00040000
519 #endif
520 
521 #ifndef ESOS_BIT19
522 #define ESOS_BIT19 0x00080000
523 #endif
524 
525 #ifndef ESOS_BIT20
526 #define ESOS_BIT20 0x00100000
527 #endif
528 
529 #ifndef ESOS_BIT21
530 #define ESOS_BIT21 0x00200000
531 #endif
532 
533 #ifndef ESOS_BIT22
534 #define ESOS_BIT22 0x00400000
535 #endif
536 
537 #ifndef ESOS_BIT23
538 #define ESOS_BIT23 0x00800000
539 #endif
540 
541 #ifndef ESOS_BIT24
542 #define ESOS_BIT24 0x01000000
543 #endif
544 
545 #ifndef ESOS_BIT25
546 #define ESOS_BIT25 0x02000000
547 #endif
548 
549 #ifndef ESOS_BIT26
550 #define ESOS_BIT26 0x04000000
551 #endif
552 
553 #ifndef ESOS_BIT27
554 #define ESOS_BIT27 0x08000000
555 #endif
556 
557 #ifndef ESOS_BIT28
558 #define ESOS_BIT28 0x10000000
559 #endif
560 
561 #ifndef ESOS_BIT29
562 #define ESOS_BIT29 0x20000000
563 #endif
564 
565 #ifndef ESOS_BIT30
566 #define ESOS_BIT30 0x40000000
567 #endif
568 
569 #ifndef ESOS_BIT31
570 #define ESOS_BIT31 0x80000000
571 #endif
572 
579 #define BIT_SET_MASK(var, mask) ((var) |= (mask))
580 
586 #define BIT_CLEAR_MASK(var, mask) ((var) &= (~(mask)))
587 
593 #define BIT_TOGGLE_MASK(var, mask) ((var) ^= (mask))
594 
603 #define IS_BIT_SET_MASK(var, mask) (((var) & (mask)))
604 
613 #define IS_BIT_CLEAR_MASK(var, mask) ((~(var) & (mask)))
614 
621 #define BIT_SET(var, bitnum) ((var) |= (1 << (bitnum)))
622 
628 #define BIT_CLEAR(var, bitnum) ((var) &= (~(1 << (bitnum))))
629 
635 #define BIT_TOGGLE(var, bitnum) ((var) ^= (1 << (bitnum)))
636 
644 #define IS_BIT_SET(var, bitnum) ((var) & (1 << (bitnum)))
645 
653 #define IS_BIT_CLEAR(var, bitnum) (~(var) & ((1 << (bitnum))))
654 
655 #endif // __ALL_GENERIC_H
_UINT8::b6
unsigned b6
Definition: all_generic.h:91
_UINT16::b15
unsigned b15
Definition: all_generic.h:188
UINT32
union _UINT32 UINT32
_UINT32::b20
unsigned b20
Definition: all_generic.h:320
_UINT32::b16
unsigned b16
Definition: all_generic.h:308
_UINT32::u8LoLsb
uint8_t u8LoLsb
Definition: all_generic.h:236
_UINT32::u8LoMsb
uint8_t u8LoMsb
Definition: all_generic.h:238
_UINT8::b3
unsigned b3
Definition: all_generic.h:82
_UINT32::b17
unsigned b17
Definition: all_generic.h:311
_UINT32::b13
unsigned b13
Definition: all_generic.h:299
_UINT32::b12
unsigned b12
Definition: all_generic.h:296
_UINT32::b30
unsigned b30
Definition: all_generic.h:350
_UINT32::b19
unsigned b19
Definition: all_generic.h:317
_UINT32::b10
unsigned b10
Definition: all_generic.h:290
UINT16
union _UINT16 UINT16
_UINT32::b7
unsigned b7
Definition: all_generic.h:281
_UINT8::b2
unsigned b2
Definition: all_generic.h:79
_UINT8::u8
uint8_t u8
Definition: all_generic.h:65
_UINT32::b27
unsigned b27
Definition: all_generic.h:341
_UINT32::u8HiLsb
uint8_t u8HiLsb
Definition: all_generic.h:240
_UINT16::b2
unsigned b2
Definition: all_generic.h:149
_UINT32::b9
unsigned b9
Definition: all_generic.h:287
_UINT16::b4
unsigned b4
Definition: all_generic.h:155
_UINT16::u8Lsb
uint8_t u8Lsb
Definition: all_generic.h:126
_UINT32::b6
unsigned b6
Definition: all_generic.h:278
_UINT32::b29
unsigned b29
Definition: all_generic.h:347
_UINT16::b9
unsigned b9
Definition: all_generic.h:170
_UINT8::b5
unsigned b5
Definition: all_generic.h:88
_UINT8::b1
unsigned b1
Definition: all_generic.h:76
_UINT32::b25
unsigned b25
Definition: all_generic.h:335
_UINT32
Definition: all_generic.h:229
_UINT32::u16HiWord
uint16_t u16HiWord
Definition: all_generic.h:248
_UINT8::b0
unsigned b0
Definition: all_generic.h:73
_UINT16::b6
unsigned b6
Definition: all_generic.h:161
_UINT16::b3
unsigned b3
Definition: all_generic.h:152
_UINT16::b7
unsigned b7
Definition: all_generic.h:164
_UINT16::b11
unsigned b11
Definition: all_generic.h:176
_UINT16::b12
unsigned b12
Definition: all_generic.h:179
_BOOL
_BOOL
Definition: all_generic.h:406
_UINT32::b11
unsigned b11
Definition: all_generic.h:293
_UINT32::b3
unsigned b3
Definition: all_generic.h:269
_UINT32::b14
unsigned b14
Definition: all_generic.h:302
_UINT16::b1
unsigned b1
Definition: all_generic.h:146
_UINT32::b26
unsigned b26
Definition: all_generic.h:338
_UINT32::b5
unsigned b5
Definition: all_generic.h:275
_UINT32::b2
unsigned b2
Definition: all_generic.h:266
_UINT16::u16
uint16_t u16
Definition: all_generic.h:119
_UINT32::b31
unsigned b31
Definition: all_generic.h:353
_UINT32::u32
uint32_t u32
Definition: all_generic.h:233
_UINT16::b14
unsigned b14
Definition: all_generic.h:185
_UINT16::i16
int16_t i16
Definition: all_generic.h:123
_UINT32::u16Words
uint16_t u16Words[2]
Definition: all_generic.h:252
_UINT8::_uint8
uint8_t _uint8
Definition: all_generic.h:63
_UINT16::u8Bytes
uint8_t u8Bytes[2]
Definition: all_generic.h:138
BOOL
enum _BOOL BOOL
_UINT16::b10
unsigned b10
Definition: all_generic.h:173
TRUE
@ TRUE
Definition: all_generic.h:410
_UINT32::b15
unsigned b15
Definition: all_generic.h:305
_UINT32::b28
unsigned b28
Definition: all_generic.h:344
_UINT16::b13
unsigned b13
Definition: all_generic.h:182
_UINT32::b23
unsigned b23
Definition: all_generic.h:329
_UINT8::b4
unsigned b4
Definition: all_generic.h:85
_UINT16::_uint16
uint16_t _uint16
Definition: all_generic.h:117
FALSE
@ FALSE
Definition: all_generic.h:408
_UINT32::u16LoWord
uint16_t u16LoWord
Definition: all_generic.h:246
_UINT16::b5
unsigned b5
Definition: all_generic.h:158
_UINT32::u8HiMsb
uint8_t u8HiMsb
Definition: all_generic.h:242
_UINT16::b0
unsigned b0
Definition: all_generic.h:143
_UINT16::u8Msb
uint8_t u8Msb
Definition: all_generic.h:128
_UINT32::b22
unsigned b22
Definition: all_generic.h:326
_UINT16
Definition: all_generic.h:115
_UINT8
Definition: all_generic.h:61
_UINT32::b8
unsigned b8
Definition: all_generic.h:284
_UINT8::b7
unsigned b7
Definition: all_generic.h:94
_UINT32::u8Bytes
uint8_t u8Bytes[4]
Definition: all_generic.h:256
_UINT32::b1
unsigned b1
Definition: all_generic.h:263
_UINT32::b21
unsigned b21
Definition: all_generic.h:323
_UINT32::b4
unsigned b4
Definition: all_generic.h:272
_UINT8::MSN
unsigned MSN
Definition: all_generic.h:68
_UINT16::int16
int16_t int16
Definition: all_generic.h:121
_UINT32::b18
unsigned b18
Definition: all_generic.h:314
_UINT32::b24
unsigned b24
Definition: all_generic.h:332
_UINT16::b8
unsigned b8
Definition: all_generic.h:167
UINT8
union _UINT8 UINT8
_UINT32::_uint32
uint32_t _uint32
Definition: all_generic.h:231