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.
尊敬的 TI:
很抱歉再次开机自检。
从下面的前一个帖子中、我认为我没有疑问。 但我错了!
我执行了 GPIO 测试以再次使 LED 闪烁。
在 K3-am654-base-board.dts 中、我添加了测试 GPIO。
GPIO_TEST:GPIO_TEST{
兼容="GPIO-test";
pintest-GPIO =<&wkup_GPIO0 25 GPIO_ACTIVE_HIGH_>;
u-boot、dm-spl;
};
cbhass_wakeup{(&C)
wkup_pmx0:pinmux@4301c000{
兼容="pinctrl-single";
REG =<0x4301c000 0x118>;
#pinctrl-cells =<1>;
pinctrl-single、寄存器宽度=<32>;
pinctrl-single、function-mask =<0xffffff>;
};
wkup_GPIO0:wkup_GPIO0@42110000{
兼容="ti、am654-gpio"、"ti、keystone-gpio";
REG =<0x42110000 0x100>;
GPIO 控制器;
#GPIO-cells =<2>;
ti、ngpio =<56>;
TI、Davinci-GPIO-Unbanked =<0>;
时钟=<&K3_CLKS 59 0>;
时钟名称="GPIO";
u-boot、dm-spl;
};
};
wkup_pmx0{.wkup_pmx0}
pinctrl-names ="default";
pinctrl-0 =<&GPIO_Identify_pines>;
GPIO_Identify_pins:GPIO_Identify_pins{
pinctrl-single、pins =<
AM65X_WKUP_IOPAD (0x0034、PIN_OUTPUT、7)/*(T1) MCU_OSPI1_CLK.WKUP_GPIO0_25 LED-ERR*/
>;
u-boot、dm-spl;
};
};
我在 board_late_init()中添加了我的测试函数。
int GPIO_control_test (void)
{
结构 GPIO_desc PIN_GPIO;
int 节点、pin0Val、ret;
节点= FDT_NODE_OFFSET_BY_compatible (gd->FDT_BLOB、0、"GPIO-test");
RET = GPIO_REQUEST_BY_NAME_NODEV (OFFSET_TO_ofnode)、"pintest-GPIO"、0、PIN_GPIO、GPIOD_is_OUT);
IF (dm_gpio_is_valid (&pin_gpio))
{
pin0Val = dm_gpio_get_value (&pin_gpio);
printf ("Eric:GPIO_control_test dm_GPIO_get_value =%d [1]\r\n"、pin0Val);
DM_GPIO_SET_DIR_FLAGS (&PIN_GPIO、GPIOD_is_OUT);
DM_GPIO_SET_VALUE (&PIN_GPIO、1);
mdelay (1000);
pin0Val = dm_gpio_get_value (&pin_gpio);
printf ("Eric:GPIO_control_test dm_GPIO_get_value =%d [2]\r\n"、pin0Val);
DM_GPIO_SET_VALUE (&PIN_GPIO、0);
mdelay (1000);
pin0Val = dm_gpio_get_value (&pin_gpio);
printf ("Eric:GPIO_control_test dm_GPIO_get_value =%d [3]\r\n"、pin0Val);
DM_GPIO_SET_VALUE (&PIN_GPIO、1);
mdelay (1000);
pin0Val = dm_gpio_get_value (&pin_gpio);
printf ("Eric:GPIO_CONTINL_TEST dm_GPIO_get_value =%d [4]\r\n",pin0Val? LEDST_ON:LEDST_OFF);
}
其他
printf ("Eric:gpio_control_test dm_gpio_is_valid 错误!! \r\n");
返回1;
}
在我的程序中、我想再次将 LED 闪烁为开、关和开。 它按我的要求工作。
但是、当我查看日志时、我始终从 dm_gpio_get_value 获取值为0。
我错过了什么吗?
谢谢。
Eric
尊敬的 Eric:
这确实很奇怪、在硬件级别、您可以切换、软件始终报告0。
您能否转储 wkup_GPIO0的寄存器?
MD 0x42110000 10.
将 GPIO 设置为高电平、在 LED 亮起时进行转储、并将 GPIO 设置为低电平、然后获取上述转储。
此致、
基尔西
您好 Keerty J
我已经转储了寄存器。
LED_ON:
=> MD 0x42110000 10
42110000:44832905 00000001 00000000 00000000 .)D...........
42110010:edffff 12000000 12000000 12000000…
42110020:00000203 00000000 00000000 00000000…
42110030:00000000 00000000 ffFFFF 00000000…
=>
LED_OFF:
=> MD 0x42110000 10
42110000:44832905 00000001 00000000 00000000 .)D...........
42110010:edffff 10000000 10000000 10000000…
42110020:00000203 00000000 00000000 00000000…
42110030:00000000 00000000 ffFFFF 00000000…
=>
谢谢。
Eric
Eric、
请检查以下内容以了解通用 GPIO 配置: e2e.ti.com/.../948888
我发现问题与 pinmux 设置有关。 在引脚级别、将配置保持为 PIN_INPUT。
GPIO_Identify_pins:GPIO_Identify_pins{
pinctrl-single、pins =<
AM65X_WKUP_IOPAD (0x0034、PIN_INPUT、7)/*(T1) MCU_OSPI1_CLK.WKUP_GPIO0_25 LED-ERR*/
>;
u-boot、dm-spl;
};
您应该会看到正确的值。
感谢寄存器的转储。 验证后解决此问题。
此致、
基尔西
尊敬的 Keerthy J:
那么、这是否意味着我们需要在需要获取任何 GPIO 值时将引脚配置为 PIN_INPUT?
谢谢。
Eric
Eric、
是的。 您能确认它是否适合您吗? 如果是、请解决该问题。
此致、
基尔西