| |||
| Home > Programmers Model > Bit-banding | |||
Bit-banding maps a complete word of memory onto a single bit
in the bit-band region. For example, writing to one of the alias
words sets or clears the corresponding bit in the bit-band region.
This enables every individual bit in the bit-banding region to be
directly accessible from a word-aligned address using a single LDR instruction.
It also enables individual bits to be toggled without performing
a read-modify-write sequence of instructions.
The processor memory map includes two bit-band regions. These occupy the lowest 1MB of the SRAM and Peripheral memory regions respectively. These bit-band regions map each word in an alias region of memory to a bit in a bit-band region of memory.
The System bus interface contains logic that controls bit-band accesses as follows:
It remaps bit-band alias addresses to the bit-band region.
For reads, it extracts the requested bit from the read byte, and returns this in the Least Significant Bit (LSB) of the read data returned to the core.
For writes, it converts the write to an atomic read-modify-write operation.
The processor does not stall during bit-band operations unless it attempts to access the System bus while the bit-band operation is being carried out.
The memory map has two 32-MB alias regions that map to two 1-MB bit-band regions:
Accesses to the 32-MB SRAM alias region map to the 1-MB SRAM bit-band region.
Accesses to the 32-MB peripheral alias region map to the 1-MB peripheral bit-band region.
A mapping formula shows how to reference each word in the alias region to a corresponding bit, or target bit, in the bit-band region. The mapping formula is:
bit_word_offset = (byte_offset x 32) + (bit_number × 4)
bit_word_addr = bit_band_base + bit_word_offset
where:
bit_word_offset is
the position of the target bit in the bit-band memory region.
bit_word_addr is the address
of the word in the alias memory region that maps to the targeted
bit.
bit_band_base is the starting
address of the alias region.
byte_offset is the number of
the byte in the bit-band region that contains the targeted bit.
bit_number is the bit position,
0 to 7, of the targeted bit.
Figure 3.2 shows examples of bit-band mapping between the SRAM bit-band alias region and the SRAM bit-band region:
The alias word at 0x23FFFFE0 maps
to bit [0] of the bit-band byte at 0x200FFFFF: 0x23FFFFE0 = 0x22000000 +
(0xFFFFF*32) + 0*4.
The alias word at 0x23FFFFFC maps
to bit [7] of the bit-band byte at 0x200FFFFF: 0x23FFFFFC = 0x22000000 +
(0xFFFFF*32) + 7*4.
The alias word at 0x22000000 maps
to bit [0] of the bit-band byte at 0x20000000: 0x22000000 = 0x22000000 +
(0*32) + 0*4.
The alias word at 0x2200001C maps
to bit [7] of the bit-band byte at 0x20000000: 0x2200001C = 0x22000000 +
(0*32) + 7*4.