Bit access macros with bit-banding support for Cortex-M based CPUs. More...
Bit access macros with bit-banding support for Cortex-M based CPUs.
Definition in file bit.h.
#include <stdint.h>
#include "cpu.h"
Go to the source code of this file.
#define | CPU_HAS_BITBAND 1 || 0 (1 if CPU implements bit-banding, 0 if not) |
Flag to check if the CPU has hardware bit band support. | |
#define | CPU_HAS_SRAM_BITBAND 1 || 0 |
Flag to check if bit-banding is supported for all of SRAM. More... | |
Bit manipulation functions | |
static volatile void * | bitband_addr (volatile void *ptr, uintptr_t bit) |
Convert bit band region address and bit number to bit band alias address. More... | |
static void | bit_set32 (volatile uint32_t *ptr, uint8_t bit) |
Set a single bit in the 32 bit word pointed to by ptr . More... | |
static void | bit_set16 (volatile uint16_t *ptr, uint8_t bit) |
Set a single bit in the 16 bit word pointed to by ptr . More... | |
static void | bit_set8 (volatile uint8_t *ptr, uint8_t bit) |
Set a single bit in the 8 bit byte pointed to by ptr . More... | |
static void | bit_clear32 (volatile uint32_t *ptr, uint8_t bit) |
Clear a single bit in the 32 bit word pointed to by ptr . More... | |
static void | bit_clear16 (volatile uint16_t *ptr, uint8_t bit) |
Clear a single bit in the 16 bit word pointed to by ptr . More... | |
static void | bit_clear8 (volatile uint8_t *ptr, uint8_t bit) |
Clear a single bit in the 8 bit byte pointed to by ptr . More... | |
#define CPU_HAS_SRAM_BITBAND 1 || 0 |
Flag to check if bit-banding is supported for all of SRAM.
Bit-banding in SRAM is only supported (if available at all) for a 1 MiB region in the address space. If not all of SRAM is mapped there, it is safest to not use bit-banding at all. Luckily, only few vendors decided to implement partially broken bit-banding.
1 | All of SRAM is bit-banding capable |
0 | (At least one part) SRAM is not bit-banding capable |
|
inlinestatic |
Clear a single bit in the 16 bit word pointed to by ptr
.
The effect is the same as for the following snippet:
There is a read-modify-write cycle occurring within the core, but this cycle is atomic and can not be disrupted by IRQs
[in] | ptr | pointer to target word |
[in] | bit | bit number within the word |
|
inlinestatic |
Clear a single bit in the 32 bit word pointed to by ptr
.
The effect is the same as for the following snippet:
There is a read-modify-write cycle occurring within the core, but this cycle is atomic and can not be disrupted by IRQs
[in] | ptr | pointer to target word |
[in] | bit | bit number within the word |
|
inlinestatic |
Clear a single bit in the 8 bit byte pointed to by ptr
.
The effect is the same as for the following snippet:
There is a read-modify-write cycle occurring within the core, but this cycle is atomic and can not be disrupted by IRQs
[in] | ptr | pointer to target byte |
[in] | bit | bit number within the byte |
|
inlinestatic |
Set a single bit in the 16 bit word pointed to by ptr
.
The effect is the same as for the following snippet:
There is a read-modify-write cycle occurring within the core, but this cycle is atomic and can not be disrupted by IRQs
[in] | ptr | pointer to target word |
[in] | bit | bit number within the word |
|
inlinestatic |
Set a single bit in the 32 bit word pointed to by ptr
.
The effect is the same as for the following snippet:
There is a read-modify-write cycle occurring within the core, but this cycle is atomic and can not be disrupted by IRQs
[in] | ptr | pointer to target word |
[in] | bit | bit number within the word |
|
inlinestatic |
Set a single bit in the 8 bit byte pointed to by ptr
.
The effect is the same as for the following snippet:
There is a read-modify-write cycle occurring within the core, but this cycle is atomic and can not be disrupted by IRQs
[in] | ptr | pointer to target byte |
[in] | bit | bit number within the byte |
|
inlinestatic |