BUS - Bitfield Read/Write#

BUS register and RAM bit-field read/write API.

BUS register and RAM bit/field read/write API.

API to perform field set/clear/write/read access to RAM and peripheral's registers.

API to perform bit-band and field set/clear access to RAM and peripherals.

Functions#

void
sl_hal_bus_ram_write_bit(volatile uint32_t *addr, uint32_t bit, uint32_t val)

Perform a single-bit write operation on a 32-bit word in RAM.

unsigned int
sl_hal_bus_ram_read_bit(volatile const uint32_t *addr, uint32_t bit)

Perform a single-bit read operation on a 32-bit word in RAM.

void
sl_hal_bus_reg_write_bit(volatile uint32_t *addr, uint32_t bit, uint32_t val)

Perform a single-bit atomic write operation on a peripheral register.

unsigned int
sl_hal_bus_reg_read_bit(volatile const uint32_t *addr, uint32_t bit)

Perform a single-bit atomic read operation on a peripheral register.

void
sl_hal_bus_reg_set_mask(volatile uint32_t *addr, uint32_t mask)

Perform an atomic masked set operation on a peripheral register address.

void
sl_hal_bus_reg_clear_mask(volatile uint32_t *addr, uint32_t mask)

Perform an atomic masked clear operation on the peripheral register address.

void
sl_hal_bus_reg_write_mask(volatile uint32_t *addr, uint32_t mask, uint32_t val)

Perform peripheral register masked write.

uint32_t
sl_hal_bus_reg_read_mask(volatile const uint32_t *addr, uint32_t mask)

Perform a peripheral register masked read.

void
BUS_RamBitWrite(volatile uint32_t *addr, unsigned int bit, unsigned int val)

Perform a single-bit write operation on a 32-bit word in RAM.

unsigned int
BUS_RamBitRead(volatile const uint32_t *addr, unsigned int bit)

Perform a single-bit read operation on a 32-bit word in RAM.

void
BUS_RegBitWrite(volatile uint32_t *addr, unsigned int bit, unsigned int val)

Perform a single-bit write operation on a peripheral register.

unsigned int
BUS_RegBitRead(volatile const uint32_t *addr, unsigned int bit)

Perform a single-bit read operation on a peripheral register.

void
BUS_RegMaskedSet(volatile uint32_t *addr, uint32_t mask)

Perform a masked set operation on a peripheral register address.

void
BUS_RegMaskedClear(volatile uint32_t *addr, uint32_t mask)

Perform a masked clear operation on the peripheral register address.

void
BUS_RegMaskedWrite(volatile uint32_t *addr, uint32_t mask, uint32_t val)

Perform peripheral register masked write.

uint32_t
BUS_RegMaskedRead(volatile const uint32_t *addr, uint32_t mask)

Perform a peripheral register masked read.

Function Documentation#

sl_hal_bus_ram_write_bit#

void sl_hal_bus_ram_write_bit (volatile uint32_t * addr, uint32_t bit, uint32_t val)

Perform a single-bit write operation on a 32-bit word in RAM.

Parameters
[in]addr

An address of a 32-bit word in RAM.

[in]bit

A bit position to write, 0-31.

[in]val

A value to set bit to, 0 or 1.


Definition at line 61 of file platform/peripheral/inc/sl_hal_bus.h

sl_hal_bus_ram_read_bit#

unsigned int sl_hal_bus_ram_read_bit (volatile const uint32_t * addr, uint32_t bit)

Perform a single-bit read operation on a 32-bit word in RAM.

Parameters
[in]addr

RAM address.

[in]bit

A bit position to read, 0-31.

Returns

  • The requested bit shifted to bit position 0 in the return value.


Definition at line 82 of file platform/peripheral/inc/sl_hal_bus.h

sl_hal_bus_reg_write_bit#

void sl_hal_bus_reg_write_bit (volatile uint32_t * addr, uint32_t bit, uint32_t val)

Perform a single-bit atomic write operation on a peripheral register.

Parameters
[in]addr

A peripheral register address.

[in]bit

A bit position to write, 0-31.

[in]val

A value to set bit to, 0 or 1.

This function uses built-in hardware 4K-aliased addressing that allows to perform an atomic read-modify-write operation on a single register bit. See the reference manual for more details about alias addressing.


Definition at line 104 of file platform/peripheral/inc/sl_hal_bus.h

sl_hal_bus_reg_read_bit#

unsigned int sl_hal_bus_reg_read_bit (volatile const uint32_t * addr, uint32_t bit)

