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  * 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-04-15, BG: Updated revision history format **
54 ** V0.1.2: 2020-07-21, BG: EP-439: Formatted .h/.c files **
55 ** V0.1.3: 2022-02-28, JO: EP-936: Updated copyright and branding **
56 *******************************************************************************/
57 
58 #ifndef sfr_access_h
59 #define sfr_access_h
60 
61 /*******************************************************************************
62 ** Includes **
63 *******************************************************************************/
64 #include "types.h"
65 
66 /*******************************************************************************
67 ** Prototypes for Unit testing **
68 *******************************************************************************/
69 #ifdef TESTING
70 /* macros to access bit fields of a register */
71 void Field_Wrt8(volatile uint8 *reg, uint8 pos, uint8 msk, uint8 val);
72 void Field_Wrt8all(volatile uint8 *reg, uint8 val);
73 void Field_Wrt16(volatile uint16 *reg, uint16 pos, uint16 msk, uint16 val);
74 void Field_Wrt32(volatile uint32 *reg, uint32 pos, uint32 msk, uint32 val);
75 void Field_Mod8(volatile uint8 *reg, uint8 pos, uint8 msk, uint8 val);
76 void Field_Mod16(volatile uint16 *reg, uint16 pos, uint16 msk, uint16 val);
77 void Field_Mod32(volatile uint32 *reg, uint32 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, uint16 pos, uint16 msk);
86 uint8 u1_Field_Rd32(const volatile uint32 *reg, uint32 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, uint16 pos, uint16 msk);
89 uint8 u8_Field_Rd32(const volatile uint32 *reg, uint32 pos, uint32 msk);
90 uint16 u16_Field_Rd16(const volatile uint16 *reg, uint16 pos, uint16 msk);
91 uint16 u16_Field_Rd32(const volatile uint32 *reg, uint32 pos, uint32 msk);
92 uint32 u32_Field_Rd32(const volatile uint32 *reg, uint32 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, uint16 pos, uint16 msk, uint16 val);
134 
144 INLINE void Field_Wrt32(volatile uint32 *reg, uint32 pos, uint32 msk, uint32 val);
145 
146 /* set a bitfield by using read-mod-write */
156 INLINE void Field_Mod8(volatile uint8 *reg, uint8 pos, uint8 msk, uint8 val);
157 
167 INLINE void Field_Mod16(volatile uint16 *reg, uint16 pos, uint16 msk, uint16 val);
168 
178 INLINE void Field_Mod32(volatile uint32 *reg, uint32 pos, uint32 msk, uint32 val);
179 
180 /* invert the setting of a bitfield, read-inv-write */
188 INLINE void Field_Inv8(volatile uint8 *reg, uint8 msk);
189 
197 INLINE void Field_Inv16(volatile uint16 *reg, uint16 msk);
198 
206 INLINE void Field_Inv32(volatile uint32 *reg, uint32 msk);
207 
208 /* write a bitfield to '0', read-write0 */
216 INLINE void Field_Clr8(volatile uint8 *reg, uint8 msk);
217 
218 /* write a bitfield to '0', read-write0 */
226 INLINE void Field_Clr16(volatile uint16 *reg, uint16 msk);
227 
228 /* write a bitfield to '0', read-write0 */
236 INLINE void Field_Clr32(volatile uint32 *reg, uint32 msk);
237 
238 /* read bitffield */
239 
248 INLINE uint8 u1_Field_Rd8(const volatile uint8 *reg, uint8 pos, uint8 msk);
249 
258 INLINE uint8 u1_Field_Rd16(const volatile uint16 *reg, uint16 pos, uint16 msk);
259 
268 INLINE uint8 u1_Field_Rd32(const volatile uint32 *reg, uint32 pos, uint32 msk);
269 
278 INLINE uint8 u8_Field_Rd8(const volatile uint8 *reg, uint8 pos, uint8 msk);
279 
288 INLINE uint8 u8_Field_Rd16(const volatile uint16 *reg, uint16 pos, uint16 msk);
289 
298 INLINE uint8 u8_Field_Rd32(const volatile uint32 *reg, uint32 pos, uint32 msk);
299 
308 INLINE uint16 u16_Field_Rd16(const volatile uint16 *reg, uint16 pos, uint16 msk);
309 
318 INLINE uint16 u16_Field_Rd32(const volatile uint32 *reg, uint32 pos, uint32 msk);
319 
328 INLINE uint32 u32_Field_Rd32(const volatile uint32 *reg, uint32 pos, uint32 msk);
329 
330 /* Macro function body declarations */
331 
332 INLINE void Field_Wrt8all(volatile uint8 *reg, uint8 val)
333 {
334  (*reg = val);
335 }
336 
337 INLINE void Field_Wrt8(volatile uint8 *reg, uint8 pos, uint8 msk, uint8 val)
338 {
339  (*reg = (uint8)((uint32)val << pos) & (uint8)msk);
340 }
341 
342 INLINE void Field_Wrt16(volatile uint16 *reg, uint16 pos, uint16 msk, uint16 val)
343 {
344  (*reg = (uint16)((uint32)val << pos) & (uint16)msk);
345 }
346 
347 INLINE void Field_Wrt32(volatile uint32 *reg, uint32 pos, uint32 msk, uint32 val)
348 {
349  (*reg = ((uint32)val << pos) & (uint32)msk);
350 }
351 
352 INLINE void Field_Mod8(volatile uint8 *reg, uint8 pos, uint8 msk, uint8 val)
353 {
354  (*reg = (*reg & (uint8)~msk) | (uint8)(((uint32)val << pos) & (uint8)msk));
355 }
356 
357 INLINE void Field_Mod16(volatile uint16 *reg, uint16 pos, uint16 msk, uint16 val)
358 {
359  (*reg = (*reg & (uint16)~msk) | (uint16)(((uint32)val << pos) & (uint16)msk));
360 }
361 
362 INLINE void Field_Mod32(volatile uint32 *reg, uint32 pos, uint32 msk, uint32 val)
363 {
364  (*reg = (*reg & (uint32)~msk) | (uint32)(((uint32)val << pos) & (uint32)msk));
365 }
366 
367 INLINE void Field_Inv8(volatile uint8 *reg, uint8 msk)
368 {
369  (*reg = ((uint8) * reg ^ (uint8)msk));
370 }
371 
372 INLINE void Field_Inv16(volatile uint16 *reg, uint16 msk)
373 {
374  (*reg = ((uint16) * reg ^ (uint16)msk));
375 }
376 
377 INLINE void Field_Inv32(volatile uint32 *reg, uint32 msk)
378 {
379  (*reg = ((uint32) * reg ^ (uint32)msk));
380 }
381 
382 INLINE void Field_Clr8(volatile uint8 *reg, uint8 msk)
383 {
384  (*reg = (*reg & (uint8)~msk));
385 }
386 
387 INLINE void Field_Clr16(volatile uint16 *reg, uint16 msk)
388 {
389  (*reg = (*reg & (uint16)~msk));
390 }
391 
392 INLINE void Field_Clr32(volatile uint32 *reg, uint32 msk)
393 {
394  (*reg = (*reg & (uint32)~msk));
395 }
396 
397 INLINE uint8 u1_Field_Rd8(const volatile uint8 *reg, uint8 pos, uint8 msk)
398 {
399  return (((*reg & msk) >> pos) & 1u);
400 }
401 
402 INLINE uint8 u1_Field_Rd16(const volatile uint16 *reg, uint16 pos, uint16 msk)
403 {
404  return ((uint8)((*reg & msk) >> pos) & 1u);
405 }
406 
407 INLINE uint8 u1_Field_Rd32(const volatile uint32 *reg, uint32 pos, uint32 msk)
408 {
409  return ((uint8)((*reg & msk) >> pos) & 1u);
410 }
411 
412 INLINE uint8 u8_Field_Rd8(const volatile uint8 *reg, uint8 pos, uint8 msk)
413 {
414  return ((*reg & msk) >> pos);
415 }
416 
417 INLINE uint8 u8_Field_Rd16(const volatile uint16 *reg, uint16 pos, uint16 msk)
418 {
419  return ((uint8)((*reg & msk) >> pos));
420 }
421 
422 INLINE uint8 u8_Field_Rd32(const volatile uint32 *reg, uint32 pos, uint32 msk)
423 {
424  return ((uint8)((*reg & msk) >> pos));
425 }
426 
427 INLINE uint16 u16_Field_Rd16(const volatile uint16 *reg, uint16 pos, uint16 msk)
428 {
429  return ((*reg & msk) >> pos);
430 }
431 
432 INLINE uint16 u16_Field_Rd32(const volatile uint32 *reg, uint32 pos, uint32 msk)
433 {
434  return ((uint16)((*reg & msk) >> pos));
435 }
436 
437 INLINE uint32 u32_Field_Rd32(const volatile uint32 *reg, uint32 pos, uint32 msk)
438 {
439  return ((uint32)((*reg & msk) >> pos));
440 }
441 #endif /* TESTING */
442 
443 
444 #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:377
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:342
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:337
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:362
INLINE void Field_Inv8(volatile uint8 *reg, uint8 msk)
This function inverts a bit field in a 8-bit register.
Definition: sfr_access.h:367
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:402
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:407
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:412
INLINE void Field_Clr32(volatile uint32 *reg, uint32 msk)
This function clears a bit field in a 32-bit register.
Definition: sfr_access.h:392
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:332
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:432
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:417
INLINE void Field_Clr8(volatile uint8 *reg, uint8 msk)
This function clears a bit field in a 8-bit register.
Definition: sfr_access.h:382
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:357
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:347
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:422
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:397
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:437
INLINE void Field_Inv16(volatile uint16 *reg, uint16 msk)
This function inverts a bit field in a 16-bit register.
Definition: sfr_access.h:372
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:427
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:352
INLINE void Field_Clr16(volatile uint16 *reg, uint16 msk)
This function clears a bit field in a 16-bit register.
Definition: sfr_access.h:387
General type declarations.
#define INLINE
Definition: types.h:148
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