以下是一个基本的Hi3521DV100芯片的驱动程序,可以实现配置GPIO5_0为输入,GPIO5_1为输出,并且GPIO5_1拉低电平100ms,然后再拉高电平100ms的操作。

#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芯片配置GPIO5_0为输入配置GPIO5_1为输出GPIO5_1拉低电平100ms 再拉高电平100ms

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

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