就某32bit data而言 (ex : *pRccCfg)
經初始化0b0
我們把bit 22設定為1 之後 (by instruction : 「 *pRccCfg|= (1<<22) ; 」)
要把bit 24~26設定為0b110,又不能動到之前設定的其他bit值,如何是好?
作法1.一個bit一個bit設定
*pRccCfg!=(1<<25)
*pRccCfg!=(1<<26)
作法二,用罩除的方式,比較不建議請注意"~"的用法
*pRccCfg!=(7<<24); // "OR" the 3 bits by 0b111
*pRccCfg &=~(1<<24);//shift the bit ,then "Complement them",then,use "AND" opeartion,
------------------------------------------------------------------------
同理,只是想清除某幾個bit,也是先 shift "on" bits ,"Complement them",then ,use "AND"operation
ex:要把21&22 bits清除,但不要動到其他bits,請用以下方式
*pAddrRccCfg &=~(0x3<<21);
務必注意!!
~(0x3<<21) 是
11111111100111111111111111111111
而(~0x3<<21) 是
11111111100000000000000000000000
千萬要注意順序
沒有留言:
張貼留言