微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 寄存器 位屏蔽宏 : SysTick_xxx_Msk ,宏展开是 xxx 的位全部置 1 后,左 移 SysTick_xxx_Pos 位。

寄存器 位屏蔽宏 : SysTick_xxx_Msk ,宏展开是 xxx 的位全部置 1 后,左 移 SysTick_xxx_Pos 位。

时间:10-02 整理:3721RD 点击:
/*中的寄存器 位指示宏 : SysTick_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,在左移?


已退回1积分

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top