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.

TCA8418E: 使用gpio

Part Number: TCA8418E

如果想把COL7作为gpio使用,并且可以读取他的状态,这需要如何配置

  • 您好,寄存器0x1E是用来配置COL0~7为GPIO 还是Keyboard Matrix,bit7=0的话,COL7便作为GPIO功能。 

  • 我这边设置了0x1E寄存器的这一位设置成了0,但是读取的状态还是没有变,依旧是0xff,我读的寄存器是0x15

  • 我这边设置了0x1E寄存器的这一位设置成了0,但是读取的状态还是没有变,依旧是0xff,我读的寄存器是0x15,我们这边COL7是没有被用,是接了一个上拉电阻,但是读取状态始终不对

  • 0x15是读取的GPIO配置的输入还是输出状态。寄存器0x23~0x25 是用来配置GPIO为输入还是输出状态的。  如果0x15读取的是0xFF,也就是您把GPIO的方向配置为output状态了,检查下寄存器0x23~0x25的配置。

    而寄存器0x17~0x19的值才是配置的GPIO作为输出时配置的值。

  •   我读取了0x15的寄存器是0xff,又读取了0x24的寄存器是00,这两个读取的状态却是不一样的,顺便也读取了0x18的值也是00

  • 我是想读出来gpio状态是高还是低,需要对哪些寄存器进行操作,有没有先后顺序

  • 不知道是否可以留电话号码电话交流,这个比较急

  • 我们用了COL1-4,COL5-7没用,接上拉电阻,准备做gpio用,想读取COL7的gpio状态,比如COL7当前处于上拉状态,而且读状态应该是1,如果不接上拉电阻,读状态应该是0,如果我们要这个结果怎么做,需要对哪些寄存器进行操作

  • 您好,首先我们没有电话支持 ,因为问题比较多,我会尽快在这里跟进。

    关于这几个寄存器,

    比如COL7的功能,比如GPIO还是Keyboard matrix,需要配置0x1E。

    配置为GPIO的话,可以配置为GPIO为输入还是输出,是通过0x23~0x25配置GPIO方向。

    是否enable GPIO 内部上拉,是配置0x2C~0x2E。

    所以针对您的描述,我认为您这边需要配置的是上面这几个寄存器,选择COL7的功能为GPIO,配置它为输出引脚,enable internal pull up。然后读取GPIO data out 0x17~0x19. 

  •  你好  我使用你说的方式设置并读取了,不管COL7是加一个上拉电阻还是接地,读出来的值都是00,这是为什么

  • 按逻辑来说,外接了一个上拉电阻,按照你的配置完成之后读取0x18寄存器的值应该是0x80,接地的应该是0x00,但是现在读出来的全是0x00

  • 麻烦快一点回复,这个比较急,今天是最后一天了

  • 这个0x17~0x19是状态寄存器吗, 如果按照您所说的步骤进行操作,接了上拉电阻是否是可以读出来1,相反接地的话是否可以读出来0,或者说这个寄存器是根据接上拉还是接地值会自动改变吗

  • 0x15是需要加载map表之后才会有数据吗,还是说对这些寄存器进行设置值之后就会有数据,可以在加载map表之前使用0x15和0x18的寄存器并读取他们的值吗

  • 我在驱动刚开始的时候设置了你说的方法,但是去读取0x15和0x18寄存器全是0x00,但是驱动全部加载之后0x15就不是0x00了,而是0xff,这是为什么

  • 您好,我又重新看了下数据手册,再重新对GPIO的这几个寄存器解释一下:

    第一,0x17~0x19这几个寄存器是针对GPIO作为输出功能时的输出值大小,所以要配置0x1E选择GPIO功能,以及0x23~0x25选择输出方向。

    第二,如果读取GPIO状态寄存器,也就是0x14~0x16,这个是针对GPIO作为输入和输出的状态,如果GPIO配置为输入,要读取GPIO的状, 需要配置寄存器0x2C~X2E GPIO_PULL#是否使能内部上拉,从而读取0x14~0x16的GPIO状态。

    那么针对您的问题,0x17~0x19不是状态寄存器,它是GPIO作为输出引脚时输出值的寄存器,比如芯片工作后,GPIO输出为高,那么这个寄存器读取就为1.输出为低,寄存器读取就为0.

    0x15这个寄存器,我上面也提到了,是状态寄存器。但是数据手册上有这么一句:Read twice to clear them。我想可能是需要对这个寄存器读取两次,才能更新这个寄存器的状态值。您这边可以去验证下。

x 出现错误。请重试或与管理员联系。