Choco OS  V.0.16.9.0
Join to the chocolate world
oc_registers.h
Go to the documentation of this file.
1 
35 #ifndef SYSTEM_PORTABLE_INC_OC_REGISTERS_H_
36 #define SYSTEM_PORTABLE_INC_OC_REGISTERS_H_
37 
38 #include <oc_1word.h>
39 #include <oc_stdtypes.h>
40 #include <oc_registers_defs.h>
41 #include <oc_ba.h>
42 #include <oc_rmaps.h>
43 
49 #define _________________________________________MACROS_SECTION_____________________________________________________________________________
50 
53 //==========================================================================================================================================
72 //==========================================================================================================================================
73 #define oC_RegisterType_(REGISTER_NAME) oC_1WORD_FROM_3(oC_RegisterType_ , REGISTER_NAME , _t )
74 
75 //==========================================================================================================================================
81 //==========================================================================================================================================
82 #define oC_RegisterSize_(REGISTER_NAME) oC_1WORD_FROM_2(oC_RegisterSize_,REGISTER_NAME)
83 
84 //==========================================================================================================================================
98 //==========================================================================================================================================
99 #define oC_RegisterByBaseAddress(BaseAddress,REGISTER_NAME) ( (oC_RegisterType_(REGISTER_NAME)*)(BaseAddress + oC_RegisterOffset_(REGISTER_NAME)) )
100 //==========================================================================================================================================
116 //==========================================================================================================================================
117 #define oC_Register(BASE_NAME,REGISTER_NAME) ( (oC_RegisterType_(REGISTER_NAME)*)(oC_BaseAddress_(BASE_NAME) + oC_RegisterOffset_(REGISTER_NAME)) )
118 
119 #undef _________________________________________MACROS_SECTION_____________________________________________________________________________
120 
127 #define _________________________________________TYPES_SECTION______________________________________________________________________________
128 
131 //==========================================================================================================================================
135 //==========================================================================================================================================
136 typedef volatile oC_UInt_t oC_Register_t;
137 
138 //==========================================================================================================================================
139 /*
140  * The lines below are to define types for each register using definitions from oc_registers_defs.h file.
141  */
142 //==========================================================================================================================================
143 #define MAKE_BIT(BIT_NAME , SIZE ) volatile oC_UInt_t BIT_NAME:SIZE;
144 #define MAKE_REGISTER(REGISTER_NAME) \
145  typedef union \
146  { \
147  struct {\
148  oC_REGISTER_(REGISTER_NAME)(MAKE_BIT)\
149  };\
150  volatile oC_UInt_t Value;\
151  } oC_RegisterType_(REGISTER_NAME);
152 oC_REGISTERS_LIST(MAKE_REGISTER)
153 #undef MAKE_BIT
154 #undef MAKE_REGISTER
155 
156 //==========================================================================================================================================
157 /*
158 * The lines below are to verify, that each register contains exactly 32 bits
159 */
160 //==========================================================================================================================================
161 #define MAKE_BIT(BIT_NAME , SIZE ) + SIZE
162 #define MAKE_REGISTER(REGISTER_NAME) oC_RegisterSize_(REGISTER_NAME) = 0 oC_REGISTER_(REGISTER_NAME)(MAKE_BIT) ,
163 
164 typedef enum
165 {
166  oC_REGISTERS_LIST(MAKE_REGISTER)
167 } oC_RegisterSize_t;
168 #undef MAKE_BIT
169 #undef MAKE_REGISTER
170 
171 
172 #undef _________________________________________TYPES_SECTION______________________________________________________________________________
173 
175 #endif /* SYSTEM_PORTABLE_INC_OC_REGISTERS_H_ */
Contains macros for creating one word from more words in macros.
volatile oC_UInt_t oC_Register_t
type for storing registers
Definition: oc_registers.h:136
The file with interface for register maps module.
FILE__DESCRIPTION
Interface for Machine Base Addresses (BA) module.