/*中的寄存器 位指示宏 : Sys
tick_xxx_Pos ,宏展开后即为 xxx 在相应寄
存器中的位置,如控制 SysTick 时钟源的 SysTick_CTRL_CLKSOURCE_Pos ,宏
展开为 2 ,这个寄存器位正是在寄存器 STK_CTRL 中的 Bit2 。
而寄存器 位屏蔽宏 :
SysTick_xxx_Msk ,宏展开是 xxx 的位全部置 1 后,左
移 SysTick_xxx_Pos 位。如控制 SysTick 时钟源的
SysTick_CTRL_CLKSOURCE_Msk ,宏展开为 (1ul <<
SysTick_CTRL_CLKSOURCE_Pos) ,把无符号长整型数值(ul) 1 左移 2 位,得
到了一个只有 Bit2:CLKSOURCE 位被置 1,其它位为 0 的数值,这样的数值配
合位操作 &(按位与)、| (按位或)可以很方便地修改寄存器的某些位。假如控
制 CLKSOURCE 需要 四个 寄存器位,这个宏就应该被改为(0xf ul <<
SysTick_CTRL_CLKSOURCE_Pos) ,这样就会得到一个关于 CLKSOURCE 的四
位被置 1 的值,这些宏的参数就是这样被确定的。*/
请问这里黑字的地方,为什么展开是 xxx 的位全部置 1 ,是什么意思?下面的例子里面不是直接把1左移么?难道意思是先把寄存器全部置1,在左移?
一周热门 更多>