当前位置: 首页 > news >正文

苏州营销型网站建设方案百度站长之家

苏州营销型网站建设方案,百度站长之家,西宁做网站制作的公司,wordpress 添加语言目录 一、蜂鸣器驱动原理 二、硬件原理分析 三、实验程序编写 1、 修改设备树文件 #xff08;1#xff09;添加pinctrl节点 #xff08;2#xff09;添加BEEP设备节点 #xff08;3#xff09;检查PIN 是否被其他外设使用 2、蜂鸣器驱动程序编写 3、编写测试AP…目录 一、蜂鸣器驱动原理 二、硬件原理分析 三、实验程序编写 1、 修改设备树文件 1添加pinctrl节点 2添加BEEP设备节点 3检查PIN 是否被其他外设使用 2、蜂鸣器驱动程序编写 3、编写测试APP 四、运行测试 一、蜂鸣器驱动原理 蜂鸣器常用于计算机、打印机、报警器、电子玩具等电子产品中常用的蜂鸣器有两种有源蜂鸣器和无源蜂鸣器这里的有“源”不是电源而是震荡源有源蜂鸣器内部带有震荡源所以有源蜂鸣器只要通电就会叫。无源蜂鸣器内部不带震荡源直接用直流电是驱动不起来的需要2K-5K 的方波去驱动。I.MX6U-ALPHA 开发板使用的是有源蜂鸣器因此只要给其供电就会工作I.MX6U-ALPHA 开发板所使用的有源蜂鸣器如下图所示 有源蜂鸣器只要通电就会叫所以我们可以做一个供电电路这个供电电路可以由一个IO来控制其通断一般使用三极管来搭建这个电路。为什么我们不能像控制LED 灯一样直接将GPIO 接到蜂鸣器的负极通过IO 输出高低来控制蜂鸣器的通断。因为蜂鸣器工作的电流比LED 灯要大直接将蜂鸣器接到I.MX6U 的GPIO 上有可能会烧毁IO所以我们需要通过一个三极管来间接的控制蜂鸣器的通断相当于加了一层隔离。 二、硬件原理分析 上图中通过一个PNP 型的三极管8550 来驱动蜂鸣器通过SNVS_TAMPER1 这个IO来控制三极管Q1 的导通当SNVS_TAMPER1 输出低电平的时候Q1 导通相当于蜂鸣器的正极连接到DCDC_3V3蜂鸣器形成一个通路因此蜂鸣器会鸣叫。同理当SNVS_TAMPER1输出高电平的时候Q1 不导通那么蜂鸣器就没有形成一个通路因此蜂鸣器也就不会鸣叫。 三、实验程序编写 1、 修改设备树文件 1添加pinctrl节点 I.MX6U-ALPHA开发板上的BEEP使用了SNVS_TAMPER1 这个PIN打开imx6ull-alientekemmc.dts在iomuxc 节点的imx6ul-evk 子节点下创建一个名为“pinctrl_beep”的子节点节点内容如下所示 pinctrl_beep: beepgrp{fsl,pins MX6ULL_PAD_SNVS_TAMPER1__GPIO5_IO01 0x10B0;}; 2添加BEEP设备节点 在根节点“/”下创建BEEP 节点节点名为“beep”节点内容如下 beep{#address-cell 1;#size-cell 1;compatible atkalpha-beep;pinctrl-names defaults;pinctrl-0 pinctrl_beep;beep-gpio gpio5 1 GPIO_ACTIVE_HIGH;status okay;}; 3检查PIN 是否被其他外设使用 此先检查PIN 为SNVS_TAMPER1这个PIN 有没有被其他的pinctrl 节点使用如果有使用的话就要屏蔽掉然后再检查GPIO5_IO01 这个GPIO 有没有被其他外设使用如果有的话也要屏蔽掉。 设备树编写完成以后使用“make dtbs”命令重新编译设备树然后使用新编译出来的imx6ull-alientek-emmc.dtb 文件启动Linux 系统。启动成功以后进入“/proc/device-tree”目录中查看“beep”节点是否存在如果存在的话就说明设备树基本修改成功(具体还要驱动验证)结果如下图所示 2、蜂鸣器驱动程序编写 编写beep.c文件 #include linux/types.h #include linux/kernel.h #include linux/delay.h #include linux/ide.h #include linux/init.h #include linux/module.h #include linux/errno.h #include linux/gpio.h #include linux/cdev.h #include linux/device.h #include linux/of.h #include linux/of_address.h #include linux/of_gpio.h #include asm/mach/map.h #include asm/uaccess.h #include asm/io.h#define BEEP_CNT 1 //设备号个数 #define BEEP_NAME beep //名字 #define BEEPOFF 0 //关蜂鸣器 #define BEEPON 1 //开蜂鸣器struct beep_dev {dev_t devid; //设备号struct cdev cdev; //cdevstruct class *class; //类struct device *device; //设备int major; //主设备号int minor; //次设备号struct device_node *nd; //设备节点int beep_gpio; //beep所使用的GPIO编号 };struct beep_dev beep; //beep设备//打开设备 static int beep_open(struct inode *inode, struct file *filp) {filp-private_data beep; //设置私有数据return 0; }//向设备写数据 static ssize_t beep_write(struct file *filp, const char __user *buf,size_t cnt, loff_t *offt) {int retvalue;unsigned char databuf[1];unsigned char beepstat;struct beep_dev *dev filp-private_data;retvalue copy_from_user(databuf, buf, cnt);if(retvalue 0){printk(kernel write failed!\r\n);return -EFAULT;}beepstat databuf[0]; //获取状态值if(beepstat BEEPON){gpio_set_value(dev-beep_gpio, 0); //8550三极管是PNP型高电压截至低电压导通}else if (beepstat BEEPOFF){gpio_set_value(dev-beep_gpio, 1); //关闭蜂鸣器}return 0; }//释放设备 static int beep_release(struct inode *inode, struct file *filp) {return 0; } //设备操作函数 static struct file_operations beep_fops {.owner THIS_MODULE,.open beep_open,.write beep_write,.release beep_release, };//驱动入口函数 static int __init beep_init(void) {int ret 0;//设置BEEP所使用的GPIO//1、获取设备节点beepbeep.nd of_find_node_by_path(/beep);if(beep.nd NULL){printk(beep node not find!\r\n);return -EINVAL;}else{printk(beep node find!\r\n);}//2、获取设备树中的gpio属性得到BEEP所使用的GPIO编号beep.beep_gpio of_get_named_gpio(beep.nd, beep-gpio, 0);if (beep.beep_gpio 0){printk(cant get beep-gpio);return -EINVAL;}printk(led-gpio num %d\r\n, beep.beep_gpio); //3、设置GPIO5_IO01为输出并且输出高点平默认关闭BEEPret gpio_direction_output(beep.beep_gpio, 1);if(ret 0){printk(cant set gpio!\r\n);}//注册字符设备驱动//1、创建设备号if(beep.major)//定义了设备号{beep.devid MKDEV(beep.major, 0);register_chrdev_region(beep.devid,BEEP_CNT,BEEP_NAME);}else//没有定义设备号{alloc_chrdev_region(beep.devid, 0, BEEP_CNT, BEEP_NAME);beep.major MAJOR(beep.devid);//获取分配号的主设备号beep.minor MINOR(beep.devid);//获取分配号的次设备号}printk(beep major %d, minor %d\r\n,beep.major, beep.minor);//2、初始化cdevbeep.cdev.owner THIS_MODULE;cdev_init(beep.cdev, beep_fops);//3、添加一个cdevcdev_add(beep.cdev, beep.devid, BEEP_CNT);//4、创建类beep.class class_create(THIS_MODULE,BEEP_NAME);if (IS_ERR(beep.class)){return PTR_ERR(beep.class);}//5、创建设备beep.device device_create(beep.class, NULL, beep.devid, NULL, BEEP_NAME);if(IS_ERR(beep.device)){return PTR_ERR(beep.device);}return 0; } //驱动出口函数 static void __exit beep_exit(void) {//注销字符设备驱动cdev_del(beep.cdev); //删除cdevunregister_chrdev_region(beep.devid, BEEP_CNT); //删除设备号device_destroy(beep.class, beep.devid);class_destroy(beep.class); }module_init(beep_init); module_exit(beep_exit); MODULE_LICENSE(GPL); MODULE_AUTHOR(ssz); 3、编写测试APP 编写测试文件beepApp.c #include stdio.h #include unistd.h #include sys/types.h #include sys/stat.h #include fcntl.h #include stdlib.h #include string.h#define BEEPOFF 0 #define BEEPON 1int main(int argc, char *argv[]) {int fd,retvalue;char *filename;unsigned char databuf[1];if (argc ! 3){printf(Error Usage!\r\n);return -1;}filename argv[1];//打开beep驱动fd open(filename ,O_RDWR);if(fd 0){printf(file %s open failed!\r\n,argv[1]);return -1;}databuf[0] atoi(argv[2]);//向/dev/beep文件写入数据retvalue write(fd, databuf, sizeof(databuf));if(retvalue 0){printf(BEEP Control Failed!\r\n);close(fd);return -1;}retvalue close(fd); //关闭文件if(retvalue 0){printf(file %s close failed!\r\n,argv[1]);return -1;}return 0; } 四、运行测试 同前面章节步骤。
http://www.hkea.cn/news/14552597/

