编写一个完整的驱动程序 Hi3521DV100芯片配置GPIO5_0为输入配置GPIO5_1为输出GPIO5_1拉低电平100ms 再拉高电平100ms
以下是一个基本的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()函数
原文地址: http://www.cveoy.top/t/topic/dHCa 著作权归作者所有。请勿转载和采集!