找回密码
 注册
关于网站域名变更的通知
查看: 332|回复: 1
打印 上一主题 下一主题

迅为4412开发板Linux字符设备控制(二)

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2021-3-9 15:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
17.3  字符类 Buzzer  蜂鸣器, B# ]5 `9 n* [2 Q
和 led 灯类似,蜂鸣器的设备节点也是在/dev 目录下,如下图所示。, C6 m- @) G) l, J" p

( E7 U, N% K8 N蜂鸣器的硬件和 led 灯类似,如下图所示。
8 U2 K! C: ?# P, A& y+ o& L% U  @
4 E# I! H; n/ D( u6 G1 l: B如上图所示。
0 A4 \+ y5 O1 \2 T9 L( J4 A原理图很容易理解,如果网络 MOTOR_PWM 为高电平,则 L9014 导通,蜂鸣器响,如果网络MOTOR_PWM 为低电平,则 L9014 截止,蜂鸣器则不响。% z% E% ]0 o0 b  G) W3 m2 d
操作方式和 led 小灯类似。( M, V3 f! g9 D# v/ ^0 F. g1 O
蜂鸣器测试例程! }3 k$ m3 s/ l: P
编写简单的 buzzertest.c 文件测试蜂鸣器。3 n1 ^) b- H( C3 p; g8 U* z+ U
首先添加头文件,如下图所示,下面新加了几个库文件,一般常用的就是下面几个,写代码的时候,
5 N' F$ a+ E% g7 C) z+ G8 o& R为了方便,可以直接都添加上。
% F9 B. A$ `( A
7 X$ K  m8 X$ h* j然后 main 函数如下图所示。# C5 b) q/ s' v" ^* m

, x$ i. t# N- B& b; d如上图代码所示。由于只有一个 IO,底层没有做第三个参数的判断,所以无效, [/ ^3 z1 ?  f2 ~$ p4 _: T
第 16-19 行,对参数 argv[1]有个简单的判断,命令只能是 0 或者 1。  z2 J" H9 _% @9 n2 u: w
第 21-24 行,open 函数打开蜂鸣器设备节点
7 O) d# l8 [% [( E" \; L第 26 行,使用 ioctl 函数操作蜂鸣器。
$ e- M4 g* E1 E) `( D" F: \第 27 行,使用 close 函数关闭设备节点。
! r& h0 _+ t& i# s: D. j编译运行测试; `, {5 L! a. u5 F" D  u0 t
Ubuntu 系统下,如下图所示,进入前面实验创建的目录“/home/linuxsystEMCode/charcontrol”,将源码 buzzertest.c 拷贝进去,如下图所示。
  e4 w: D) L2 b) w. u; L1 |* o+ e: T! V3 G, w
使用命令“ARM-none-linux-gnueabi-gcc -o buzzertest buzzertest.c -static”编译buzzertest 文件,如下图所示,使用命令“ls”可以看到生成了 buzzertest 可执行文件。0 k* V3 E: g; `& N/ W8 T

9 F7 Y' ~. z+ I0 M' f8 Y这里介绍 U 盘拷贝代码的方法,也可以编译进文件系统。& O) n6 C' c8 F# o  ]: v2 a
将编译成的可执行文件 buzzertest,拷贝到 U 盘,启动开发板,插入 U 盘,加载 U 盘, 运行程序如下。
1 r7 a! P) M) H* N4 @使用参数 1 和 0,蜂鸣器会响。第二个参数实际上并不起作用。$ {; t2 Z1 \; b4 w1 k/ \

0 F7 |- ^4 D: A9 @% |  j1 P如下图所示,使用参数 0 和 0,蜂鸣器会停止响。* n5 p9 G' g* C2 {5 b4 V. Q
& G* ^7 _3 t' E8 u0 w+ {9 [0 a
17.4  字符类 ADC  模数转换7 l1 q- _" ~+ M" u+ N: U
和 led 灯类似,数模转换的设备节点也是在/dev 目录下,如下图所示。* p( p/ H) k, z7 `; p/ s1 s
% s9 [# t0 X1 _/ i) i& [' r
模数转换的硬件部分如下图所示。: a8 O+ F* \  f0 t  J, @$ l, @

- @5 v* E/ }+ _' q5 a/ k4 S: l如上图所示。
* C- C% p& E. y2 k% HXadcAIN0 网络可以读取到当前输入电压,滑动变阻器 R 移动的时候,1 和 2 之间的电阻 R12 改变,滑动变阻器最大电阻为 R13,然后电压 Vadc=R12*VDD1V8_EXT/R13
5 s- i" H  |" y# z! w- @% S! b2 m上面公式中 Vadc 可以通过 4412 读取出来,VDD1V8 和 R13 已知,那么就很容易求出 R12 的电阻。如下图所示,在 4412datasheet 中 ADC 章节中有真实的电阻和电压曲线图。" \3 R1 m" ~2 [2 q; x# p% E

