diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2023-03-22 09:27:25 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2023-06-14 13:58:42 +0200 |
commit | 83fd13972ac9c43875250decf497ce30151f7157 (patch) | |
tree | 2c299341781b28bb40e552132b2aba3cf369030c /rtemsspec | |
parent | 55ca4c9cd04329b9547427b31f2e75b64551bfae (diff) |
interface: Add register set macros
Mask the value in the bit field macros.
Diffstat (limited to 'rtemsspec')
-rw-r--r-- | rtemsspec/interface.py | 11 | ||||
-rw-r--r-- | 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 ) /** @} */ |