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.
大家好,我用GPIO_162做为主板工作指示灯,同时测试了gpio_63,64,在linux下board_am3517evm.c中增加了以下代码
static struct omap_board_mux board_gpio_led_mux[] = {
OMAP3_MUX(MCBSP1_CLKX,OMAP_MUX_MODE4 | OMAP_PIN_OUTPUT), //DS2
OMAP3_MUX(GPMC_WAIT1, OMAP_MUX_MODE4 | OMAP_PIN_OUTPUT),
OMAP3_MUX(GPMC_WAIT2, OMAP_MUX_MODE4 | OMAP_PIN_OUTPUT),
{ .reg_offset = OMAP_MUX_TERMINATOR },
}
static int gpio_leds_init(void)
{
int ret = 0;
omap3_mux_init(board_gpio_led_mux, OMAP_PACKAGE_CBB);
ret = gpio_request(162, "DS2");
if (ret)
{
printk(KERN_ERR "failed to get DS2\n");
return 1;
}
gpio_direction_output(162, 1);
gpio_direction_output(63, 0);
gpio_direction_output(64, 0);
// gpio_set_value(162,1);
printk(KERN_INFO"Led initialized successfully\n");
return ret;
}
发现无论gpio_direction_output设置成1,还是0,io口的电平没有任何变化。我还有哪有需要配置吗?期待大家的帮助。
Steven Liu,谢谢你的回复,但是我不明白GPIO Module,SYSCONFIG是配置什么内容呢?具体在哪个地方进行配置?
我看了linux/gpio.h文件
static inline int gpio_direction_output(unsigned gpio, int value)
{
return -ENOSYS;
}
这个设置输出并未实现,这个函数是在哪里实现的呢?
Dear Yaoming Qin,
我尝试了这个方法,发现value 0/1,gpio 162的电压始终是1.7V左右,LED灯还是未能点亮。能帮忙分析下可能是什么原因导致?
root@am3517-evm:~# echo "162" > /sys/class/gpio/export
root@am3517-evm:~# ls /sys/class/gpio/
export gpiochip0 gpiochip160 gpiochip64 unexport
gpio162 gpiochip128 gpiochip32 gpiochip96
root@am3517-evm:~# echo "out" > /sys/class/gpio/gpio162/direction
root@am3517-evm:~# echo "1" > /sys/class/gpio/gpio162/value
root@am3517-evm:~# echo "0" > /sys/class/gpio/gpio162/value
在瑞泰的am3517与自己的板子上都测试过,gpio162 和63均不受控制,但是64可以。这三个gpio都是我自己添加的。
使用测试瑞泰自身带的led灯,测试也是有效果的。
所以我怀疑gpio162与63哪里配置不正确,pinmux配置了,输出模式配置了,就是想不出来还有哪里少配了或者是错配了。
以下是最新的测试代码 gpio 24 26 27 29都是可以的,63和162不行,64可以。
static struct gpio_led gpio_leds[] = {
{
.name = "am3517::D8",
.default_trigger = "default-on",
.gpio = 27,
.active_low = true,
},
{
.name = "am3517::D7",
.default_trigger = "default-on",
.gpio = 26,
.active_low = true,
},
{
.name = "am3517::D12",
.default_trigger = "default-on",
.gpio = 24, // gets replaced
.active_low = true,
},
{
.name = "am3517::D11",
.default_trigger = "default-on",
.gpio = 29, // gets replaced
.active_low = true,
},
{
.name = "am3517::DS2",
.default_trigger = "default-on",
.gpio = 162,
.active_low = true,
},
};
static struct gpio_led_platform_data gpio_led_info = {
.leds = gpio_leds,
.num_leds = ARRAY_SIZE(gpio_leds),
};
static struct platform_device leds_gpio = {
.name = "leds-gpio",
.id = -1,
.dev = {
.platform_data = &gpio_led_info,
},
};
static struct omap_board_mux board_gpio_led_mux[] = {
OMAP3_MUX(ETK_D12, OMAP_MUX_MODE4 | OMAP_PIN_OUTPUT),
OMAP3_MUX(ETK_D13, OMAP_MUX_MODE4 | OMAP_PIN_OUTPUT),
OMAP3_MUX(ETK_D10, OMAP_MUX_MODE4 | OMAP_PIN_OUTPUT),
OMAP3_MUX(ETK_D15, OMAP_MUX_MODE4 | OMAP_PIN_OUTPUT),
OMAP3_MUX(MCBSP1_CLKX,OMAP_MUX_MODE4 | OMAP_PIN_OUTPUT), //Power DS2 gpio 162
OMAP3_MUX(GPMC_WAIT1, OMAP_MUX_MODE4 | OMAP_PIN_OUTPUT),//63
OMAP3_MUX(GPMC_WAIT2, OMAP_MUX_MODE4 | OMAP_PIN_OUTPUT),//64
{ .reg_offset = OMAP_MUX_TERMINATOR },
};
static int gpio_leds_init(void)
{
int ret = 0;
omap3_mux_init(board_gpio_led_mux, OMAP_PACKAGE_CBB);
return ret;
}