ra8-firmware 0.1.0
Bare-metal firmware for the Renesas RA8 family (RA8D2 / RA8P1)
Loading...
Searching...
No Matches
ra8_bit_constants.h File Reference

Named Bit Positions and Masks for Register Manipulation. More...

#include <stdint.h>
Include dependency graph for ra8_bit_constants.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Enumerations

enum  ra8_bit_position_t : uint8_t {
  k_ra8_bit_0 = 0U ,
  k_ra8_bit_1 = 1U ,
  k_ra8_bit_2 = 2U ,
  k_ra8_bit_3 = 3U ,
  k_ra8_bit_4 = 4U ,
  k_ra8_bit_5 = 5U ,
  k_ra8_bit_6 = 6U ,
  k_ra8_bit_7 = 7U ,
  k_ra8_bit_8 = 8U ,
  k_ra8_bit_9 = 9U ,
  k_ra8_bit_10 = 10U ,
  k_ra8_bit_11 = 11U ,
  k_ra8_bit_12 = 12U ,
  k_ra8_bit_13 = 13U ,
  k_ra8_bit_14 = 14U ,
  k_ra8_bit_15 = 15U ,
  k_ra8_bit_16 = 16U ,
  k_ra8_bit_17 = 17U ,
  k_ra8_bit_18 = 18U ,
  k_ra8_bit_19 = 19U ,
  k_ra8_bit_20 = 20U ,
  k_ra8_bit_21 = 21U ,
  k_ra8_bit_22 = 22U ,
  k_ra8_bit_23 = 23U ,
  k_ra8_bit_24 = 24U ,
  k_ra8_bit_25 = 25U ,
  k_ra8_bit_26 = 26U ,
  k_ra8_bit_27 = 27U ,
  k_ra8_bit_28 = 28U ,
  k_ra8_bit_29 = 29U ,
  k_ra8_bit_30 = 30U ,
  k_ra8_bit_31 = 31U
}
 Bit positions 0..31 as typed constants. More...
enum  ra8_byte_mask_t : uint16_t {
  k_ra8_mask_nibble = 0x000FU ,
  k_ra8_mask_byte = 0x00FFU ,
  k_ra8_mask_word = 0xFFFFU ,
  k_ra8_mask_lsn2 = 0x0003U ,
  k_ra8_mask_lsn3 = 0x0007U ,
  k_ra8_mask_lsn4 = 0x000FU ,
  k_ra8_mask_lsn5 = 0x001FU ,
  k_ra8_mask_lsn6 = 0x003FU ,
  k_ra8_mask_lsn7 = 0x007FU ,
  k_ra8_mask_lsn8 = 0x00FFU
}
 Byte-wide bit masks and positions for byte packing/unpacking. More...
enum  ra8_byte_count_t : uint8_t {
  k_ra8_bits_per_byte = 8U ,
  k_ra8_bits_per_u16 = 16U ,
  k_ra8_bits_per_u32 = 32U ,
  k_ra8_bits_per_u64 = 64U
}
 Bit counts per integral type. More...
enum  ra8_be_byte_idx_t : uint8_t {
  k_ra8_be_idx_hi32 = 0U ,
  k_ra8_be_idx_mh32 = 1U ,
  k_ra8_be_idx_ml32 = 2U ,
  k_ra8_be_idx_lo32 = 3U ,
  k_ra8_be_idx_hi16 = 0U ,
  k_ra8_be_idx_lo16 = 1U
}
 Byte indices when packing big-endian multi-byte values. More...

Detailed Description

Named Bit Positions and Masks for Register Manipulation.

Central home for bit-position constants used when poking hardware registers. Every bit shift and mask in the firmware should be expressed in terms of one of these enums rather than a raw integer literal. The clang-tidy rule readability-magic-numbers enforces this at commit time.

Why this exists

Without named constants, register writes look like:

reg->CR |= (1U << 7) | (3U << 3); // what bit? why 3?

With this header, they look like:

@ k_ra8_bit_3
RA8 bit 3.
@ k_ra8_bit_7
RA8 bit 7.
@ k_ra8_bit_1
RA8 bit 1.
@ k_ra8_mask_lsn2
Low 2-bit field mask.

The second version is searchable (grep k_ra8_bit_7 tells you every place bit 7 is touched), self-documenting, and compile-time type-safe.

Definition in file ra8_bit_constants.h.

Enumeration Type Documentation

◆ ra8_be_byte_idx_t

enum ra8_be_byte_idx_t : uint8_t

Byte indices when packing big-endian multi-byte values.

Use in place of raw literals when splitting a uint16_t or uint32_t into a byte buffer. Keeps code self-documenting and greppable.