" s- q2 ?( x  a) M( F3 }) m9 w这里将数值做一个简单的换算,
) l0 H) I. ^) ?  {( A4 ^' a) K1.8V 对应的是 10K 欧姆,对应的寄存器数值为 0xfff;
' a9 d  E0 O: [  @/ Z  G4 ]) h0V 对应的是 0 欧姆,对应的寄存器数值为 0x0。* Q; K6 Y) l- H% D
这样做一个简单公式,将读取的数值 r 转化为电阻值 R。! d; F- T/ l+ I9 T, x7 Q
R = r*10000/0xfff,即 R = r*10000/4095。
$ a1 r$ n3 n0 ~2 p. l% p2 D4 Q这个小公式在后面的代码中将会使用到。! I" ?1 c: E0 C6 ]& u' d# B
模数转换例程
$ s; N) }& K0 Q$ f' Z4 B编写简单的 ADC.c 文件测试 adc 的驱动。首先添加头文件,如下图所示。' ^& o- `4 r3 f8 c  N

$ L3 N& k3 f# V7 n! k! g. W& P% f然后 main 函数如下图所示。
( ^2 D. S$ `3 |' t) g3 e# K% C: h( N8 |- ?+ N: y' j% y$ ]
如上图代码所示。  g/ m! Z, V4 |1 q1 S% L
第 14 行,设备节点为 char *adc = "/dev/adc"。
7 S) f: l; [' w: U7 ?第 21 行,打开设备节点文件。
' N2 j) i/ M' o- s' v5 q, W第 26 行,使用 read 函数,将读取数字赋予 buffer。
+ b. y8 l3 j, e  P第 30 和 31 行,做个简单地换算,将读取的数值转化为电阻值。4 w5 C- g/ o! B9 q9 Y0 K4 I
编译运行测试
: L2 m  N; ]0 s7 `6 o$ I% A% C0 r6 c' L在 Ubuntu 系统下,如下图所示,进入前面实验创建的目录“/home/linuxsystemcode/charcontrol/”将源2 q; o  ?- ^0 V2 s7 o
码 ADC.c 拷贝进去,如下图所示。' l# N4 C% D7 L" }: _" w
! y+ b4 S" O0 z+ \: G' X5 x+ U
使用命令“arm-none-linux-gnueabi-gcc -o ADC ADC.c -static”编译 ADC 文件,如下图所示,使用命令“ls”可以看到生成了 ADC 可执行文件。0 g+ F& M' L- g* v' M- p
+ K/ D$ ^/ O, W1 f
这里介绍 U 盘拷贝代码的方法,也可以编译进文件系统,具体方法参考 10.3.5 小节。将编译成的可执行文件 open,拷贝到 U 盘,启动开发板,插入 U 盘,加载 U 盘,运行程序。
" ]0 e& O" z# _2 j6 n如下图所示,使用命令“./mnt/udisk/ADC”即可检测当前电阻值,中间的大段打印参数是多次打印寄存器的数值,在驱动实验中再去介绍。1 Y( e$ k" g7 B0 h! _" |

3 y5 ?. [; |" a& L% Y调整滑动电阻器之后,再次使用测试程序,如下图所示,输出数值会有变化。
8 n4 V  F0 q3 Y; P
% K( b) T0 I% i滑动变阻器向顺时针旋转,阻值会减小,最小为 0;
( M1 Z$ [9 d5 i% P3 M滑动变阻器向逆时针旋转,阻值会增大,最大为 10K。
# k1 m- G& t/ X: `6 `4 s6 |" H! K1 [. C6 N+ f2 [, M
3 P4 W2 i3 E8 ]) q; ~

该用户从未签到

2#
发表于 2021-3-10 10:18 | 只看该作者
                                            
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-24 13:39 , Processed in 0.140625 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表