Loading...
Searching...
No Matches
L4drivers::Register_block< MAX_BITS, BLOCK > Class Template Reference

Handles a reference to a register block of the given maximum access width. More...

`#include <hw_register_block>`

Collaboration diagram for L4drivers::Register_block< MAX_BITS, BLOCK >:

## Public Member Functions

template<unsigned BITS>
Ro_register_tmpl< BITS, Block > | r (unsigned offset) const
| Read only access to register at offset offset.
Ro_register | operator[] (unsigned offset) const
| Read only access to register at offset offset.
template<unsigned BITS>
Register_tmpl< BITS, Block > | r (unsigned offset)
| Read/write access to register at offset offset.
Register | operator[] (unsigned offset)
| Read/write access to register at offset offset.

## Detailed Description

template<unsigned MAX_BITS, typename BLOCK = Register_block_tmpl< Register_block_base<MAX_BITS> >>
class L4drivers::Register_block< MAX_BITS, BLOCK >

Handles a reference to a register block of the given maximum access width.

Register block.

Template Parameters

  MAX_BITS | Maximum access width for the registers in this block.
  BLOCK | Type implementing the register accesses (read<>(), write<>(), modify<>(), set<>(), and clear<>()).

Provides access to registers in this block via r<WIDTH>() and operator[]().

Example usage:

void test()
{
// create a register block reference for max. 16bit accesses, using a
// MMIO register block implementation (at address 0x1000).
Hw::Register_block<16> regs = new Hw::Mmio_register_block<16>(0x1000);
// Alternatively it is allowed to use an implementation that allows
// wider access than actually needed.
Hw::Register_block<16> regs = new Hw::Mmio_register_block<32>(0x1000);
// read a 16bit register at offset 8byte
unsigned short x = regs.r<16>(8);
unsigned short x1 = regs[8]; // alternative
// read an 8bit register at offset 0byte
unsigned v = regs.r<8>(0);
// do a 16bit write to register at offset 2byte (four variants)
regs[2] = 22;
regs.r<16>(2) = 22;
regs[2].write(22);
regs.r<16>().write(22);
// do an 8bit write (two variants)
regs.r<8>(0) = 9;
regs.r<8>(0).write(9);
// do 16bit read-modify-write (two variants)
regs[4].modify(0xf, 3); // clear 4 lowest bits and set them to 3
regs.r<16>(4).modify(0xf, 3);
// do 8bit read-modify-write
regs.r<8>(0).modify(0xf, 3);
// fails to compile, because of too wide access
// (32 bit access but regs is Hw::Register_block<16>)
unsigned long v = regs.r<32>(4)
}

Definition at line 330 of file hw_register_block.

## Member Function Documentation

## operator[]() [1/2]

template<unsigned MAX_BITS, typename BLOCK = Register_block_tmpl< Register_block_base<MAX_BITS> >>

Register L4drivers::Register_block< MAX_BITS, BLOCK >::operator[] | ( | unsigned | offset | ) |

inline

Read/write access to register at offset offset.

Parameters

  offset | The offset of the register within the register file.

Returns
  register object allowing read and write access with width MAX_BITS.

Definition at line 385 of file hw_register_block.

References r().

Here is the call graph for this function:

## operator[]() [2/2]

template<unsigned MAX_BITS, typename BLOCK = Register_block_tmpl< Register_block_base<MAX_BITS> >>

Ro_register L4drivers::Register_block< MAX_BITS, BLOCK >::operator[] | ( | unsigned | offset | ) | const

inline

Read only access to register at offset offset.

Parameters

  offset | The offset of the register within the register file.

Returns
  register object allowing read only access with width MAX_BITS.

Definition at line 365 of file hw_register_block.

References r().

Here is the call graph for this function:

## r() [1/2]

template<unsigned MAX_BITS, typename BLOCK = Register_block_tmpl< Register_block_base<MAX_BITS> >>
template<unsigned BITS>

Register_tmpl< BITS, Block > L4drivers::Register_block< MAX_BITS, BLOCK >::r | ( | unsigned | offset | ) |

inline

Read/write access to register at offset offset.

Template Parameters

  BITS | the access width in bits for the register.

Parameters

  offset | The offset of the register within the register file.

Returns
  register object allowing read and write access with width BITS.

Definition at line 376 of file hw_register_block.

## r() [2/2]

template<unsigned MAX_BITS, typename BLOCK = Register_block_tmpl< Register_block_base<MAX_BITS> >>
template<unsigned BITS>

Ro_register_tmpl< BITS, Block > L4drivers::Register_block< MAX_BITS, BLOCK >::r | ( | unsigned | offset | ) | const

inline

Read only access to register at offset offset.

Template Parameters

  BITS | the access width in bits for the register.

Parameters

  offset | The offset of the register within the register file.

Returns
  register object allowing read only access with width BITS.

Definition at line 357 of file hw_register_block.

Referenced by operator[](), and operator[]().

Here is the caller graph for this function:

The documentation for this class was generated from the following file:

- pkg/drivers-frst/include/hw_register_block