This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

am3358 gpio输出高低,但是GPIO_DATAIN没有变化

hi:

    我想请教下,我设置GPIO0_3输出并拉高然后拉低,这个时候读GPIO_DATAIN没有变化,是怎么回事?

    通过读0x44e07134,确认该IO口已经设置为输出,然后写0x44e0713c为0x8,然后通过读0x44e07138,发现依旧值为0.

    请问这个是怎么回事?

  • 读GPIO_DATAIN寄存器是读输入管脚上的电平值。

    你写了0x44e0713c为0x8后,看一下0x44e0713c里的值是否是8,然后再去量一下GPIO0_3管脚上的电压是否是高电平输出。

  • 写了0x13c为0x8后,读出来值就是0x8,并且实际测量GPIO0_3d上的管脚,高低状态和设置的是一样的,就是GPIO_DATAIN的值不变化。

  • 那就说明输出管脚配置对了。

    GPIO_DATAIN是针对输入管脚的。

  • 那想查询GPIO管脚状态先要判断是输入还是输出?如果输入的话,读GPIO_DATAIN的值,如果输出的话读GPIO_DATAOUT的值?

    可是我配置了GPIO0_3为GPIO功能后,什么都不操作,直接读0x134寄存器,发现默认GPIO0_3的值为输入,然后读0x13c的值,这个值为0,再读0x138的值,也是为0,但是实际gpio0_3这个pin脚,用万用表测量,3.2v,这样的话GPIO_DATAIN相应位应该是1才对,可是我读出来,相应位是0.这个又是怎么回事?

  • 一般读取GPIO DATAIN的状态,应该是设成内部上下拉的。

  • 您的意思是做输出的时候,读取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同样未变化,感觉不起作用了。

  • GPIO配成输出如果想读取外部电平值,就不用设为内部上下拉了。

  • 配置成输出,不内部上下拉,外部Pin脚有变化,但是读取0x138的值一直没有变化。