Infineon MOTIX™ MCU TLE987x Device Family SDK
sfr_access.h
Go to the documentation of this file.
1 /*
2  ***********************************************************************************************************************
3  *
4  * Copyright (c) Infineon Technologies AG
5  * All rights reserved.
6  *
7  * The applicable license agreement can be found at this pack's installation directory in the file
8  * license/IFX_SW_Licence_MOTIX_LITIX.txt
9  *
10  **********************************************************************************************************************/
23 /*******************************************************************************
24 ** Author(s) Identity **
25 ********************************************************************************
26 ** Initials Name **
27 ** ---------------------------------------------------------------------------**
28 ** DM Daniel Mysliwitz **
29 ** BG Blandine Guillot **
30 ** JO Julia Ott **
31 *******************************************************************************/
32 
33 /*******************************************************************************
34 ** Revision Control History **
35 ********************************************************************************
36 ** V0.1.0: 2018-11-26, DM: Initial version **
37 ** V0.1.1: 2020-04-15, BG: Updated revision history format **
38 ** V0.1.2: 2020-07-21, BG: EP-439: Formatted .h/.c files **
39 ** V0.1.3: 2022-02-28, JO: EP-936: Updated copyright and branding **
40 ** V0.1.4: 2025-01-02, JO: EP-1493: Updated license **
41 *******************************************************************************/
42 
43 #ifndef sfr_access_h
44 #define sfr_access_h
45 
46 /*******************************************************************************
47 ** Includes **
48 *******************************************************************************/
49 #include "types.h"
50 
51 /*******************************************************************************
52 ** Prototypes for Unit testing **
53 *******************************************************************************/
54 #ifdef TESTING
55 /* macros to access bit fields of a register */
56 void Field_Wrt8(volatile uint8 *reg, uint8 pos, uint8 msk, uint8 val);
57 void Field_Wrt8all(volatile uint8 *reg, uint8 val);
58 void Field_Wrt16(volatile uint16 *reg, uint16 pos, uint16 msk, uint16 val);
59 void Field_Wrt32(volatile uint32 *reg, uint32 pos, uint32 msk, uint32 val);
60 void Field_Mod8(volatile uint8 *reg, uint8 pos, uint8 msk, uint8 val);
61 void Field_Mod16(volatile uint16 *reg, uint16 pos, uint16 msk, uint16 val);
62 void Field_Mod32(volatile uint32 *reg, uint32 pos, uint32 msk, uint32 val);
63 void Field_Inv8(volatile uint8 *reg, uint8 msk);
64 void Field_Inv16(volatile uint16 *reg, uint16 msk);
65 void Field_Inv32(volatile uint32 *reg, uint32 msk);
66 void Field_Clr8(volatile uint8 *reg, uint8 msk);
67 void Field_Clr16(volatile uint16 *reg, uint16 msk);
68 void Field_Clr32(volatile uint32 *reg, uint32 msk);
69 uint8 u1_Field_Rd8(const volatile uint8 *reg, uint8 pos, uint8 msk);
70 uint8 u1_Field_Rd16(const volatile uint16 *reg, uint16 pos, uint16 msk);
71 uint8 u1_Field_Rd32(const volatile uint32 *reg, uint32 pos, uint32 msk);
72 uint8 u8_Field_Rd8(const volatile uint8 *reg, uint8 pos, uint8 msk);
73 uint8 u8_Field_Rd16(const volatile uint16 *reg, uint16 pos, uint16 msk);
74 uint8 u8_Field_Rd32(const volatile uint32 *reg, uint32 pos, uint32 msk);
75 uint16 u16_Field_Rd16(const volatile uint16 *reg, uint16 pos, uint16 msk);
76 uint16 u16_Field_Rd32(const volatile uint32 *reg, uint32 pos, uint32 msk);
77 uint32 u32_Field_Rd32(const volatile uint32 *reg, uint32 pos, uint32 msk);
78 
79 #else /* #ifdef TESTING */
80 
81 /*******************************************************************************
82 ** Prototypes **
83 *******************************************************************************/
84 /* macros to access a whole register */
85 /* set a 8-bit register directly, write (no read-mod-write) */
93 INLINE void Field_Wrt8all(volatile uint8 *reg, uint8 val);
94 
95 
96 /* macros to access bit fields of a register */
97 /* set a bit field directly, write (no read-mod-write) */
107 INLINE void Field_Wrt8(volatile uint8 *reg, uint8 pos, uint8 msk, uint8 val);
108 
118 INLINE void Field_Wrt16(volatile uint16 *reg, uint16 pos, uint16 msk, uint16 val);
119 
129 INLINE void Field_Wrt32(volatile uint32 *reg, uint32 pos, uint32 msk, uint32 val);
130 
131 /* set a bitfield by using read-mod-write */
141 INLINE void Field_Mod8(volatile uint8 *reg, uint8 pos, uint8 msk, uint8 val);
142 
152 INLINE void Field_Mod16(volatile uint16 *reg, uint16 pos, uint16 msk, uint16 val);
153 
163 INLINE void Field_Mod32(volatile uint32 *reg, uint32 pos, uint32 msk, uint32 val);
164 
165 /* invert the setting of a bitfield, read-inv-write */
173 INLINE void Field_Inv8(volatile uint8 *reg, uint8 msk);
174 
182 INLINE void Field_Inv16(volatile uint16 *reg, uint16 msk);
183 
191 INLINE void Field_Inv32(volatile uint32 *reg, uint32 msk);
192 
193 /* write a bitfield to '0', read-write0 */
201 INLINE void Field_Clr8(volatile uint8 *reg, uint8 msk);
202 
203 /* write a bitfield to '0', read-write0 */
211 INLINE void Field_Clr16(volatile uint16 *reg, uint16 msk);
212 
213 /* write a bitfield to '0', read-write0 */
221 INLINE void Field_Clr32(volatile uint32 *reg, uint32 msk);
222 
223 /* read bitffield */
224 
233 INLINE uint8 u1_Field_Rd8(const volatile uint8 *reg, uint8 pos, uint8 msk);
234 
243 INLINE uint8 u1_Field_Rd16(const volatile uint16 *reg, uint16 pos, uint16 msk);
244 
253 INLINE uint8 u1_Field_Rd32(const volatile uint32 *reg, uint32 pos, uint32 msk);
254 
263 INLINE uint8 u8_Field_Rd8(const volatile uint8 *reg, uint8 pos, uint8 msk);
264 
273 INLINE uint8 u8_Field_Rd16(const volatile uint16 *reg, uint16 pos, uint16 msk);
274 
283 INLINE uint8 u8_Field_Rd32(const volatile uint32 *reg, uint32 pos, uint32 msk);
284 
293 INLINE uint16 u16_Field_Rd16(const volatile uint16 *reg, uint16 pos, uint16 msk);
294 
303 INLINE uint16 u16_Field_Rd32(const volatile uint32 *reg, uint32 pos, uint32 msk);
304 
313 INLINE uint32 u32_Field_Rd32(const volatile uint32 *reg, uint32 pos, uint32 msk);
314 
315 /* Macro function body declarations */
316 
317 INLINE void Field_Wrt8all(volatile uint8 *reg, uint8 val)
318 {
319  (*reg = val);
320 }
321 
322 INLINE void Field_Wrt8(volatile uint8 *reg, uint8 pos, uint8 msk, uint8 val)
323 {
324  (*reg = (uint8)((uint32)val << pos) & (uint8)msk);
325 }
326 
327 INLINE void Field_Wrt16(volatile uint16 *reg, uint16 pos, uint16 msk, uint16 val)
328 {
329  (*reg = (uint16)((uint32)val << pos) & (uint16)msk);
330 }
331 
332 INLINE void Field_Wrt32(volatile uint32 *reg, uint32 pos, uint32 msk, uint32 val)
333 {
334  (*reg = ((uint32)val << pos) & (uint32)msk);
335 }
336 
337 INLINE void Field_Mod8(volatile uint8 *reg, uint8 pos, uint8 msk, uint8 val)
338 {
339  (*reg = (*reg & (uint8)~msk) | (uint8)(((uint32)val << pos) & (uint8)msk));
340 }
341 
342 INLINE void Field_Mod16(volatile uint16 *reg, uint16 pos, uint16 msk, uint16 val)
343 {
344  (*reg = (*reg & (uint16)~msk) | (uint16)(((uint32)val << pos) & (uint16)msk));
345 }
346 
347 INLINE void Field_Mod32(volatile uint32 *reg, uint32 pos, uint32 msk, uint32 val)
348 {
349  (*reg = (*reg & (uint32)~msk) | (uint32)(((uint32)val << pos) & (uint32)msk));
350 }
351 
352 INLINE void Field_Inv8(volatile uint8 *reg, uint8 msk)
353 {
354  (*reg = ((uint8) * reg ^ (uint8)msk));
355 }
356 
357 INLINE void Field_Inv16(volatile uint16 *reg, uint16 msk)
358 {
359  (*reg = ((uint16) * reg ^ (uint16)msk));
360 }
361 
362 INLINE void Field_Inv32(volatile uint32 *reg, uint32 msk)
363 {
364  (*reg = ((uint32) * reg ^ (uint32)msk));
365 }
366 
367 INLINE void Field_Clr8(volatile uint8 *reg, uint8 msk)
368 {
369  (*reg = (*reg & (uint8)~msk));
370 }
371 
372 INLINE void Field_Clr16(volatile uint16 *reg, uint16 msk)
373 {
374  (*reg = (*reg & (uint16)~msk));
375 }
376 
377 INLINE void Field_Clr32(volatile uint32 *reg, uint32 msk)
378 {
379  (*reg = (*reg & (uint32)~msk));
380 }
381 
382 INLINE uint8 u1_Field_Rd8(const volatile uint8 *reg, uint8 pos, uint8 msk)
383 {
384  return (((*reg & msk) >> pos) & 1u);
385 }
386 
387 INLINE uint8 u1_Field_Rd16(const volatile uint16 *reg, uint16 pos, uint16 msk)
388 {
389  return ((uint8)((*reg & msk) >> pos) & 1u);
390 }
391 
392 INLINE uint8 u1_Field_Rd32(const volatile uint32 *reg, uint32 pos, uint32 msk)
393 {
394  return ((uint8)((*reg & msk) >> pos) & 1u);
395 }
396 
397 INLINE uint8 u8_Field_Rd8(const volatile uint8 *reg, uint8 pos, uint8 msk)
398 {
399  return ((*reg & msk) >> pos);
400 }
401 
402 INLINE uint8 u8_Field_Rd16(const volatile uint16 *reg, uint16 pos, uint16 msk)
403 {
404  return ((uint8)((*reg & msk) >> pos));
405 }
406 
407 INLINE uint8 u8_Field_Rd32(const volatile uint32 *reg, uint32 pos, uint32 msk)
408 {
409  return ((uint8)((*reg & msk) >> pos));
410 }
411 
412 INLINE uint16 u16_Field_Rd16(const volatile uint16 *reg, uint16 pos, uint16 msk)
413 {
414  return ((*reg & msk) >> pos);
415 }
416 
417 INLINE uint16 u16_Field_Rd32(const volatile uint32 *reg, uint32 pos, uint32 msk)
418 {
419  return ((uint16)((*reg & msk) >> pos));
420 }
421 
422 INLINE uint32 u32_Field_Rd32(const volatile uint32 *reg, uint32 pos, uint32 msk)
423 {
424  return ((uint32)((*reg & msk) >> pos));
425 }
426 #endif /* TESTING */
427 
428 
429 #endif
INLINE void Field_Inv32(volatile uint32 *reg, uint32 msk)
This function inverts a bit field in a 32-bit register.
Definition: sfr_access.h:362
INLINE void Field_Wrt16(volatile uint16 *reg, uint16 pos, uint16 msk, uint16 val)
This function writes a bit field in a 16-bit register.
Definition: sfr_access.h:327
INLINE void Field_Wrt8(volatile uint8 *reg, uint8 pos, uint8 msk, uint8 val)
This function writes a bit field in a 8-bit register.
Definition: sfr_access.h:322
INLINE void Field_Mod32(volatile uint32 *reg, uint32 pos, uint32 msk, uint32 val)
This function writes a bit field in a 32-bit register.
Definition: sfr_access.h:347
INLINE void Field_Inv8(volatile uint8 *reg, uint8 msk)
This function inverts a bit field in a 8-bit register.
Definition: sfr_access.h:352
INLINE uint8 u1_Field_Rd16(const volatile uint16 *reg, uint16 pos, uint16 msk)
This function reads a 1-bit field of a 16-bit register.
Definition: sfr_access.h:387
INLINE uint8 u1_Field_Rd32(const volatile uint32 *reg, uint32 pos, uint32 msk)
This function reads a 1-bit field of a 32-bit register.
Definition: sfr_access.h:392
INLINE uint8 u8_Field_Rd8(const volatile uint8 *reg, uint8 pos, uint8 msk)
This function reads a 8-bit field of a 8-bit register.
Definition: sfr_access.h:397
INLINE void Field_Clr32(volatile uint32 *reg, uint32 msk)
This function clears a bit field in a 32-bit register.
Definition: sfr_access.h:377
INLINE void Field_Wrt8all(volatile uint8 *reg, uint8 val)
This function writes an 8-bit register directly, no mask/position needed.
Definition: sfr_access.h:317
INLINE uint16 u16_Field_Rd32(const volatile uint32 *reg, uint32 pos, uint32 msk)
This function reads a 16-bit field of a 32-bit register.
Definition: sfr_access.h:417
INLINE uint8 u8_Field_Rd16(const volatile uint16 *reg, uint16 pos, uint16 msk)
This function reads a 8-bit field of a 16-bit register.
Definition: sfr_access.h:402
INLINE void Field_Clr8(volatile uint8 *reg, uint8 msk)
This function clears a bit field in a 8-bit register.
Definition: sfr_access.h:367
INLINE void Field_Mod16(volatile uint16 *reg, uint16 pos, uint16 msk, uint16 val)
This function writes a bit field in a 16-bit register.
Definition: sfr_access.h:342
INLINE void Field_Wrt32(volatile uint32 *reg, uint32 pos, uint32 msk, uint32 val)
This function writes a bit field in a 32-bit register.
Definition: sfr_access.h:332
INLINE uint8 u8_Field_Rd32(const volatile uint32 *reg, uint32 pos, uint32 msk)
This function reads a 8-bit field of a 32-bit register.
Definition: sfr_access.h:407
INLINE uint8 u1_Field_Rd8(const volatile uint8 *reg, uint8 pos, uint8 msk)
This function reads a 1-bit field of a 8-bit register.
Definition: sfr_access.h:382
INLINE uint32 u32_Field_Rd32(const volatile uint32 *reg, uint32 pos, uint32 msk)
This function reads a 32-bit field of a 32-bit register.
Definition: sfr_access.h:422
INLINE void Field_Inv16(volatile uint16 *reg, uint16 msk)
This function inverts a bit field in a 16-bit register.
Definition: sfr_access.h:357
INLINE uint16 u16_Field_Rd16(const volatile uint16 *reg, uint16 pos, uint16 msk)
This function reads a 16-bit field of a 16-bit register.
Definition: sfr_access.h:412
INLINE void Field_Mod8(volatile uint8 *reg, uint8 pos, uint8 msk, uint8 val)
This function writes a bit field in a 8-bit register.
Definition: sfr_access.h:337
INLINE void Field_Clr16(volatile uint16 *reg, uint16 msk)
This function clears a bit field in a 16-bit register.
Definition: sfr_access.h:372
General type declarations.
#define INLINE
Definition: types.h:132
uint8_t uint8
8 bit unsigned value
Definition: types.h:137
uint16_t uint16
16 bit unsigned value
Definition: types.h:138
uint32_t uint32
32 bit unsigned value
Definition: types.h:139