我无法找到下面的通道:
pclkdiv = (LPC_SC->PCLKSEL1 >> 18) & 0x03;
操作>>是什么和&代表? PCLKSEL1是32位寄存器。
答案 0 :(得分:1)
该代码隔离下面箭头指示的两位,并将它们移动到两个最低有效位。
vv
11111111111111111111111111111111 original value
vv
00000000000000000011111111111111 after >>18 (shift right 18 positions)
vv
00000000000000000000000000000011 after & 3 (mask out all but the 0th and 1st bits)
这假定为无符号值,并且在移位期间没有对符号位进行特殊处理。 & (AND)是一个屏蔽操作,因为结果在任何位置为1,值和掩码都必须为1(即1 AND 1 = 1,其他都为0.所以只有掩码中的位(0x03)在你的情况下)最终可以得到0以外的任何东西,如果它们被掩盖的值为1,它们将只有1。
答案 1 :(得分:0)
是位右移操作。
如果PCLKSEL1具有二进制值' ABCDEFGHIJK101abcdefghijklmnpqrs'其中(A-P和a-s分别为0或1),PCLKSEL1>> 18将成为" 000000000000000000ABCDEFGHIJK101"。
&安培;是按位AND运算符。 (X& Y)结果的第n位是X的第n位和Y的第n位的AND。
如果PCLKSEL1具有二进制值' ABCDEFGHIJK101abcdefghijklmnpqrs',(PCLKSEL1>> 18)& 0x03将变为&00; 00000000000000000000000000000101'
在其他词语中,(PCLKSEL1>> 18)& 0x03是从最左边提取第12到第14位的操作。