[rtems-central commit] interface: Add register set macros

Sebastian Huber sebh at rtems.org
Mon Jun 26 19:05:41 UTC 2023


Module:    rtems-central
Branch:    master
Commit:    83fd13972ac9c43875250decf497ce30151f7157
Changeset: http://git.rtems.org/rtems-central/commit/?id=83fd13972ac9c43875250decf497ce30151f7157

Author:    Sebastian Huber <sebastian.huber at embedded-brains.de>
Date:      Wed Mar 22 09:27:25 2023 +0100

interface: Add register set macros

Mask the value in the bit field macros.

---

 rtemsspec/interface.py            | 11 +++++--
 rtemsspec/tests/test_interface.py | 60 +++++++++++++++++++++++++++++++--------
 2 files changed, 56 insertions(+), 15 deletions(-)

diff --git a/rtemsspec/interface.py b/rtemsspec/interface.py
index f67b80e3..ac124a68 100644
--- a/rtemsspec/interface.py
+++ b/rtemsspec/interface.py
@@ -643,9 +643,14 @@ class Node:
                     f"#define {base}_SHIFT {start}",
                     f"#define {base}_MASK {mask:#x}{sfx}",
                     f"#define {base}_GET( _reg ) \\",
-                    f"  ( ( ( _reg ) & {base}_MASK ) >> {base}_SHIFT )",
-                    f"#define {base}( _val ) \\",
-                    f"  ( ( _val ) << {base}_SHIFT )"
+                    f"  ( ( ( _reg ) & {base}_MASK ) >> \\",
+                    f"    {base}_SHIFT )",
+                    f"#define {base}_SET( _reg, _val ) \\",
+                    f"  ( ( ( _reg ) & ~{base}_MASK ) | \\",
+                    f"    ( ( ( _val ) << {base}_SHIFT ) & \\",
+                    f"      {base}_MASK ) )", f"#define {base}( _val ) \\",
+                    f"  ( ( ( _val ) << {base}_SHIFT ) & \\",
+                    f"    {base}_MASK )"
                 ])
         return lines
 
diff --git a/rtemsspec/tests/test_interface.py b/rtemsspec/tests/test_interface.py
index f7e3d329..3cfc16ad 100644
--- a/rtemsspec/tests/test_interface.py
+++ b/rtemsspec/tests/test_interface.py
@@ -278,9 +278,15 @@ void Function6( int Param0 );
 #define IRQAMP_ITCNT_TCNT_SHIFT 0
 #define IRQAMP_ITCNT_TCNT_MASK 0xffffffffU
 #define IRQAMP_ITCNT_TCNT_GET( _reg ) \\
-  ( ( ( _reg ) & IRQAMP_ITCNT_TCNT_MASK ) >> IRQAMP_ITCNT_TCNT_SHIFT )
+  ( ( ( _reg ) & IRQAMP_ITCNT_TCNT_MASK ) >> \\
+    IRQAMP_ITCNT_TCNT_SHIFT )
+#define IRQAMP_ITCNT_TCNT_SET( _reg, _val ) \\
+  ( ( ( _reg ) & ~IRQAMP_ITCNT_TCNT_MASK ) | \\
+    ( ( ( _val ) << IRQAMP_ITCNT_TCNT_SHIFT ) & \\
+      IRQAMP_ITCNT_TCNT_MASK ) )
 #define IRQAMP_ITCNT_TCNT( _val ) \\
-  ( ( _val ) << IRQAMP_ITCNT_TCNT_SHIFT )
+  ( ( ( _val ) << IRQAMP_ITCNT_TCNT_SHIFT ) & \\
+    IRQAMP_ITCNT_TCNT_MASK )
 
 /** @} */
 
@@ -296,9 +302,15 @@ void Function6( int Param0 );
 #define IRQAMP_ITSTMPC_TSTAMP_SHIFT 27
 #define IRQAMP_ITSTMPC_TSTAMP_MASK 0xf8000000U
 #define IRQAMP_ITSTMPC_TSTAMP_GET( _reg ) \\
-  ( ( ( _reg ) & IRQAMP_ITSTMPC_TSTAMP_MASK ) >> IRQAMP_ITSTMPC_TSTAMP_SHIFT )
+  ( ( ( _reg ) & IRQAMP_ITSTMPC_TSTAMP_MASK ) >> \\
+    IRQAMP_ITSTMPC_TSTAMP_SHIFT )
+#define IRQAMP_ITSTMPC_TSTAMP_SET( _reg, _val ) \\
+  ( ( ( _reg ) & ~IRQAMP_ITSTMPC_TSTAMP_MASK ) | \\
+    ( ( ( _val ) << IRQAMP_ITSTMPC_TSTAMP_SHIFT ) & \\
+      IRQAMP_ITSTMPC_TSTAMP_MASK ) )
 #define IRQAMP_ITSTMPC_TSTAMP( _val ) \\
-  ( ( _val ) << IRQAMP_ITSTMPC_TSTAMP_SHIFT )
+  ( ( ( _val ) << IRQAMP_ITSTMPC_TSTAMP_SHIFT ) & \\
+    IRQAMP_ITSTMPC_TSTAMP_MASK )
 
 #define IRQAMP_ITSTMPC_S1 0x4000000U
 
@@ -309,9 +321,15 @@ void Function6( int Param0 );
 #define IRQAMP_ITSTMPC_TSISEL_SHIFT 0
 #define IRQAMP_ITSTMPC_TSISEL_MASK 0x1fU
 #define IRQAMP_ITSTMPC_TSISEL_GET( _reg ) \\