Perform a single-bit atomic read operation on a peripheral register.

Parameters
[in]addr

A peripheral register address.

[in]bit

A bit position to read, 0-31.

Returns

  • The requested bit shifted to bit position 0 in the return value.


Definition at line 137 of file platform/peripheral/inc/sl_hal_bus.h

sl_hal_bus_reg_set_mask#

void sl_hal_bus_reg_set_mask (volatile uint32_t * addr, uint32_t mask)

Perform an atomic masked set operation on a peripheral register address.

Parameters
[in]addr

A peripheral register address.

[in]mask

A mask to set.

A peripheral register masked set provides a set operation of a bit-mask in a peripheral register. All 1s in the mask are set to 1 in the register. All 0s in the mask are not changed in the register. RAMs and special peripherals are not supported.

Note

  • This function uses built-in hardware 4K-aliased addressing that allows to perform an atomic read-modify-write operation. See the reference manual for more details about alias addressing.


Definition at line 162 of file platform/peripheral/inc/sl_hal_bus.h

sl_hal_bus_reg_clear_mask#

void sl_hal_bus_reg_clear_mask (volatile uint32_t * addr, uint32_t mask)

Perform an atomic masked clear operation on the peripheral register address.

Parameters
[in]addr

A peripheral register address.

[in]mask

A mask to clear.

A peripheral register masked clear provides a clear operation of a bit-mask in a peripheral register. All 1s in the mask are set to 0 in the register. All 0s in the mask are not changed in the register. RAMs and special peripherals are not supported.

Note

  • This function uses built-in hardware 4K-aliased addressing that allows to perform an atomic read-modify-write operation. See the reference manual for more details about alias addressing.


Definition at line 196 of file platform/peripheral/inc/sl_hal_bus.h

sl_hal_bus_reg_write_mask#

void sl_hal_bus_reg_write_mask (volatile uint32_t * addr, uint32_t mask, uint32_t val)

Perform peripheral register masked write.

Parameters
[in]addr

A peripheral register address.

[in]mask

A peripheral register mask.

[in]val

A peripheral register value. The value must be shifted to the correct bit position in the register corresponding to the field defined by the mask parameter. The register value must be contained in the field defined by the mask parameter. The register value is masked to prevent involuntary spillage.

This function first reads the peripheral register and updates only bits that are set in the mask with content of val. Typically, the mask is a bit-field in the register and the value val is within the mask.

Note

  • The read-modify-write operation is executed in a critical section to guarantee atomicity. Note that atomicity can only be guaranteed if register is modified only by the core, and not by other peripherals (like DMA).


Definition at line 235 of file platform/peripheral/inc/sl_hal_bus.h

sl_hal_bus_reg_read_mask#

uint32_t sl_hal_bus_reg_read_mask (volatile const uint32_t * addr, uint32_t mask)

Perform a peripheral register masked read.

Parameters
[in]addr

A peripheral register address.

[in]mask

A peripheral register mask.

Read an unshifted and masked value from a peripheral register.

Note

  • This operation is not hardware accelerated.

Returns

  • An unshifted and masked register value.


Definition at line 262 of file platform/peripheral/inc/sl_hal_bus.h

BUS_RamBitWrite#

void BUS_RamBitWrite (volatile uint32_t * addr, unsigned int bit, unsigned int val)

Perform a single-bit write operation on a 32-bit word in RAM.

Parameters
[in]addr

An ddress of a 32-bit word in RAM.

[in]bit

A bit position to write, 0-31.

[in]val

A value to set bit to, 0 or 1.

This function uses Cortex-M bit-banding hardware to perform an atomic read-modify-write operation on a single bit write on a 32-bit word in RAM. See the reference manual for more details about bit-banding.

Note

  • This function is atomic on Cortex-M cores with bit-banding support. Bit- banding is a multi cycle read-modify-write bus operation. RAM bit-banding is performed using the memory alias region at BITBAND_RAM_BASE.


Definition at line 70 of file platform/emlib/inc/em_bus.h

BUS_RamBitRead#

unsigned int BUS_RamBitRead (volatile const uint32_t * addr, unsigned int bit)

Perform a single-bit read operation on a 32-bit word in RAM.

Parameters
[in]addr

RAM address.

[in]bit

A bit position to read, 0-31.

This function uses Cortex-M bit-banding hardware to perform an atomic read operation on a single register bit. See the reference manual for more details about bit-banding.

Note

  • This function is atomic on Cortex-M cores with bit-banding support. RAM bit-banding is performed using the memory alias region at BITBAND_RAM_BASE.

