本文介绍了“如何实现对Linux字符设备的控制”的知识。很多人在实际案例的操作中会遇到这样的困难。接下来,让边肖带领大家学习如何应对这些情况!希望大家认真阅读,学点东西!
与led灯类似,蜂鸣器的设备节点也在/dev目录下,如下图所示。
蜂鸣器的硬件与led灯类似,如下图所示。
如上图所示。
示意图很容易理解。如果网络电机脉宽调制处于高电平,L9014将打开,蜂鸣器将鸣响。如果网络电机脉宽调制处于低电平,L9014将关闭,蜂鸣器不会鸣响。
操作类似于小型led灯。蜂鸣器测试例程
写一个简单的蜂鸣器测试c文件来测试蜂鸣器。
首先添加头文件,如下图所示。下面添加了几个常用的新库文件。当编写代码时,
为了方便,可以直接全部添加。
然后主要功能如下图所示。
如上面的代码所示。因为只有一个IO,底层不判断第三个参数,所以无效。
第16-19行,参数argv[1]有一个简单的判断,命令只能是0或1。
第21-24行,打开功能打开蜂鸣器装置节点。
第26行,使用ioctl功能操作蜂鸣器。
第27行,使用关闭功能关闭设备节点。
运行编译测试
在Ubuntu系统下,如下图所示,输入上一个实验创建的目录“/home/linuxsystemcode/char control”,复制源码buzzertest.c,如下图所示。
使用命令“arm-none-Linux-GNUEABI-GCC-O Buzzer test Buzzer test . c-static”编译蜂鸣器测试文件。如下图所示,可以看到蜂鸣器测试可执行文件是使用命令“ls”生成的。
这里介绍一下u盘上复制代码的方法,也可以编译成文件系统。
将编译后的可执行程序buzzertest复制到u盘,启动开发板,插入u盘,加载u盘,运行程序如下。
使用参数1和0,蜂鸣器将鸣响。第二个参数实际上不起作用。
如下图所示,使用参数0和0,蜂鸣器将停止鸣响。
17.4字符模数转换器模数转换
与led灯类似,数模转换的设备节点也在/dev目录中,如下图所示。
模数转换的硬件部分如下图所示。
如上图所示。
XadcAIN0网络可以读取当前输入电压。当滑动变阻器R移动时,电阻R12在1和2之间变化。滑动变阻器的最大电阻为
R13,然后电压 Vadc=R12*VDD1V8_EXT/R13
上面公式中 Vadc 可以通过 4412 读取出来,VDD1V8 和 R13 已知,那么就很容易求出 R12 的电阻。如下图所示,在 4412datasheet 中 ADC 章节中有真实的电阻和电压曲线图。
这里将数值做一个简单的换算,
1.8V 对应的是 10K 欧姆,对应的寄存器数值为 0xfff;
0V 对应的是 0 欧姆,对应的寄存器数值为 0x0。
这样做一个简单公式,将读取的数值 r 转化为电阻值 R。
R = r*10000/0xfff,即 R = r*10000/4095。
这个小公式在后面的代码中将会使用到。
模数转换例程
编写简单的 ADC.c 文件测试 adc 的驱动。首先添加头文件,如下图所示。
然后 main 函数如下图所示。
如上图代码所示。
第 14 行,设备节点为 char *adc = "/dev/adc"。
第 21 行,打开设备节点文件。
第 26 行,使用 read 函数,将读取数字赋予 buffer。
第 30 和 31 行,做个简单地换算,将读取的数值转化为电阻值。
编译运行测试
在 Ubuntu 系统下,如下图所示,进入前面实验创建的目录“/home/linuxsystemcode/charcontrol/”将源
码 ADC.c 拷贝进去,如下图所示。
使用命令“arm-none-linux-gnueabi-gcc -o ADC ADC.c -static”编译 ADC 文件,如下图所示,使用命令“ls”可以看到生成了 ADC 可执行文件。
这里介绍 U 盘拷贝代码的方法,也可以编译进文件系统,具体方法参考 10.3.5 小节。将编译成的可执行文件 open,拷贝到 U 盘,启动开发板,插入 U 盘,加载 U 盘,运行程序。
如下图所示,使用命令“./mnt/udisk/ADC”即可检测当前电阻值,中间的大段打印参数是多次打印寄存器的数值,在驱动实验中再去介绍。
调整滑动电阻器之后,再次使用测试程序,如下图所示,输出数值会有变化。
滑动变阻器向顺时针旋转,阻值会减小,最小为 0;
滑动变阻器向逆时针旋转,阻值会增大,最大为 10K。
“Linux字符设备控制怎么实现”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/113130.html