通过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
- 通过4412提供的函数控制蜂鸣器和流水灯
- 4412驱动-按键 蜂鸣器 流水灯
- 单片机控制流水灯 数码管显示时间 蜂鸣器报警
- lesson2~闪烁灯&流水灯&蜂鸣器
- 51单片机 流水灯 蜂鸣器应用
- P1口外接8个LED,通过按键控制,实现左右移动的流水灯
- 单片机AT89c51——单个按钮控制蜂鸣器和灯
- C语言按键控制led灯和蜂鸣器
- 单片机远程控制步进电机、LED灯和蜂鸣器
- 网页控制流水灯的问题
- arm的GPIO控制(流水灯)
- 开关控制的单片机流水灯 汇编
- CCS5.4+Proteus8的F28027实践课一、延时函数控制LED流水灯
- immutable 通过构造函数控制,不提供Set方法
- 开关控制流水灯
- STC89C52通过串口控制流水灯亮灭
- STC89C52通过串口控制流水灯亮灭
- 友善之臂4412开发板android应用层通过jni直接控制除LED、蜂鸣器外的其它IO口,系统直接重启问题
- C++函数之类的虚函数和纯虚函数区别与详解
- 南阳理工acm 171聪明的kk
- 51NOD 1070 Bash游戏 V4(斐波那契博弈)
- 持久化
- flash builder不能调试
- 通过4412提供的函数控制蜂鸣器和流水灯
- Javascript学习之bind的模拟实现
- Objective-C Category 的实现原理
- 开发中遇到的一些问题的解决方案
- C语言之数据结构
- 树的创建,与基本操作
- Linear Regression
- 用HTML5做2048游戏(一)
- RecyclerView的万能适配器