相关文章:

  • 九天智能建站软件工业设计作品集网站
  • 厦门公司注册网站温岭市建设工程质量安全网站
  • 企业网站建设案例wordpress ss管理
  • 如何做一张图片的网站中国外贸公司排行榜
  • 网站留言板怎么做自己做影视会员网站
  • 个人建设网站如何定位青海省城乡建设厅网站
  • 营销型网站建设的一般过程包括哪些环节谷歌浏览器中文手机版
  • 去掉wordpress副标题seo搜索引擎实训心得体会
  • 论网站建设情况梅州企业网站
  • 手机网站 标题长度备案需要网站建设方案书
  • 在线制作动画网站高州网站seo
  • 科技设计网站有哪些内容网站建设为风险分析
  • 网站没有域名amp网站建设
  • 网站设计外包网站做成小程序
  • 深圳大型网站建设服务公司微信开放平台开发者
  • tomcat做网站并发官方网站app
  • 网站搜索功能如何实现网站开发的论文引言
  • 湖南广源建设工程有限公司网站60平米一居室装修价格
  • 看装修效果图哪个网站好wordpress安装水煮鱼
  • 企业网站维护存在问题抖音搜索seo
  • 苏州教育学会网站建设福州天成设计
  • 祥云平台官方网站淘宝网站是语言用什么做的
  • 金华北京网站建设百度知道在线
  • 外贸网站推广建站推广营销网络
  • 福田做商城网站建设找哪家公司比较安全娱乐类网站怎么建设
  • 采购网站建设做游戏模型挣钱的网站
  • 网站icp备案怎么查询东莞软件开发培训
  • 网站后台英语去哪里做网站比较好
  • 网站优化网络推广seowordpress弹窗下载插件
  • 嘉兴自助建站系统免费加入微商代理