Returns

  • The requested bit shifted to bit position 0 in the return value.


Definition at line 108 of file platform/emlib/inc/em_bus.h

BUS_RegBitWrite#

void BUS_RegBitWrite (volatile uint32_t * addr, unsigned int bit, unsigned int val)

Perform a single-bit write operation on a peripheral register.

Parameters
[in]addr

A peripheral register address.

[in]bit

A bit position to write, 0-31.

[in]val

A value to set bit to, 0 or 1.

This function uses Cortex-M bit-banding hardware to perform an atomic read-modify-write operation on a single register bit. See the reference manual for more details about bit-banding.

Note

  • This function is atomic on Cortex-M cores with bit-banding support. Bit- banding is a multi cycle read-modify-write bus operation. Peripheral register bit-banding is performed using the memory alias region at BITBAND_PER_BASE.


Definition at line 141 of file platform/emlib/inc/em_bus.h

BUS_RegBitRead#

unsigned int BUS_RegBitRead (volatile const uint32_t * addr, unsigned int bit)

Perform a single-bit read operation on a peripheral register.

Parameters
[in]addr

A peripheral register address.

[in]bit

A bit position to read, 0-31.

This function uses Cortex-M bit-banding hardware to perform an atomic read operation on a single register bit. See the reference manual for more details about bit-banding.

Note

  • This function is atomic on Cortex-M cores with bit-banding support. Peripheral register bit-banding is performed using the memory alias region at BITBAND_PER_BASE.

Returns

  • The requested bit shifted to bit position 0 in the return value.


Definition at line 188 of file platform/emlib/inc/em_bus.h

BUS_RegMaskedSet#

void BUS_RegMaskedSet (volatile uint32_t * addr, uint32_t mask)

Perform a masked set operation on a peripheral register address.

Parameters
[in]addr

A peripheral register address.

[in]mask

A mask to set.

A peripheral register masked set provides a single-cycle and atomic set operation of a bit-mask in a peripheral register. All 1s in the mask are set to 1 in the register. All 0s in the mask are not changed in the register. RAMs and special peripherals are not supported. See the reference manual for more details about the peripheral register field set.

Note

  • This function is single-cycle and atomic on cores with peripheral bit set and clear support. It uses the memory alias region at PER_BITSET_MEM_BASE.


Definition at line 221 of file platform/emlib/inc/em_bus.h

BUS_RegMaskedClear#

void BUS_RegMaskedClear (volatile uint32_t * addr, uint32_t mask)

Perform a masked clear operation on the peripheral register address.

Parameters
[in]addr

A peripheral register address.

[in]mask

A mask to clear.

A peripheral register masked clear provides a single-cycle and atomic clear operation of a bit-mask in a peripheral register. All 1s in the mask are set to 0 in the register. All 0s in the mask are not changed in the register. RAMs and special peripherals are not supported. See the reference manual for more details about the peripheral register field clear.

Note

  • This function is single-cycle and atomic on cores with peripheral bit set and clear support. It uses the memory alias region at PER_BITCLR_MEM_BASE.


Definition at line 259 of file platform/emlib/inc/em_bus.h

BUS_RegMaskedWrite#

void BUS_RegMaskedWrite (volatile uint32_t * addr, uint32_t mask, uint32_t val)

Perform peripheral register masked write.

Parameters
[in]addr

A peripheral register address.

[in]mask

A peripheral register mask.

[in]val

A peripheral register value. The value must be shifted to the correct bit position in the register corresponding to the field defined by the mask parameter. The register value must be contained in the field defined by the mask parameter. The register value is masked to prevent involuntary spillage.

This function first reads the peripheral register and updates only bits that are set in the mask with content of val. Typically, the mask is a bit-field in the register and the value val is within the mask.

Note

  • The read-modify-write operation is executed in a critical section to guarantee atomicity. Note that atomicity can only be guaranteed if register is modified only by the core, and not by other peripherals (like DMA).


Definition at line 305 of file platform/emlib/inc/em_bus.h

BUS_RegMaskedRead#

uint32_t BUS_RegMaskedRead (volatile const uint32_t * addr, uint32_t mask)

Perform a peripheral register masked read.

Parameters
[in]addr

A peripheral register address.

[in]mask

A peripheral register mask.

Read an unshifted and masked value from a peripheral register.

Note

  • This operation is not hardware accelerated.

Returns

  • An unshifted and masked register value.


Definition at line 338 of file platform/emlib/inc/em_bus.h