-  ( ( ( _reg ) & IRQAMP_ITSTMPC_TSISEL_MASK ) >> IRQAMP_ITSTMPC_TSISEL_SHIFT )
+  ( ( ( _reg ) & IRQAMP_ITSTMPC_TSISEL_MASK ) >> \\
+    IRQAMP_ITSTMPC_TSISEL_SHIFT )
+#define IRQAMP_ITSTMPC_TSISEL_SET( _reg, _val ) \\
+  ( ( ( _reg ) & ~IRQAMP_ITSTMPC_TSISEL_MASK ) | \\
+    ( ( ( _val ) << IRQAMP_ITSTMPC_TSISEL_SHIFT ) & \\
+      IRQAMP_ITSTMPC_TSISEL_MASK ) )
 #define IRQAMP_ITSTMPC_TSISEL( _val ) \\
-  ( ( _val ) << IRQAMP_ITSTMPC_TSISEL_SHIFT )
+  ( ( ( _val ) << IRQAMP_ITSTMPC_TSISEL_SHIFT ) & \\
+    IRQAMP_ITSTMPC_TSISEL_MASK )
 
 /** @} */
 
@@ -327,9 +345,15 @@ void Function6( int Param0 );
 #define IRQAMP_ITSTMPAS_TASSERTION_SHIFT 0
 #define IRQAMP_ITSTMPAS_TASSERTION_MASK 0xffffffffU
 #define IRQAMP_ITSTMPAS_TASSERTION_GET( _reg ) \\
-  ( ( ( _reg ) & IRQAMP_ITSTMPAS_TASSERTION_MASK ) >> IRQAMP_ITSTMPAS_TASSERTION_SHIFT )
+  ( ( ( _reg ) & IRQAMP_ITSTMPAS_TASSERTION_MASK ) >> \\
+    IRQAMP_ITSTMPAS_TASSERTION_SHIFT )
+#define IRQAMP_ITSTMPAS_TASSERTION_SET( _reg, _val ) \\
+  ( ( ( _reg ) & ~IRQAMP_ITSTMPAS_TASSERTION_MASK ) | \\
+    ( ( ( _val ) << IRQAMP_ITSTMPAS_TASSERTION_SHIFT ) & \\
+      IRQAMP_ITSTMPAS_TASSERTION_MASK ) )
 #define IRQAMP_ITSTMPAS_TASSERTION( _val ) \\
-  ( ( _val ) << IRQAMP_ITSTMPAS_TASSERTION_SHIFT )
+  ( ( ( _val ) << IRQAMP_ITSTMPAS_TASSERTION_SHIFT ) & \\
+    IRQAMP_ITSTMPAS_TASSERTION_MASK )
 
 /** @} */
 
@@ -345,9 +369,15 @@ void Function6( int Param0 );
 #define IRQAMP_ITSTMPAC_TACKNOWLEDGE_SHIFT 0
 #define IRQAMP_ITSTMPAC_TACKNOWLEDGE_MASK 0xffffffffU
 #define IRQAMP_ITSTMPAC_TACKNOWLEDGE_GET( _reg ) \\
-  ( ( ( _reg ) & IRQAMP_ITSTMPAC_TACKNOWLEDGE_MASK ) >> IRQAMP_ITSTMPAC_TACKNOWLEDGE_SHIFT )
+  ( ( ( _reg ) & IRQAMP_ITSTMPAC_TACKNOWLEDGE_MASK ) >> \\
+    IRQAMP_ITSTMPAC_TACKNOWLEDGE_SHIFT )
+#define IRQAMP_ITSTMPAC_TACKNOWLEDGE_SET( _reg, _val ) \\
+  ( ( ( _reg ) & ~IRQAMP_ITSTMPAC_TACKNOWLEDGE_MASK ) | \\
+    ( ( ( _val ) << IRQAMP_ITSTMPAC_TACKNOWLEDGE_SHIFT ) & \\
+      IRQAMP_ITSTMPAC_TACKNOWLEDGE_MASK ) )
 #define IRQAMP_ITSTMPAC_TACKNOWLEDGE( _val ) \\
-  ( ( _val ) << IRQAMP_ITSTMPAC_TACKNOWLEDGE_SHIFT )
+  ( ( ( _val ) << IRQAMP_ITSTMPAC_TACKNOWLEDGE_SHIFT ) & \\
+    IRQAMP_ITSTMPAC_TACKNOWLEDGE_MASK )
 
 /** @} */
 
@@ -400,9 +430,15 @@ typedef struct irqamp_timestamp {
 #define IRQAMP_ILEVEL_IL_15_1_SHIFT 1
 #define IRQAMP_ILEVEL_IL_15_1_MASK 0xfffeU
 #define IRQAMP_ILEVEL_IL_15_1_GET( _reg ) \\
-  ( ( ( _reg ) & IRQAMP_ILEVEL_IL_15_1_MASK ) >> IRQAMP_ILEVEL_IL_15_1_SHIFT )
+  ( ( ( _reg ) & IRQAMP_ILEVEL_IL_15_1_MASK ) >> \\
+    IRQAMP_ILEVEL_IL_15_1_SHIFT )
+#define IRQAMP_ILEVEL_IL_15_1_SET( _reg, _val ) \\
+  ( ( ( _reg ) & ~IRQAMP_ILEVEL_IL_15_1_MASK ) | \\
+    ( ( ( _val ) << IRQAMP_ILEVEL_IL_15_1_SHIFT ) & \\
+      IRQAMP_ILEVEL_IL_15_1_MASK ) )
 #define IRQAMP_ILEVEL_IL_15_1( _val ) \\
-  ( ( _val ) << IRQAMP_ILEVEL_IL_15_1_SHIFT )
+  ( ( ( _val ) << IRQAMP_ILEVEL_IL_15_1_SHIFT ) & \\
+    IRQAMP_ILEVEL_IL_15_1_MASK )
 
 /** @} */
 



More information about the vc mailing list