Infineon MOTIX™ MCU TLE985x Device Family SDK
sfr_access.h
Go to the documentation of this file.
1 /*
2  ***********************************************************************************************************************
3  *
4  * Copyright (c) 2018-2022, Infineon Technologies AG
5  * All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without modification,are permitted provided that the
8  * following conditions are met:
9  *
10  * Redistributions of source code must retain the above copyright notice, this list of conditions and the following
11  * disclaimer.
12  *
13  * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the
14  * following disclaimer in the documentation and/or other materials provided with the distribution.
15  *
16  * Neither the name of the copyright holders nor the names of its contributors may be used to endorse or promote
17  * products derived from this software without specific prior written permission.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
20  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
23  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
24  * WHETHER IN CONTRACT, STRICT LIABILITY,OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
25  * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26  *
27  **********************************************************************************************************************/
40 /*******************************************************************************
41 ** Author(s) Identity **
42 ********************************************************************************
43 ** Initials Name **
44 ** ---------------------------------------------------------------------------**
45 ** DM Daniel Mysliwitz **
46 ** BG Blandine Guillot **
47 *******************************************************************************/
48 
49 /*******************************************************************************
50 ** Revision Control History **
51 ********************************************************************************
52 ** V0.1.0: 2018-11-26, DM: Initial version **
53 ** V0.1.1: 2020-03-02, BG: Updated revision history format **
54 ** V0.1.2: 2022-01-21, JO: EP-934: Updated copyright and branding **
55 *******************************************************************************/
56 
57 #ifndef sfr_access_h
58 #define sfr_access_h
59 
60 /*******************************************************************************
61 ** Includes **
62 *******************************************************************************/
63 #include "types.h"
64 
65 /*******************************************************************************
66 ** Prototypes for Unit testing **
67 *******************************************************************************/
68 #ifdef TESTING
69 /* macros to access bit fields of a register */
70 void Field_Wrt8(volatile uint8* reg, uint8 pos, uint8 msk, uint8 val);
71 void Field_Wrt8all(volatile uint8* reg, uint8 val);
72 void Field_Wrt16(volatile uint16* reg, uint8 pos, uint16 msk, uint16 val);
73 void Field_Wrt32(volatile uint32* reg, uint8 pos, uint32 msk, uint32 val);
74 void Field_Wrt32all(volatile uint32* reg, uint32 val);
75 void Field_Mod8(volatile uint8* reg, uint8 pos, uint8 msk, uint8 val);
76 void Field_Mod16(volatile uint16* reg, uint8 pos, uint16 msk, uint16 val);
77 void Field_Mod32(volatile uint32* reg, uint8 pos, uint32 msk, uint32 val);
78 void Field_Inv8(volatile uint8* reg, uint8 msk);
79 void Field_Inv16(volatile uint16* reg, uint16 msk);
80 void Field_Inv32(volatile uint32* reg, uint32 msk);
81 void Field_Clr8(volatile uint8* reg, uint8 msk);
82 void Field_Clr16(volatile uint16* reg, uint16 msk);
83 void Field_Clr32(volatile uint32* reg, uint32 msk);
84 uint8 u1_Field_Rd8(const volatile uint8* reg, uint8 pos, uint8 msk);
85 uint8 u1_Field_Rd16(const volatile uint16* reg, uint8 pos, uint16 msk);
86 uint8 u1_Field_Rd32(const volatile uint32* reg, uint8 pos, uint32 msk);
87 uint8 u8_Field_Rd8(const volatile uint8* reg, uint8 pos, uint8 msk);
88 uint8 u8_Field_Rd16(const volatile uint16* reg, uint8 pos, uint16 msk);
89 uint8 u8_Field_Rd32(const volatile uint32* reg, uint8 pos, uint32 msk);
90 uint16 u16_Field_Rd16(const volatile uint16* reg, uint8 pos, uint16 msk);
91 uint16 u16_Field_Rd32(const volatile uint32* reg, uint8 pos, uint32 msk);
92 uint32 u32_Field_Rd32(const volatile uint32* reg, uint8 pos, uint32 msk);
93 
94 #else /* #ifdef TESTING */
95 
96 /*******************************************************************************
97 ** Prototypes **
98 *******************************************************************************/
99 /* macros to access a whole register */
100 /* set a 8-bit register directly, write (no read-mod-write) */
108 INLINE void Field_Wrt8all(volatile uint8* reg, uint8 val);
109 
110 
111 /* macros to access bit fields of a register */
112 /* set a bit field directly, write (no read-mod-write) */
122 INLINE void Field_Wrt8(volatile uint8* reg, uint8 pos, uint8 msk, uint8 val);
123 
133 INLINE void Field_Wrt16(volatile uint16* reg, uint8 pos, uint16 msk, uint16 val);
134 
144 INLINE void Field_Wrt32(volatile uint32* reg, uint8 pos, uint32 msk, uint32 val);
145 
146 /* macros to access a whole register */
147 /* set a 32-bit register directly, write (no read-mod-write) */
155 INLINE void Field_Wrt32all(volatile uint32* reg, uint32 val);
156 
157 /* set a bitfield by using read-mod-write */
167 INLINE void Field_Mod8(volatile uint8* reg, uint8 pos, uint8 msk, uint8 val);
168 
178 INLINE void Field_Mod16(volatile uint16* reg, uint8 pos, uint16 msk, uint16 val);
179 
189 INLINE void Field_Mod32(volatile uint32* reg, uint8 pos, uint32 msk, uint32 val);
190 
191 /* invert the setting of a bitfield, read-inv-write */
199 INLINE void Field_Inv8(volatile uint8* reg, uint8 msk);
200 
208 INLINE void Field_Inv16(volatile uint16* reg, uint16 msk);
209 
217 INLINE void Field_Inv32(volatile uint32* reg, uint32 msk);
218 
219 /* write a bitfield to '0', read-write0 */
227 INLINE void Field_Clr8(volatile uint8* reg, uint8 msk);
228 
229 /* write a bitfield to '0', read-write0 */
237 INLINE void Field_Clr16(volatile uint16* reg, uint16 msk);
238 
239 /* write a bitfield to '0', read-write0 */
247 INLINE void Field_Clr32(volatile uint32* reg, uint32 msk);
248 
249 /* read bitffield */
250 
259 INLINE uint8 u1_Field_Rd8(const volatile uint8* reg, uint8 pos, uint8 msk);
260 
269 INLINE uint8 u1_Field_Rd16(const volatile uint16* reg, uint8 pos, uint16 msk);
270 
279 INLINE uint8 u1_Field_Rd32(const volatile uint32* reg, uint8 pos, uint32 msk);
280 
289 INLINE uint8 u8_Field_Rd8(const volatile uint8* reg, uint8 pos, uint8 msk);
290 
299 INLINE uint8 u8_Field_Rd16(const volatile uint16* reg, uint8 pos, uint16 msk);
300 
309 INLINE uint8 u8_Field_Rd32(const volatile uint32* reg, uint8 pos, uint32 msk);
310 
319 INLINE uint16 u16_Field_Rd16(const volatile uint16* reg, uint8 pos, uint16 msk);
320 
329 INLINE uint16 u16_Field_Rd32(const volatile uint32* reg, uint8 pos, uint32 msk);
330 
339 INLINE uint32 u32_Field_Rd32(const volatile uint32* reg, uint8 pos, uint32 msk);
340 
341 /* Macro function body declarations */
342 
343 INLINE void Field_Wrt8all(volatile uint8* reg, uint8 val)
344 {
345  (*reg = val);
346 }
347 
348 INLINE void Field_Wrt8(volatile uint8* reg, uint8 pos, uint8 msk, uint8 val)
349 {
350  (*reg = (uint8)((uint32)val << pos) & (uint8)msk);
351 }
352 
353 INLINE void Field_Wrt16(volatile uint16* reg, uint8 pos, uint16 msk, uint16 val)
354 {
355  (*reg = (uint16)((uint32)val << pos) & (uint16)msk);
356 }
357 
358 INLINE void Field_Wrt32(volatile uint32* reg, uint8 pos, uint32 msk, uint32 val)
359 {
360  (*reg = ((uint32)val << pos) & (uint32)msk);
361 }
362 
363 INLINE void Field_Wrt32all(volatile uint32* reg, uint32 val)
364 {
365  (*reg = (uint32)val);
366 }
367 
368 INLINE void Field_Mod8(volatile uint8* reg, uint8 pos, uint8 msk, uint8 val)
369 {
370  (*reg = (*reg & (uint8)~msk) | (uint8)(((uint32)val << pos) & (uint8)msk));
371 }
372 
373 INLINE void Field_Mod16(volatile uint16* reg, uint8 pos, uint16 msk, uint16 val)
374 {
375  (*reg = (*reg & (uint16)~msk) | (uint16)(((uint32)val << pos) & (uint16)msk));
376 }
377 
378 INLINE void Field_Mod32(volatile uint32* reg, uint8 pos, uint32 msk, uint32 val)
379 {
380  (*reg = (*reg & (uint32)~msk) | (uint32)(((uint32)val << pos) & (uint32)msk));
381 }
382 
383 INLINE void Field_Inv8(volatile uint8* reg, uint8 msk)
384 {
385  (*reg = ((uint8)*reg ^ (uint8)msk));
386 }
387 
388 INLINE void Field_Inv16(volatile uint16* reg, uint16 msk)
389 {
390  (*reg = ((uint16)*reg ^ (uint16)msk));
391 }
392 
393 INLINE void Field_Inv32(volatile uint32* reg, uint32 msk)
394 {
395  (*reg = ((uint32)*reg ^ (uint32)msk));
396 }
397 
398 INLINE void Field_Clr8(volatile uint8* reg, uint8 msk)
399 {
400  (*reg = (*reg & (uint8)~msk));
401 }
402 
403 INLINE void Field_Clr16(volatile uint16* reg, uint16 msk)
404 {
405  (*reg = (*reg & (uint16)~msk));
406 }
407 
408 INLINE void Field_Clr32(volatile uint32* reg, uint32 msk)
409 {
410  (*reg = (*reg & (uint32)~msk));
411 }
412 
413 INLINE uint8 u1_Field_Rd8(const volatile uint8* reg, uint8 pos, uint8 msk)
414 {
415  return (((*reg & msk) >> pos) & 1u);
416 }
417 
418 INLINE uint8 u1_Field_Rd16(const volatile uint16* reg, uint8 pos, uint16 msk)
419 {
420  return ((uint8)((*reg & msk) >> pos) & 1u);
421 }
422 
423 INLINE uint8 u1_Field_Rd32(const volatile uint32* reg, uint8 pos, uint32 msk)
424 {
425  return ((uint8)((*reg & msk) >> pos) & 1u);
426 }
427 
428 INLINE uint8 u8_Field_Rd8(const volatile uint8* reg, uint8 pos, uint8 msk)
429 {
430  return ((*reg & msk) >> pos);
431 }
432 
433 INLINE uint8 u8_Field_Rd16(const volatile uint16* reg, uint8 pos, uint16 msk)
434 {
435  return ((uint8)((*reg & msk) >> pos));
436 }
437 
438 INLINE uint8 u8_Field_Rd32(const volatile uint32* reg, uint8 pos, uint32 msk)
439 {
440  return ((uint8)((*reg & msk) >> pos));
441 }
442 
443 INLINE uint16 u16_Field_Rd16(const volatile uint16* reg, uint8 pos, uint16 msk)
444 {
445  return ((*reg & msk) >> pos);
446 }
447 
448 INLINE uint16 u16_Field_Rd32(const volatile uint32* reg, uint8 pos, uint32 msk)
449 {
450  return ((uint16)((*reg & msk) >> pos));
451 }
452 
453 INLINE uint32 u32_Field_Rd32(const volatile uint32* reg, uint8 pos, uint32 msk)
454 {
455  return ((uint32)((*reg & msk) >> pos));
456 }
457 #endif /* TESTING */
458 
459 
460 #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:393
INLINE void Field_Wrt16(volatile uint16 *reg, uint8 pos, uint16 msk, uint16 val)
This function writes a bit field in a 16-bit register.
Definition: sfr_access.h:353
INLINE uint8 u8_Field_Rd16(const volatile uint16 *reg, uint8 pos, uint16 msk)
This function reads a 8-bit field of a 16-bit register.
Definition: sfr_access.h:433
INLINE uint16 u16_Field_Rd32(const volatile uint32 *reg, uint8 pos, uint32 msk)
This function reads a 16-bit field of a 32-bit register.
Definition: sfr_access.h:448
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:348
INLINE uint16 u16_Field_Rd16(const volatile uint16 *reg, uint8 pos, uint16 msk)
This function reads a 16-bit field of a 16-bit register.
Definition: sfr_access.h:443
INLINE void Field_Inv8(volatile uint8 *reg, uint8 msk)
This function inverts a bit field in a 8-bit register.
Definition: sfr_access.h:383
INLINE void Field_Mod16(volatile uint16 *reg, uint8 pos, uint16 msk, uint16 val)
This function writes a bit field in a 16-bit register.
Definition: sfr_access.h:373
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:428
INLINE uint8 u1_Field_Rd32(const volatile uint32 *reg, uint8 pos, uint32 msk)
This function reads a 1-bit field of a 32-bit register.
Definition: sfr_access.h:423
INLINE uint8 u1_Field_Rd16(const volatile uint16 *reg, uint8 pos, uint16 msk)
This function reads a 1-bit field of a 16-bit register.
Definition: sfr_access.h:418
INLINE void Field_Clr32(volatile uint32 *reg, uint32 msk)
This function clears a bit field in a 32-bit register.
Definition: sfr_access.h:408
INLINE void Field_Wrt32(volatile uint32 *reg, uint8 pos, uint32 msk, uint32 val)
This function writes a bit field in a 32-bit register.
Definition: sfr_access.h:358
INLINE void Field_Wrt32all(volatile uint32 *reg, uint32 val)
This function writes an 32-bit register directly, no mask/position needed.
Definition: sfr_access.h:363
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:343
INLINE uint8 u8_Field_Rd32(const volatile uint32 *reg, uint8 pos, uint32 msk)
This function reads a 8-bit field of a 32-bit register.
Definition: sfr_access.h:438
INLINE void Field_Clr8(volatile uint8 *reg, uint8 msk)
This function clears a bit field in a 8-bit register.
Definition: sfr_access.h:398
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:413
INLINE void Field_Mod32(volatile uint32 *reg, uint8 pos, uint32 msk, uint32 val)
This function writes a bit field in a 32-bit register.
Definition: sfr_access.h:378
INLINE void Field_Inv16(volatile uint16 *reg, uint16 msk)
This function inverts a bit field in a 16-bit register.
Definition: sfr_access.h:388
INLINE uint32 u32_Field_Rd32(const volatile uint32 *reg, uint8 pos, uint32 msk)
This function reads a 32-bit field of a 32-bit register.
Definition: sfr_access.h:453
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:368
INLINE void Field_Clr16(volatile uint16 *reg, uint16 msk)
This function clears a bit field in a 16-bit register.
Definition: sfr_access.h:403
General type declarations.
#define INLINE
Definition: types.h:145
uint8_t uint8
8 bit unsigned value
Definition: types.h:153
uint16_t uint16
16 bit unsigned value
Definition: types.h:154
uint32_t uint32
32 bit unsigned value
Definition: types.h:155