hi:
我想请教下,我设置GPIO0_3输出并拉高然后拉低,这个时候读GPIO_DATAIN没有变化,是怎么回事?
通过读0x44e07134,确认该IO口已经设置为输出,然后写0x44e0713c为0x8,然后通过读0x44e07138,发现依旧值为0.
请问这个是怎么回事?
Shine:
读GPIO_DATAIN寄存器是读输入管脚上的电平值。
你写了0x44e0713c为0x8后,看一下0x44e0713c里的值是否是8,然后再去量一下GPIO0_3管脚上的电压是否是高电平输出。
zizhen hu:
回复 Shine:
写了0x13c为0x8后,读出来值就是0x8,并且实际测量GPIO0_3d上的管脚,高低状态和设置的是一样的,就是GPIO_DATAIN的值不变化。
Shine:
回复 zizhen hu:
那就说明输出管脚配置对了。
GPIO_DATAIN是针对输入管脚的。
zizhen hu:
回复 Shine:
那想查询GPIO管脚状态先要判断是输入还是输出?如果输入的话,读GPIO_DATAIN的值,如果输出的话读GPIO_DATAOUT的值?
可是我配置了GPIO0_3为GPIO功能后,什么都不操作,直接读0x134寄存器,发现默认GPIO0_3的值为输入,然后读0x13c的值,这个值为0,再读0x138的值,也是为0,但是实际gpio0_3这个pin脚,用万用表测量,3.2v,这样的话GPIO_DATAIN相应位应该是1才对,可是我读出来,相应位是0.这个又是怎么回事?
Jian Zhou:
回复 zizhen hu:
一般读取GPIO DATAIN的状态,应该是设成内部上下拉的。
zizhen hu:
回复 Jian Zhou:
您的意思是做输出的时候,读取PIN脚状态是通过GPIO_DATAOUT值来获取,做输入的时候,需要配置GPIO的内部上拉或则下拉,然后读取GPIO_DATAIN的值来获取,对吗,我做试验试试。
我做了试验,在配置pinmux的配置成输入并内部上拉,我们的板子上gpio0_2有着上拉电阻,因此在未操作的时候,测量pin脚值为高,读0x138的值相应位也是1.短接地该pin脚,读0x138相应位的值为0.即输入的时候,外部拉高拉低,0x138相应位有着变化。然后通过api设置该gpio为输出,并拉高拉低,测量该pin脚,状态和输出的状态一样,并且0x138的相应位的值也根据拉高拉低变化。也就是说在初始化配置成输入后,DATAIN寄存器的刷新正常。
但是在Pinmux配置成输出后,读0x138的值和pin脚当前状态值不一致,通过api拉高或则拉低,0x138的值未变化,然后通过api设置成输入,外部拉高拉低该pin脚,0x138同样未变化,感觉不起作用了。
Jian Zhou:
回复 zizhen hu:
GPIO配成输出如果想读取外部电平值,就不用设为内部上下拉了。
zizhen hu:
回复 Jian Zhou:
配置成输出,不内部上下拉,外部Pin脚有变化,但是读取0x138的值一直没有变化。
TI中文支持网