bit_manip.h
Go to the documentation of this file.
1 /*
2  * SocialLedge.com - Copyright (C) 2013
3  *
4  * This file is part of free software framework for embedded processors.
5  * You can use it and/or distribute it as long as this copyright header
6  * remains unmodified. The code is free for personal use and requires
7  * permission to use in a commercial product.
8  *
9  * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED
10  * OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF
11  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE.
12  * I SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR
13  * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
14  *
15  * You can reach the author of this software at :
16  * p r e e t . w i k i @ g m a i l . c o m
17  */
18 
23 #ifndef BIT_MANIP_H__
24 #define BIT_MANIP_H__
25 #ifdef __cplusplus
26 extern "C" {
27 #endif
28 #include <stdint.h>
29 
30 
31 
40 #define BIT(reg) (*((volatile bit_struct_t*)&(reg)))
41 
42 
43 
44 
49 typedef union
50 {
51  // 32-bit structure below overlaps with this 32-bit integer
52  // because each var of a union uses same base memory location.
53  uint32_t full32bit;
54 
55  // : 1 (colon 1) means use only 1 bit size for the variable.
56  struct {
57  uint32_t b0 :1; uint32_t b1 :1; uint32_t b2 :1; uint32_t b3 :1;
58  uint32_t b4 :1; uint32_t b5 :1; uint32_t b6 :1; uint32_t b7 :1;
59  uint32_t b8 :1; uint32_t b9 :1; uint32_t b10 :1; uint32_t b11 :1;
60  uint32_t b12 :1; uint32_t b13 :1; uint32_t b14 :1; uint32_t b15 :1;
61  uint32_t b16 :1; uint32_t b17 :1; uint32_t b18 :1; uint32_t b19 :1;
62  uint32_t b20 :1; uint32_t b21 :1; uint32_t b22 :1; uint32_t b23 :1;
63  uint32_t b24 :1; uint32_t b25 :1; uint32_t b26 :1; uint32_t b27 :1;
64  uint32_t b28 :1; uint32_t b29 :1; uint32_t b30 :1; uint32_t b31 :1;
65  } __attribute__((packed));
66  // packed means pack all 1 bit members tightly
67 
68  struct {
69  uint32_t b1_0 : 2; uint32_t b3_2 : 2; uint32_t b5_4 : 2; uint32_t b7_6 : 2;
70  uint32_t b9_8 : 2; uint32_t b11_10 : 2; uint32_t b13_12 : 2; uint32_t b15_14 : 2;
71  uint32_t b17_16 : 2; uint32_t b19_18 : 2; uint32_t b21_20 : 2; uint32_t b23_22 : 2;
72  uint32_t b25_24 : 2; uint32_t b27_26 : 2; uint32_t b29_28 : 2; uint32_t b31_30 : 2;
73  } __attribute__((packed));
74 } bit_struct_t;
75 
76 
77 
78 #ifdef __cplusplus
79 }
80 #endif
81 #endif /* BIT_MANIP_H__ */
uint32_t b30
Definition: bit_manip.h:61
Definition: bit_manip.h:49
uint32_t b19_18
Definition: bit_manip.h:56
uint32_t b3
Definition: bit_manip.h:54
uint32_t b31_30
Definition: bit_manip.h:57
uint32_t b28
Definition: bit_manip.h:61
uint32_t b25_24
Definition: bit_manip.h:57
uint32_t b8
Definition: bit_manip.h:56
uint32_t b7_6
Definition: bit_manip.h:54
uint32_t b13_12
Definition: bit_manip.h:55
uint32_t b17_16
Definition: bit_manip.h:56
uint32_t b23
Definition: bit_manip.h:59
uint32_t b0
Definition: bit_manip.h:54
uint32_t b7
Definition: bit_manip.h:55
__attribute__
Definition: rtc.h:56
uint32_t b4
Definition: bit_manip.h:55
uint32_t b27_26
Definition: bit_manip.h:57
uint32_t b26
Definition: bit_manip.h:60
uint32_t b15_14
Definition: bit_manip.h:55
uint32_t b5
Definition: bit_manip.h:55
uint32_t b29_28
Definition: bit_manip.h:57
uint32_t b20
Definition: bit_manip.h:59
uint32_t full32bit
Definition: bit_manip.h:53
uint32_t b29
Definition: bit_manip.h:61
uint32_t b10
Definition: bit_manip.h:56
uint32_t b27
Definition: bit_manip.h:60
uint32_t b1_0
Definition: bit_manip.h:54
uint32_t b5_4
Definition: bit_manip.h:54
uint32_t b16
Definition: bit_manip.h:58
uint32_t b11
Definition: bit_manip.h:56
uint32_t b24
Definition: bit_manip.h:60
uint32_t b12
Definition: bit_manip.h:57
uint32_t b14
Definition: bit_manip.h:57
uint32_t b9
Definition: bit_manip.h:56
uint32_t b18
Definition: bit_manip.h:58
uint32_t b2
Definition: bit_manip.h:54
uint32_t b15
Definition: bit_manip.h:57
uint32_t b21_20
Definition: bit_manip.h:56
uint32_t b31
Definition: bit_manip.h:61
uint32_t b1
Definition: bit_manip.h:54
uint32_t b11_10
Definition: bit_manip.h:55
uint32_t b9_8
Definition: bit_manip.h:55
uint32_t b13
Definition: bit_manip.h:57
uint32_t b25
Definition: bit_manip.h:60
uint32_t b17
Definition: bit_manip.h:58
uint32_t b21
Definition: bit_manip.h:59
uint32_t b19
Definition: bit_manip.h:58
uint32_t b6
Definition: bit_manip.h:55
uint32_t b22
Definition: bit_manip.h:59
uint32_t b23_22
Definition: bit_manip.h:56
uint32_t b3_2
Definition: bit_manip.h:54