Part Number:TCA8418E
如果想把COL7作为gpio使用,并且可以读取他的状态,这需要如何配置
Kailyn Chen:
您好,寄存器0x1E是用来配置COL0~7为GPIO 还是Keyboard Matrix,bit7=0的话,COL7便作为GPIO功能。
,
xiaodong li:
我这边设置了0x1E寄存器的这一位设置成了0,但是读取的状态还是没有变,依旧是0xff,我读的寄存器是0x15
,
xiaodong li:
我这边设置了0x1E寄存器的这一位设置成了0,但是读取的状态还是没有变,依旧是0xff,我读的寄存器是0x15,我们这边COL7是没有被用,是接了一个上拉电阻,但是读取状态始终不对
,
Kailyn Chen:
0x15是读取的GPIO配置的输入还是输出状态。寄存器0x23~0x25 是用来配置GPIO为输入还是输出状态的。 如果0x15读取的是0xFF,也就是您把GPIO的方向配置为output状态了,检查下寄存器0x23~0x25的配置。
而寄存器0x17~0x19的值才是配置的GPIO作为输出时配置的值。
,
xiaodong li:
我读取了0x15的寄存器是0xff,又读取了0x24的寄存器是00,这两个读取的状态却是不一样的,顺便也读取了0x18的值也是00
,
xiaodong li:
我是想读出来gpio状态是高还是低,需要对哪些寄存器进行操作,有没有先后顺序
,
xiaodong li:
不知道是否可以留电话号码电话交流,这个比较急
,
xiaodong li:
我们用了COL1-4,COL5-7没用,接上拉电阻,准备做gpio用,想读取COL7的gpio状态,比如COL7当前处于上拉状态,而且读状态应该是1,如果不接上拉电阻,读状态应该是0,如果我们要这个结果怎么做,需要对哪些寄存器进行操作
,
Kailyn Chen:
您好,首先我们没有电话支持 ,因为问题比较多,我会尽快在这里跟进。
关于这几个寄存器,
比如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.
,
xiaodong li:
你好 我使用你说的方式设置并读取了,不管COL7是加一个上拉电阻还是接地,读出来的值都是00,这是为什么
,
xiaodong li:
按逻辑来说,外接了一个上拉电阻,按照你的配置完成之后读取0x18寄存器的值应该是0x80,接地的应该是0x00,但是现在读出来的全是0x00
,
xiaodong li:
麻烦快一点回复,这个比较急,今天是最后一天了
,
xiaodong li:
这个0x17~0x19是状态寄存器吗, 如果按照您所说的步骤进行操作,接了上拉电阻是否是可以读出来1,相反接地的话是否可以读出来0,或者说这个寄存器是根据接上拉还是接地值会自动改变吗
,
xiaodong li:
0x15是需要加载map表之后才会有数据吗,还是说对这些寄存器进行设置值之后就会有数据,可以在加载map表之前使用0x15和0x18的寄存器并读取他们的值吗
,
xiaodong li:
我在驱动刚开始的时候设置了你说的方法,但是去读取0x15和0x18寄存器全是0x00,但是驱动全部加载之后0x15就不是0x00了,而是0xff,这是为什么
,
Kailyn Chen:
您好,我又重新看了下数据手册,再重新对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。我想可能是需要对这个寄存器读取两次,才能更新这个寄存器的状态值。您这边可以去验证下。