|
: h" ^ T- d0 n9 |# Z 1 定义 首先需要明确下,位段,位带和别名区这三个名词 - [# T4 L% ]4 m; I; `/ k 名词定义 位段 ' d) ~) `! U+ o# S8 H. A8 s STM32用户参考手册使用的名字 位带 $ U0 {& ^* c% o* J, Y CortexM3参考手册使用的 + V( n' l# w7 s$ n- |+ j别名区 $ r2 E3 ~7 X- F* l) q8 ^. u ` 地址总线上用来位访问地址区域, 所以说,位段和位带是一个意思,是不同手册的不同叫法。 由上述的名词解释得知,位带功能并不是STM32独有的,是CortexM3的功能(CortexM4也有这样的功能)。MCS51有位操作,以一位(bit)为数据对象的操作,MCS51可以简单的将P1口的第2位独立操作:P1.2=0; P1.2=1 ;这样就把P1口的第三个脚(bit2)置0置1。而STM32的位段、位带别名区最重要的就为了实现这样的功能。 . l- D, e" X! H% Y! @3 s6 |2 位带操作( M9 m2 @9 _; ^" i 2.1 范围 位带是有范围的,并不是CortexM3全部地址空间都支持的。在 CM3中,有两个区中实现了位带。其中一个是 SRAM 区的最低 1MB 范围,第二个则是片内外设区的最低 1MB 范围。这两个区中的地址除了可以像普通的 RAM 一样使用外,它们还都有自己的“位带别名区”,位带别名区把每个比特膨胀成一个 32 位的字。当你通过位带别名区访问这些字时,就可以达到访问原始比特的目的。 支持位带操作的两个内存区的范围是: $ S1 `/ R6 f) V3 a + {' W; B( X% O! l- k% L9 g 0x2000_0000‐0x200F_FFFF(SRAM 区中最低1MB区域) 0x4000_0000‐0x400F_FFFF(片上外设区中的最低 1MB) ) _$ ]8 N# ?, g 2.2 位带操作 : D, n, `( j* S) H! @, A 对 SRAM 位带区的某个比特,记该比特所在字节的地址为A,位序号为 n (0<=n<=7),则它在别名区的地址为: # g; ^/ D& c8 ]" w# m ~, k3 J
对于片上外设位带区的某个比特,记该比特所在字节的地址为A,位序号为 n (0<=n<=7),则该比特在别名区的地址为:
上式中,“*4”表示一个字为 4 个字节,“*8”表示一个字节中有 8 个比特。
2.3代码实现 把“位带地址+位序号”转换别名地址宏为:
把该地址转换成一个指针:
其中 5 q* k7 G+ N" e5 q8 p1 H! Q8 E" ]; W addr的取值范围: 0x2000_0000‐0x200F_FFFF 0x4000_0000‐0x400F_FFFF 注意:addr取值要32位对齐 bitnum的取值范围: 0-31 解析: $ G5 ~' o; g; J y(addr & 0xf0000000) + 0x02000000: 区分SRAM还是外设,如果是外设,结果为4,再加0x2000000就等于0x4200000,0x42000000就是外设别名位带区。如果是SRAM,结果为2,再加上0x2000000就等于0x22000000,0x22000000就是SRAM别名位带区。 2 @, Q, B4 J4 j2 {addr & 0x00ffffff: 屏蔽了最高2位,相当于减去0x20000000或者0x40000000。因为位带区的有效范围是1M,即0x100000,这样子就做到了低6位有效。 << 5: 等价于乘以32 7 p; p3 f. p( ]$ B' v<< 2: 等价于乘以4 特别提醒 3 位段的优点, T* T% C2 C% k1 H 最容易想到的就是通过 GPIO 的管脚来单独控制每盏 LED 的点亮与熄灭。另一方面,也对操作串行接口器件提供了很大的方便(典型如 74HC165,CD4094)。位带操作可以把代码缩小, 速度更快,效率更高,更安全。总之位带操作对于硬件 I/O 密集型的底层程序最有用处了 8 s. G4 p% @9 S) y5 x6 M8 h. v 位带操作还能用来化简跳转的判断。 * h3 P: G, Y" P6 P 当跳转依据是某个位时,以前必须这样做 4 C( Y* z& @7 W1 W 1、读取整个寄存器 2、掩蔽不需要的位 3、比较并跳转 使用位带操作后 - O' s6 x4 n1 i" D \9 e }* O/ V% v6 c# d' j1 k/ |* z' V 1、从未带别名区读取状态位 ( s H# a, m' s! t7 g( P4 m9 y 2、比较并跳转
当然,对于写入操作也从4步精简到3步
& h( {, D9 V* X |
微信公众号
手机版