#include <linux/module.h> #include <linux/kernel.h> #include <linux/gpio.h> // gpio相关头文件 #include <linux/delay.h> // 延时相关头文件

#define GPIO_INPUT_PIN 0 // GPIO5_0 #define GPIO_OUTPUT_PIN 1 // GPIO5_1

static int __init my_driver_init(void) { int ret = 0;

// 配置GPIO5_0为输入
ret = gpio_request(GPIO_INPUT_PIN, 'input');
if (ret < 0) {
    printk(KERN_ERR 'Failed to request input pin\n');
    return -1;
}
ret = gpio_direction_input(GPIO_INPUT_PIN);
if (ret < 0) {
    printk(KERN_ERR 'Failed to set input direction\n');
    gpio_free(GPIO_INPUT_PIN);
    return -1;
}

// 配置GPIO5_1为输出
ret = gpio_request(GPIO_OUTPUT_PIN, 'output');
if (ret < 0) {
    printk(KERN_ERR 'Failed to request output pin\n');
    gpio_free(GPIO_INPUT_PIN);
    return -1;
}
ret = gpio_direction_output(GPIO_OUTPUT_PIN, 0); // 初始拉低
if (ret < 0) {
    printk(KERN_ERR 'Failed to set output direction\n');
    gpio_free(GPIO_INPUT_PIN);
    gpio_free(GPIO_OUTPUT_PIN);
    return -1;
}

// 拉低GPIO5_1,延时100ms
gpio_set_value(GPIO_OUTPUT_PIN, 0);
msleep(100);

// 拉高GPIO5_1,延时100ms
gpio_set_value(GPIO_OUTPUT_PIN, 1);
msleep(100);

return 0;

}

static void __exit my_driver_exit(void) { gpio_free(GPIO_INPUT_PIN); gpio_free(GPIO_OUTPUT_PIN); }

module_init(my_driver_init); module_exit(my_driver_exit);

MODULE_LICENSE('GPL'); MODULE_AUTHOR('Your Name'); MODULE_DESCRIPTION('A simple GPIO driver for Hi3521DV100');

该驱动程序会在初始化时完成GPIO的配置,并且会拉低GPIO5_1并延时100ms,然后再拉高GPIO5_1并延时100ms。

注意:在使用GPIO之前,需要先调用gpio_request()函数来请求GPIO资源,然后再调用gpio_direction_input()gpio_direction_output()函数来设置GPIO的方向。在使用完GPIO后,需要调用gpio_free()函数来释放GPIO资源。同时,在设置GPIO电平时,需要使用gpio_set_value()函数。延时可以使用msleep()函数。

Hi3521DV100 GPIO驱动程序:配置GPIO5_0为输入,GPIO5_1为输出,并控制电平

原文地址: https://www.cveoy.top/t/topic/nKpe 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录