Hi3521DV100 GPIO驱动程序:配置GPIO5_0为输入,GPIO5_1为输出,并控制电平
#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()函数。
原文地址: https://www.cveoy.top/t/topic/nKpe 著作权归作者所有。请勿转载和采集!