当前位置: 代码迷 >> 驱动开发 >> 关于44B0 GPIO控制的小疑点
  详细解决方案

关于44B0 GPIO控制的小疑点

热度:84   发布时间:2016-04-28 11:05:38.0
关于44B0 GPIO控制的小问题
#define OUT_MagPower(x) rPDATG=((rPDATG&0xbf)|(x<<6)) //GPG6
#define OUT_ACPower(x) rPDATG=((rPDATG&0xef)|(x<<4)) //GPG4

其中X=1。
我没想明白为什么是这样呢?我想的是:
0xbf: 1011 1111
x<<6: 0100 0000
=
..................
  1111 1111  
怎么就成了 GPG6 了呢?我实在搞不明白呀?是不是我哪里想错了呢,把PDATG寄存器的某一位弄成1 就是输出啊。
 

------解决方案--------------------
这个您想错了吧,应该是这样

假设原来rPDATG = 0x01

则(rPDATG&0xbf) = 0x01

如果x=1则

((rPDATG&0xbf)|(x<<6)) = 0x41;


rPDATG=((rPDATG&0xbf)|(x<<6)) 
的意思是将bit6位置1或清0而保持bit0-bit5和bit7位不变。即只改变CPG6引脚的值。
后面那个CPG4一个意思。
------解决方案--------------------
运算顺序问题吧
------解决方案--------------------
因为x也可以等于0,所以必须要有 rPDATG & 0xbf ,以便把GP6清零。
就是说,x可以是0或者1,所以既要清零,又要置位,才能实现OUT 0或1.