嵌入式开发初学,下面这段代码什么意思啊?
问一下:这里的0x3怎么来的,可以写成其他的吗?有什么规则吗。
rGPBCON |=(0x01<<(2*5))|(0x01<<(2*6))|(0x01<<(2*7))|(0x01<<(2*8));
这里的0x01又是怎么来的呢。
rGPBUP |=0xf<<5;
这句话什么意思,0xf和5怎么来的呢
rGPBDAT |=0xf<<5; 展开
当我们要将GPB0~10中某位管脚设置成输入状态时,需要在GPBCON寄存器中对应位设置0;
例如:
要设置GPB0为输入时,设置GPBCON第0、第1位为0,
我们的做法是将这个寄存器与上一个数,这个数最低两位全0,结果是寄存器其它位不变,
而仅这两位清0:rGPBCON&=0xFFFFFFFC;
也就是:rGPBCON&=(~0x03);
也就是:rGPBCON&=(~(0x03<<0));
要设置GPB6为输入时,设置GPBCON第12、第13位为0,
我们的做法是将这个寄存器与上一个数,这个数这两位全0,结果是寄存器其它位不变,
而仅这两位清0:rGPBCON&=0xFFFFCFFF;
也就是:rGPBCON&=(~0x03000);
也就是:rGPBCON&=(~(0x03<<12));
也就是:rGPBCON&=(~(0x03<<2*6));
而rGPBCON&=(~((0x03<<2*6)|(0x03<<2*7)));则可以将GPB6和GPB7同时设置为输入。
所以rGPBCON &=~((0x3<<(2*5))|(0x3<<(2*6))|(0x3<<(2*7))|(0x3<<(2*8)));一看就知道,这句将GPB5,GPB6,GPB7和GPB8全都设置成了输入。这个0x03就是意图在取反后这两位都是0。
同理rGPBCON |=(0x01<<(2*5))|(0x01<<(2*6))|(0x01<<(2*7))|(0x01<<(2*8));将GPB5~8均设置成输入。
0x01和0x03可查芯片数据手册关于GBPCON设置部分,见后面图片,其中说明某位为00时对应输入、01时对应输出,01和03就是这么来的。
至于rGPBUP |=0xf<<5;和rGPBDAT |=0xf<<5;可手算程序设置了那些位并去数据手册查相应寄存器位的定义。
学到嵌入式了 位移指令应该要弄得很清楚才是了