TLE986x Device Family SDK
sfr_access.h
Go to the documentation of this file.
1 /*
2  ***********************************************************************************************************************
3  *
4  * Copyright (c) 2017, 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 ** **
44 ** Initials Name **
45 ** ---------------------------------------------------------------------------**
46 ** DM Daniel Mysliwitz **
47 ** JO Julia Ott **
48 *******************************************************************************/
49 
50 /*******************************************************************************
51 ** Revision Control History **
52 ********************************************************************************
53 ** V0.1.0: 2018-11-26, DM: Initial version **
54 ** V0.1.1: 2020-10-08, JO: EP-507: Updated revision history format **
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, uint16 pos, uint16 msk, uint16 val);
73 void Field_Wrt32(volatile uint32 *reg, uint32 pos, uint32 msk, uint32 val);
74 void Field_Mod8(volatile uint8 *reg, uint8 pos, uint8 msk, uint8 val);
75 void Field_Mod16(volatile uint16 *reg, uint16 pos, uint16 msk, uint16 val);
76 void Field_Mod32(volatile uint32 *reg, uint32 pos, uint32 msk, uint32 val);
77 void Field_Inv8(volatile uint8 *reg, uint8 msk);
78 void Field_Inv16(volatile uint16 *reg, uint16 msk);
79 void Field_Inv32(volatile uint32 *reg, uint32 msk);
80 void Field_Clr8(volatile uint8 *reg, uint8 msk);
81 void Field_Clr16(volatile uint16 *reg, uint16 msk);
82 void Field_Clr32(volatile uint32 *reg, uint32 msk);
83 uint8 u1_Field_Rd8(const volatile uint8 *reg, uint8 pos, uint8 msk);
84 uint8 u1_Field_Rd16(const volatile uint16 *reg, uint16 pos, uint16 msk);
85 uint8 u1_Field_Rd32(const volatile uint32 *reg, uint32 pos, uint32 msk);
86 uint8 u8_Field_Rd8(const volatile uint8 *reg, uint8 pos, uint8 msk);
87 uint8 u8_Field_Rd16(const volatile uint16 *reg, uint16 pos, uint16 msk);
88 uint8 u8_Field_Rd32(const volatile uint32 *reg, uint32 pos, uint32 msk);
89 uint16 u16_Field_Rd16(const volatile uint16 *reg, uint16 pos, uint16 msk);
90 uint16 u16_Field_Rd32(const volatile uint32 *reg, uint32 pos, uint32 msk);
91 uint32 u32_Field_Rd32(const volatile uint32 *reg, uint32 pos, uint32 msk);
92 
93 #else /* #ifdef TESTING */
94 
95 /*******************************************************************************
96 ** Prototypes **
97 *******************************************************************************/
98 /* macros to access a whole register */
99 /* set a 8-bit register directly, write (no read-mod-write) */
107 INLINE void Field_Wrt8all(volatile uint8 *reg, uint8 val);
108 
109 
110 /* macros to access bit fields of a register */
111 /* set a bit field directly, write (no read-mod-write) */
121 INLINE void Field_Wrt8(volatile uint8 *reg, uint8 pos, uint8 msk, uint8 val);
122 
132 INLINE void Field_Wrt16(volatile uint16 *reg, uint16 pos, uint16 msk, uint16 val);
133 
143 INLINE void Field_Wrt32(volatile uint32 *reg, uint32 pos, uint32 msk, uint32 val);
144 
145 /* set a bitfield by using read-mod-write */
155 INLINE void Field_Mod8(volatile uint8 *reg, uint8 pos, uint8 msk, uint8 val);
156 
166 INLINE void Field_Mod16(volatile uint16 *reg, uint16 pos, uint16 msk, uint16 val);
167 
177 INLINE void Field_Mod32(volatile uint32 *reg, uint32 pos, uint32 msk, uint32 val);
178 
179 /* invert the setting of a bitfield, read-inv-write */
187 INLINE void Field_Inv8(volatile uint8 *reg, uint8 msk);
188 
196 INLINE void Field_Inv16(volatile uint16 *reg, uint16 msk);
197 
205 INLINE void Field_Inv32(volatile uint32 *reg, uint32 msk);
206 
207 /* write a bitfield to '0', read-write0 */
215 INLINE void Field_Clr8(volatile uint8 *reg, uint8 msk);
216 
217 /* write a bitfield to '0', read-write0 */
225 INLINE void Field_Clr16(volatile uint16 *reg, uint16 msk);
226 
227 /* write a bitfield to '0', read-write0 */
235 INLINE void Field_Clr32(volatile uint32 *reg, uint32 msk);
236 
237 /* read bitffield */
238 
247 INLINE uint8 u1_Field_Rd8(const volatile uint8 *reg, uint8 pos, uint8 msk);
248 
257 INLINE uint8 u1_Field_Rd16(const volatile uint16 *reg, uint16 pos, uint16 msk);
258 
267 INLINE uint8 u1_Field_Rd32(const volatile uint32 *reg, uint32 pos, uint32 msk);
268 
277 INLINE uint8 u8_Field_Rd8(const volatile uint8 *reg, uint8 pos, uint8 msk);
278 
287 INLINE uint8 u8_Field_Rd16(const volatile uint16 *reg, uint16 pos, uint16 msk);
288 
297 INLINE uint8 u8_Field_Rd32(const volatile uint32 *reg, uint32 pos, uint32 msk);
298 
307 INLINE uint16 u16_Field_Rd16(const volatile uint16 *reg, uint16 pos, uint16 msk);
308 
317 INLINE uint16 u16_Field_Rd32(const volatile uint32 *reg, uint32 pos, uint32 msk);
318 
327 INLINE uint32 u32_Field_Rd32(const volatile uint32 *reg, uint32 pos, uint32 msk);
328 
329 /* Macro function body declarations */
330 
331 INLINE void Field_Wrt8all(volatile uint8 *reg, uint8 val)
332 {
333  (*reg = val);
334 }
335 
336 INLINE void Field_Wrt8(volatile uint8 *reg, uint8 pos, uint8 msk, uint8 val)
337 {
338  (*reg = (uint8)((uint32)val << pos) & (uint8)msk);
339 }
340 
341 INLINE void Field_Wrt16(volatile uint16 *reg, uint16 pos, uint16 msk, uint16 val)
342 {
343  (*reg = (uint16)((uint32)val << pos) & (uint16)msk);
344 }
345 
346 INLINE void Field_Wrt32(volatile uint32 *reg, uint32 pos, uint32 msk, uint32 val)
347 {
348  (*reg = ((uint32)val << pos) & (uint32)msk);
349 }
350 
351 INLINE void Field_Mod8(volatile uint8 *reg, uint8 pos, uint8 msk, uint8 val)
352 {
353  (*reg = (*reg & (uint8)~msk) | (uint8)(((uint32)val << pos) & (uint8)msk));
354 }
355 
356 INLINE void Field_Mod16(volatile uint16 *reg, uint16 pos, uint16 msk, uint16 val)
357 {
358  (*reg = (*reg & (uint16)~msk) | (uint16)(((uint32)val << pos) & (uint16)msk));
359 }
360 
361 INLINE void Field_Mod32(volatile uint32 *reg, uint32 pos, uint32 msk, uint32 val)
362 {
363  (*reg = (*reg & (uint32)~msk) | (uint32)(((uint32)val << pos) & (uint32)msk));
364 }
365 
366 INLINE void Field_Inv8(volatile uint8 *reg, uint8 msk)
367 {
368  (*reg = ((uint8) * reg ^ (uint8)msk));
369 }
370 
371 INLINE void Field_Inv16(volatile uint16 *reg, uint16 msk)
372 {
373  (*reg = ((uint16) * reg ^ (uint16)msk));
374 }
375 
376 INLINE void Field_Inv32(volatile uint32 *reg, uint32 msk)
377 {
378  (*reg = ((uint32) * reg ^ (uint32)msk));
379 }
380 
381 INLINE void Field_Clr8(volatile uint8 *reg, uint8 msk)
382 {
383  (*reg = (*reg & (uint8)~msk));
384 }
385 
386 INLINE void Field_Clr16(volatile uint16 *reg, uint16 msk)
387 {
388  (*reg = (*reg & (uint16)~msk));
389 }
390 
391 INLINE void Field_Clr32(volatile uint32 *reg, uint32 msk)
392 {
393  (*reg = (*reg & (uint32)~msk));
394 }
395 
396 INLINE uint8 u1_Field_Rd8(const volatile uint8 *reg, uint8 pos, uint8 msk)
397 {
398  return (((*reg & msk) >> pos) & 1u);
399 }
400 
401 INLINE uint8 u1_Field_Rd16(const volatile uint16 *reg, uint16 pos, uint16 msk)
402 {
403  return ((uint8)((*reg & msk) >> pos) & 1u);
404 }
405 
406 INLINE uint8 u1_Field_Rd32(const volatile uint32 *reg, uint32 pos, uint32 msk)
407 {
408  return ((uint8)((*reg & msk) >> pos) & 1u);
409 }
410 
411 INLINE uint8 u8_Field_Rd8(const volatile uint8 *reg, uint8 pos, uint8 msk)
412 {
413  return ((*reg & msk) >> pos);
414 }
415 
416 INLINE uint8 u8_Field_Rd16(const volatile uint16 *reg, uint16 pos, uint16 msk)
417 {
418  return ((uint8)((*reg & msk) >> pos));
419 }
420 
421 INLINE uint8 u8_Field_Rd32(const volatile uint32 *reg, uint32 pos, uint32 msk)
422 {
423  return ((uint8)((*reg & msk) >> pos));
424 }
425 
426 INLINE uint16 u16_Field_Rd16(const volatile uint16 *reg, uint16 pos, uint16 msk)
427 {
428  return ((*reg & msk) >> pos);
429 }
430 
431 INLINE uint16 u16_Field_Rd32(const volatile uint32 *reg, uint32 pos, uint32 msk)
432 {
433  return ((uint16)((*reg & msk) >> pos));
434 }
435 
436 INLINE uint32 u32_Field_Rd32(const volatile uint32 *reg, uint32 pos, uint32 msk)
437 {
438  return ((uint32)((*reg & msk) >> pos));
439 }
440 #endif /* TESTING */
441 
442 
443 #endif
Field_Inv16
INLINE void Field_Inv16(volatile uint16 *reg, uint16 msk)
This function inverts a bit field in a 16-bit register.
Definition: sfr_access.h:366
Field_Mod16
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:351
u16_Field_Rd32
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:426
types.h
General type declarations.
u8_Field_Rd16
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:411
u16_Field_Rd16
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:421
Field_Wrt8all
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:326
INLINE
#define INLINE
Definition: types.h:134
Field_Mod8
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:346
u1_Field_Rd8
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:391
Field_Mod32
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:356
Field_Clr16
INLINE void Field_Clr16(volatile uint16 *reg, uint16 msk)
This function clears a bit field in a 16-bit register.
Definition: sfr_access.h:381
u1_Field_Rd32
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:401
uint16
unsigned short uint16
16 bit unsigned value
Definition: types.h:140
u32_Field_Rd32
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:431
uint8
unsigned char uint8
8 bit unsigned value
Definition: types.h:139
Field_Wrt32
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:341
u8_Field_Rd32
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:416
u8_Field_Rd8
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:406
uint32
unsigned int uint32
32 bit unsigned value
Definition: types.h:141
u1_Field_Rd16
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:396
Field_Inv8
INLINE void Field_Inv8(volatile uint8 *reg, uint8 msk)
This function inverts a bit field in a 8-bit register.
Definition: sfr_access.h:361
Field_Clr32
INLINE void Field_Clr32(volatile uint32 *reg, uint32 msk)
This function clears a bit field in a 32-bit register.
Definition: sfr_access.h:386
Field_Wrt16
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:336
Field_Wrt8
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:331
Field_Inv32
INLINE void Field_Inv32(volatile uint32 *reg, uint32 msk)
This function inverts a bit field in a 32-bit register.
Definition: sfr_access.h:371
Field_Clr8
INLINE void Field_Clr8(volatile uint8 *reg, uint8 msk)
This function clears a bit field in a 8-bit register.
Definition: sfr_access.h:376