通过4412提供的函数控制蜂鸣器和流水灯

来源:互联网 发布:des密码算法 编辑:程序博客网 时间:2024/05/22 17:04

参考博客

#include <linux/module.h>#include <linux/kernel.h>#include <linux/init.h>#include <linux/platform_device.h>#include <linux/fb.h>#include <linux/backlight.h>#include <linux/err.h>#include <linux/pwm.h>#include <linux/slab.h>#include <linux/miscdevice.h>#include <linux/delay.h>#include <linux/gpio.h>#include <mach/gpio.h>#include <plat/gpio-cfg.h>#include <linux/timer.h>  /*timer*/#include <asm/uaccess.h>  /*jiffies*/#include <linux/delay.h>#include <linux/interrupt.h> //request_irq#include <mach/irqs.h> //中断号,已包含plat/irqs.h#include <linux/fs.h>#include <linux/device.h> //class_create device_create#include <mach/regs-gpio.h>#include <linux/io.h> //ioremap ioread32 iowrite32#include <linux/sched.h>#include <linux/of.h>  #include <linux/of_device.h>  #include <linux/poll.h>#include <mach/gpio.h>//设备名称#define DEVICE_NAME"Bell"//设备蜂鸣器GPIO引脚#define BUZZER_GPIOEXYNOS4_GPD0(0)//设备按键 GPIO引脚#define BUTTON_GPIO_2 EXYNOS4_GPX3(2)#define BUTTON_GPIO_3 EXYNOS4_GPX3(3)#define BUTTON_GPIO_4EXYNOS4_GPX3(4)#define BUTTON_GPIO_5           EXYNOS4_GPX3(5)//设备流水灯 GPIO引脚#define LED_GPIO_0                  EXYNOS4X12_GPM4(0)#define LED_GPIO_1                  EXYNOS4X12_GPM4(1)#define LED_GPIO_2                  EXYNOS4X12_GPM4(2)#define LED_GPIO_3                  EXYNOS4X12_GPM4(3)//定义一个定时器链表struct timer_list timer;static struct class *Belldrv_class;static struct class_device*Belldrv_class_dev;int major;void timer_function(unsigned long value){while(1){//设置gpio为1,表示高电平,蜂鸣器高电平就会响gpio_set_value(BUZZER_GPIO,1);gpio_set_value(LED_GPIO_0,1);printk("BUZZER ON\n");mdelay(1000);//设置gpio为0,表示低电平,蜂鸣器高电平就会响gpio_set_value(BUZZER_GPIO,0);gpio_set_value(LED_GPIO_0,0);printk("BUZZER OFF\n");mdelay(1000);}}static struct file_operations Bell_drv_fops = {            .owner   =  THIS_MODULE,    /* 这是一个宏,推向编译模块时自动创建的__this_module变量 */       // .open    =  poll_drv_open,     //.read =poll_drv_read,   //.release =  poll_drv_close,//.poll    =  poll_drv_poll,//.write = poll_drv_write,};static int __init tiny4412_Bell_init(void) {    //bell init   major = register_chrdev(0, DEVICE_NAME, &Bell_drv_fops);Belldrv_class = class_create(THIS_MODULE, DEVICE_NAME);Belldrv_class_dev = device_create(Belldrv_class, NULL, MKDEV(major, 0), NULL, DEVICE_NAME); /* /dev/buttons */  //2、调用板级驱动的函数,将gpio配置成输出状态s3c_gpio_cfgpin(BUZZER_GPIO, S3C_GPIO_OUTPUT); //   3、设置gpio为0,表示低电平,蜂鸣器高电平就会响gpio_set_value(BUZZER_GPIO,0);    //初始化内核定时器    init_timer(&timer);     //给执行的函数传参    timer.data= 1;    //当前jiffies的值加上5秒钟之后    timer.expires= jiffies + (5 * HZ);    //如果超时了就执行这个函数    timer.function= timer_function;    //启动定时器    add_timer(&timer);                        return 0 ;}static void __exit tiny4412_Bell_exit(void) {    //释放gpio    gpio_free(BUZZER_GPIO);    //删除注册的定时器    del_timer(&timer);    unregister_chrdev(major, "poll_drv");    device_destroy(Belldrv_class, MKDEV(major, 0));    class_destroy(Belldrv_class);}module_init(tiny4412_Bell_init);module_exit(tiny4412_Bell_exit);MODULE_LICENSE("GPL");MODULE_AUTHOR("hai");MODULE_DESCRIPTION("2017.5.3");


0 0
原创粉丝点击