imx6q工作队列实现led闪烁

    xiaoxiao2021-03-25  51

    /************************************************************************* > File Name: led_drv.c > Author: XXDK > Email: v.manstein@qq.com > Created Time: Sun 12 Mar 2017 06:42:42 AM PDT ************************************************************************/ // led + delayed_work #include<linux/init.h> #include<linux/module.h> #include<asm/gpio.h> #include<mach/iomux-mx6q.h> #include<linux/fs.h> #include<linux/device.h> #include<linux/cdev.h> #include<linux/uaccess.h> // led对应的gpio #define SABRESD_GPIO_LED4 IMX_GPIO_NR(3, 21) #define SABRESD_GPIO_LED5 IMX_GPIO_NR(3, 22) #define SABRESD_GPIO_LED6 IMX_GPIO_NR(3, 23) #define LED_ON 1 #define LED_OFF 0 // 实例化delayed_work 类的对象 struct delayed_work led_dwork; // 定义led_resource 类型 struct led_resource { int gpio; char *name; int data; }; static struct led_resource led_res[] = { [0] = { .gpio = SABRESD_GPIO_LED4, .name = "xxdk_led4" }, [1] = { .gpio = SABRESD_GPIO_LED5, .name = "xxdk_led5" }, [2] = { .gpio = SABRESD_GPIO_LED6, .name = "xxdk_led6" } }; static void led_dwork_func(struct delayed_work* dwork) { int i; if(!gpio_get_value(led_res[0].gpio)) { for(i = 0; i < ARRAY_SIZE(led_res); i++) gpio_set_value(led_res[i].gpio, 1); } else if(gpio_get_value(led_res[0].gpio)) { for(i = 0; i < ARRAY_SIZE(led_res); i++) gpio_set_value(led_res[i].gpio, 0); } //2秒后 再次登记,形成循环 schedule_delayed_work(&led_dwork, 2*HZ); } static int led_init(void) { int i; for(i=0; i < ARRAY_SIZE(led_res); i++) { gpio_request(led_res[i].gpio, led_res[i].name); gpio_direction_output(led_res[i].gpio, 0); } // 初始化delayed_work 对象 led_dwork 指定到时执行的函数 INIT_DELAYED_WORK(&led_dwork, led_dwork_func); // 2秒后登记,登记完成后,cpu在适当的时刻执行对应的函数 schedule_delayed_work(&led_dwork, 2*HZ); return 0; } static void led_exit(void) { int i; for(i = 0; i<ARRAY_SIZE(led_res); i++) { gpio_direction_output(led_res[i].gpio, 0); gpio_free(led_res[i].gpio); } cancel_delayed_work(&led_dwork); } module_init(led_init); module_exit(led_exit); MODULE_LICENSE("GPL");
    转载请注明原文地址: https://ju.6miu.com/read-37519.html

    最新回复(0)