summaryrefslogtreecommitdiff
path: root/rtemsspec
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2023-03-22 09:27:25 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2023-06-14 13:58:42 +0200
commit83fd13972ac9c43875250decf497ce30151f7157 (patch)
tree2c299341781b28bb40e552132b2aba3cf369030c /rtemsspec
parent55ca4c9cd04329b9547427b31f2e75b64551bfae (diff)
interface: Add register set macros
Mask the value in the bit field macros.
Diffstat (limited to 'rtemsspec')
-rw-r--r--rtemsspec/interface.py11
-rw-r--r--rtemsspec/tests/test_interface.py60
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 )
/** @} */