单片机
返回首页

Linux下简易蜂鸣器驱动代码及测试实例

2025-01-07 来源:cnblogs

驱动代码:


#include

#include

#include

#include

#include


#include


#include

#include

#include


#define DEVICE_NAME                'beep3'


#define BEEP_MAGIC 'k'

#define BEEP_START_CMD _IO (BEEP_MAGIC, 1)

#define BEEP_STOP_CMD _IO (BEEP_MAGIC, 2)



static void beep3_stop(void) {

    printk('in the beep3_stop!!n');

    s3c_gpio_cfgpin(S5PV210_GPD0(0), S3C_GPIO_OUTPUT);

    gpio_set_value(S5PV210_GPD0(0), 0);


}


static void beep3_start(void) {

    printk('in the beep3_start!!n');

    s3c_gpio_cfgpin(S5PV210_GPD0(0), S3C_GPIO_OUTPUT);

    gpio_set_value(S5PV210_GPD0(0), 1);


}



static long beep3_ioctl(struct file *filep, unsigned int cmd,

        unsigned long arg)

{

    printk('in the beep3_ioctl!!n');

    switch ( cmd ) {

        case BEEP_START_CMD: {

            printk('in the start_cmd!!n');

            beep3_start();     break;

        }

        case BEEP_STOP_CMD: {

            printk('in the stop_cmd!!n');

            beep3_stop();     break;

        }

        default: {

            break;

        }

    }


    return 0;

}



static struct file_operations beep3_fops = {

    .owner            = THIS_MODULE,

    .unlocked_ioctl    = beep3_ioctl,

};


static struct miscdevice beep3_misc_dev = {

    .minor = MISC_DYNAMIC_MINOR,

    .name = DEVICE_NAME,

    .fops = &beep3_fops,

};


static int __init beep3_dev_init(void) {

    int ret;


    ret = gpio_request(S5PV210_GPD0(0), DEVICE_NAME);

    if (ret) {

        printk('request GPIO %d  failedn',S5PV210_GPD0(0));

        return ret;

    }

    s3c_gpio_cfgpin(S5PV210_GPD0(0), S3C_GPIO_OUTPUT);

    gpio_set_value(S5PV210_GPD0(0), 0);

    


    ret = misc_register(&beep3_misc_dev);


    printk(DEVICE_NAME 'tinitializedn');


    return ret;

}


static void __exit beep3_dev_exit(void) {

    beep3_stop();


    misc_deregister(&beep3_misc_dev);

}


module_init(beep3_dev_init);

module_exit(beep3_dev_exit);


MODULE_LICENSE('GPL');

MODULE_AUTHOR('mhb@SEU');

MODULE_DESCRIPTION('S5PV210 beep Driver');


测试实例:


#include

#include  

#include  

#include

#include

#include

#include  

#define BEEP_MAGIC 'k'

#define BEEP_START_CMD _IO (BEEP_MAGIC, 1)

#define BEEP_STOP_CMD _IO (BEEP_MAGIC, 2)


int main(int argc ,char* argv[])

{

   int m_fd=0;// 

   m_fd = open('/dev/beep3', O_RDONLY); 

 


   ioctl(m_fd, BEEP_STOP_CMD);

   while(1)

       {

       printf('enter any key to start !!n');

       getchar();

       ioctl(m_fd, BEEP_START_CMD);

       printf('start success!!n');

       printf('enter any key to stop !!n');

       getchar();

       ioctl(m_fd, BEEP_STOP_CMD);

       }

   close(m_fd);

   return 0; 

}


进入单片机查看更多内容>>
相关视频
  • 【TI MSPM0 应用实战】智能小车+工业角度编码器+血氧仪+烟雾探测器!硬核参考设计详解!

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

  • 直播回放: Microchip Timberwolf™ 音频处理器在线研讨会

  • 基于灵动MM32W0系列MCU的指夹血氧仪控制及OTA升级应用方案分享

精选电路图
  • 1瓦线性调频增强器

  • 家用电器遥控器

  • 12V 转 28V DC-DC 变换器(基于 LM2585)

  • 红外开关

  • DS1669数字电位器

  • HA1377 桥式放大器 BCL 电容 17W(汽车音频)

    相关电子头条文章