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.
工具/软件:Linux
您好!
我将使用 带最新 Linux 处理器 SDK 的 AM572x 评估模块的 TMDSEVM572X。
这次我不连接摄像头、只需硬件检查引脚状态。 我的问题是、能否 从驱动程序端代码手动设置 GPIO 引脚?(ti-processor-sdk-linux-am57xx-evm-03.03.00.04/board-support/linux-4.4.4.41+gitAUTOINC+f9f6f0db2d-gf9f6f0db2d/drivers/media/i2c/mt9t11x.c) 例如、我在"mt9t11x_probe ()"函数中执行了以下操作-
GPIO_read = gpioD_get_raW_value (priv->bufen_gpio);
dev_err (&client->dev、"BUFEN_PREV %d"、GPIO_Read);
gpioD_set_raW_value_cansleep(priv->bufen_gpio, 1);
GPIO_read = gpioD_get_raW_value (priv->bufen_gpio);
dev_err (&client->dev、"BuFEN_After %d"、GPIO_Read);
它反映了我在日志(dmesg |grep mt9t11x)中的更改、AS -
[7.867966] mt9t11x 4-003c:BUFEN_PREV 0
[7.871907] mt9t11x 4-003c:BUFEN_After 1.
但无法在硬件引脚电平下提高电平。
谢谢。
Prabhakar、您好!
是否已正确设置 pinmux 以选择 GPIO?
是的、我在 mux_data.h 和 am57xx-beagle-x15-common.dtsi 文件中正确执行了 pinmux。
哪个组是 GPIO,是否已启用组,您能否读取它的修订号?
我的 GPIO 是 GPIO1_19 (焊球名称- GPMC_AD13)。 您能建议我如何找到相应的银行并启用它吗?
请参阅链接[1]、从用户空间测试硬件、以将 GPIO 引脚设置为 OP/IP
我已经完成了这个过程、这些值是更新的软件、但不反映在硬件中。
谢谢。
Yordan、您好!
我添加了上述呼叫、但仍然没有结果。
请验证我切换特定 GPIO (GPIO1_19)的步骤-
1) 1)我更改了 mux_data.h 中的 pinmux 设置
{GPMC_AD13、(M14 | PIN_OUTPUT)}、// GPMC_ad13.buff _EN GPIO1_19*/
2) 2)在 am57xx-beagle-x15-common.dtsi 中创建了一个节点
GPIO1_PINS_DEFAULT:GPIO1_PINS_DEFAULT{
pinctrl-signle、pins =<
0x34 (PIN_OUTPUT | MUX_MODE14)//GPMC_AD13.GPIO1_19
>;
};
以及您所说的添加的上述调用。
GPIO1{&gpio1}
pinctrl-names ="default";
pinctrl-0 =<&GPIO1_PINS_DEFAULT>;
状态="正常";//启用 GPIO1
};
在&i2c5调用中的同一文件中、
i2c5{(&I)
状态="正常";
pinctrl-names ="default";
pinctrl-0 =<&i2c5_PINS_DEFAULT>;
时钟频率=<400000>;
mt9t11x@3C{
兼容="Aptina、mt9t111";
reg =<0x33>;
bufen-GPIO =<&GPIO1 19 GPIO_ACTIVE_HIGH_>;
端口{
CAM:端点{
远程端点=<&V vin3a>;
HSYNC-ACTIVE =<1>;
vsync-active =<1>;
pclk-sample =<0>;
输入时钟频率=<32000000>;
PIXEL 时钟频率=<96000000 >;
};
};
};
};
在驱动程序代码中、我添加了
//读取 buffen_gpio 状态
GPIO_read = gpioD_get_raW_value (priv->bufen_gpio);
dev_err (&client->dev、"BUFEN_PREV %d"、GPIO_Read);
gpioD_set_raW_value_cansleep(priv->bufen_gpio, 1);
GPIO_read = gpioD_get_raW_value (priv->bufen_gpio);
dev_err (&client->dev、"BuFEN_After %d"、GPIO_Read);
这些变化中是否有错误? 仍然无法正常工作。 我没有获得高输出。
谢谢。
Yordan、您好!
您能否使用对相应 GPIO_DATAOUT 寄存器的原始写入进行测试?
另请看 OMAP-GPIO.c 驱动程序、有一个 OMAP-SET_GPIO_dataout_reg ()函数用于切换 DATAOUT 寄存器中的位(GPIO)。
我在 OMAP-GPIA.c 驱动程序中找到了 OMAP-GPIO_SET_VALUE ()函数。
使用 omap_gpio_set_value () 和 gpioD_set_value_cansleep ()/gpio_set_raW_value_cansleep ()有何区别? 因为 mt9t11x.c 驱动程序中已使用 gpio_set_value_cansleep()来设置 GPIO 值。 这是不是正确的吗?
您能浏览 mt9t11x.c 驱动程序吗? 让我知道、如果有、问题是什么?
使用 gpioD_set_value_cansleep()时,需要使用互斥锁 GPIO。
我这么做了、但没有令人满意的输出。
Yordan、您好!
您能否使用对相应 GPIO_DATAOUT 寄存器的原始写入进行测试?
另请看 OMAP-GPIO.c 驱动程序、有一个 OMAP-SET_GPIO_dataout_reg ()函数用于切换 DATAOUT 寄存器中的位(GPIO)。
我在 OMAP-GPIA.c 驱动程序中找到了 OMAP-GPIO_SET_VALUE ()函数。
使用 omap_gpio_set_value () 和 gpioD_set_value_cansleep ()/gpio_set_raW_value_cansleep ()有何区别? 因为 mt9t11x.c 驱动程序中已使用 gpio_set_value_cansleep()来设置 GPIO 值。 这是不是正确的吗?
您能浏览 mt9t11x.c 驱动程序吗? 让我知道、如果有、问题是什么?
使用 gpioD_set_value_cansleep()时,需要使用互斥锁 GPIO。
我这么做了、但没有令人满意的输出。
您好!
我的坏情况是我错误地读取了 TRM、它的唯一 GPIO1[0:3]仅作为 I/p。
GPIO1_18寄存器0x4a003430的 Pinmux 应设置为0x5000E
GPIO1_21寄存器0x4a00343c 的 Pinmux 应设置为0x5000E
首先从 uboot 尝试此操作、以检查 h/w 是否为 rite:
MW 命令写入,MD 命令显示:
0x4ae10134 = FFEBFFFF >将引脚设置为 o/p
0x4ae10194 = 140000 >以使引脚变为高电平
0x4ae10190 = 140000 >、以使引脚变为低电平
谢谢、
Prabhakar LAD
大家好、Prabhakar、
有更新吗? :-)
Yordan、您好!
您能否使用对相应 GPIO_DATAOUT 寄存器的原始写入进行测试?
我在 uboot 期间检查并确认了原始写入。 工作正常。
另请看 OMAP-GPIO.c 驱动程序、有一个 OMAP-SET_GPIO_dataout_reg ()函数用于切换 DATAOUT 寄存器中的位(GPIO)。
我想问的是、在我当前使用的 mt9t11x.c 中、有一些设置 GPIO 的调用。 那么、使用 OMAP-SET_GPIO_dataout_reg ()有何区别?