ESOS32
ESOSOn32-bitProcessors
include
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,
410
TRUE
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
Generated by
1.8.17