一、别名区
处理器存储器映射包括两个bit-banding 区域。它们分别为SRAM 和外设存储区域中的最低的1MB。这些bit-band 区域将存储器别名区的一个字映射为bit-band 区的一个位。
Cortex-M3 存储器映射有2 个32MB 别名区,它们被映射为两个1MB 的bit-band 区。
> 对 32MB SRAM 别名区的访问映射为对1MB SRAMbit-band 区的访问。
> 对 32MB 外设别名区的访问映射为对1MB 外设bit-band 区的访问。
映射公式显示如何将别名区中的字与 bit-band 区中的对应位或目标位关联。映射公式如下:
bit_word_offset=(byte_offset×32)+(bit_number×4)
bit_word_addr=bit_band_base+bit_word_offset
这里:
>Bit_word_offset 为bit-band 存储区中的目标位的位置。
>Bit_word_addr 为别名存储区中映射为目标位的字的地址。
>Bit_band_base 是别名区的开始地址。
>Bit_offset 为bit-band 区中包含目标位的字节的编号。
>Bit_number 为目标位的位位置(0-7)。
图1 显示了SRAM bit-band 别名区和SRAMbit-band 区之间的bit-band 映射的例子:
地址 0x23FFFFE0 的别名字映射为0x200FFFFC 的bit-band 字节的位0:
0x23FFFFE0=0x22000000+(0xFFFFF*32)+0*4
地址0x23FFFFEC 的别名字映射为0x200FFFFC 的bit-band 字节的位7:
0x23FFFFEC=0x22000000+(0xFFFFF*32)+7*4
地址0x22000000 的别名字映射为0x20000000 的bit-band 字节的位0:
0x22000000=0x22000000+(0*32)+0*4
地址0x220001C 的别名字映射为0x20000000 的bit-band 字节的位0:
0x2200001C=0x22000000+(0*32)+7*4
图1:32M别名区与bit-band映射关系
二、直接访问别名区
向别名区写入一个字与在 bit-band 区的目标位执行读-修改-写操作具有相同的作用。写入别名区的字的位 0 决定了写入bit-band 区的目标位的值。将位0 为1 的值写入别名区表示向bit-band 位写入1,将位0 为0 的值写入别名区表示向bit-band 位写入0。
别名字的位[31:1]在bit-band 位上不起作用。写入0x01 与写入0xFF 的效果相同。写入0x00 与写入0x0E 的效果相同。
读别名区的一个字返回 0x01 或0x00。0x01 表示bit-band 区中的目标位置位。0x00 表示目标位清零。位[31:1]将为0。
注:采用大端格式时,对bit-band 别名区的访问必须以字节方式。否则访问值不可预知。