buf[k_ra8_be_idx_hi16] = (uint8_t)(val >> k_ra8_bit_8);
buf[k_ra8_be_idx_lo16] = (uint8_t)(val & k_ra8_mask_byte);
@ k_ra8_bit_8
RA8 bit 8.
@ k_ra8_be_idx_hi16
Most significant byte of a 16-bit big-endian value.
@ k_ra8_be_idx_lo16
Least significant byte.
@ k_ra8_mask_byte
Low 8 bits mask.
Enumerator
k_ra8_be_idx_hi32 

Most significant byte of a 32-bit big-endian value.

k_ra8_be_idx_mh32 

Mid-high byte.

k_ra8_be_idx_ml32 

Mid-low byte.

k_ra8_be_idx_lo32 

Least significant byte.

k_ra8_be_idx_hi16 

Most significant byte of a 16-bit big-endian value.

k_ra8_be_idx_lo16 

Least significant byte.

Definition at line 144 of file ra8_bit_constants.h.

◆ ra8_bit_position_t

enum ra8_bit_position_t : uint8_t

Bit positions 0..31 as typed constants.

Use these with the shift operator to construct masks:

uint32_t mask = (1U << k_ra8_bit_5); // 0x20
@ k_ra8_bit_5
RA8 bit 5.

Every position is a distinct enumerator so the compiler's switch analysis and clang-tidy's naming rules both see them.

Enumerator
k_ra8_bit_0 

RA8 bit 0.

k_ra8_bit_1 

RA8 bit 1.

k_ra8_bit_2 

RA8 bit 2.

k_ra8_bit_3 

RA8 bit 3.

k_ra8_bit_4 

RA8 bit 4.

k_ra8_bit_5 

RA8 bit 5.

k_ra8_bit_6 

RA8 bit 6.

k_ra8_bit_7 

RA8 bit 7.

k_ra8_bit_8 

RA8 bit 8.

k_ra8_bit_9 

RA8 bit 9.

k_ra8_bit_10 

RA8 bit 10.

k_ra8_bit_11 

RA8 bit 11.

k_ra8_bit_12 

RA8 bit 12.

k_ra8_bit_13 

RA8 bit 13.

k_ra8_bit_14 

RA8 bit 14.

k_ra8_bit_15 

RA8 bit 15.

k_ra8_bit_16 

RA8 bit 16.

k_ra8_bit_17 

RA8 bit 17.

k_ra8_bit_18 

RA8 bit 18.

k_ra8_bit_19 

RA8 bit 19.

k_ra8_bit_20 

RA8 bit 20.

k_ra8_bit_21 

RA8 bit 21.

k_ra8_bit_22 

RA8 bit 22.

k_ra8_bit_23 

RA8 bit 23.

k_ra8_bit_24 

RA8 bit 24.

k_ra8_bit_25 

RA8 bit 25.

k_ra8_bit_26 

RA8 bit 26.

k_ra8_bit_27 

RA8 bit 27.

k_ra8_bit_28 

RA8 bit 28.

k_ra8_bit_29 

RA8 bit 29.

k_ra8_bit_30 

RA8 bit 30.

k_ra8_bit_31 

RA8 bit 31.

Definition at line 58 of file ra8_bit_constants.h.

◆ ra8_byte_count_t

enum ra8_byte_count_t : uint8_t

Bit counts per integral type.

Enumerator
k_ra8_bits_per_byte 

Bits in a byte.

k_ra8_bits_per_u16 

Bits in a uint16_t.

k_ra8_bits_per_u32 

Bits in a uint32_t.

k_ra8_bits_per_u64 

Bits in a uint64_t.

Definition at line 119 of file ra8_bit_constants.h.

◆ ra8_byte_mask_t

enum ra8_byte_mask_t : uint16_t

Byte-wide bit masks and positions for byte packing/unpacking.

Enumerator
k_ra8_mask_nibble 

Low 4 bits mask.

k_ra8_mask_byte 

Low 8 bits mask.

k_ra8_mask_word 

Low 16 bits mask.

k_ra8_mask_lsn2 

Low 2-bit field mask.

k_ra8_mask_lsn3 

Low 3-bit field mask.

k_ra8_mask_lsn4 

Low 4-bit field (alias).

k_ra8_mask_lsn5 

Low 5-bit field mask.

k_ra8_mask_lsn6 

Low 6-bit field mask.

k_ra8_mask_lsn7 

Low 7-bit field mask.

k_ra8_mask_lsn8 

Low 8-bit field (alias).

Definition at line 102 of file ra8_bit_constants.h.