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

【嵌入式开发教程6】疯壳·平板电脑-音频驱动实验教程

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-8-4 10:46 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

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

x
音频驱动实验教程
——疯壳·嵌入式平板开发

& U3 A2 T. Y, H
6 L2 Q3 V# i6 F5 n
; K7 a3 C0 A8 W% ]: o0 o  v8 n5 u. `& d, S3 e# s
   
2 c: V$ B+ Y1 [/ b4 _   图1
! Q; ]0 {6 f/ |# O' T1 ]' v    如上图是音频模块 codec 和 cpu 连接框图,主要由三部分组成:
6 |  J5 z. q! ]) i    I2C 总线 - cpu 通过它实现对 Codec 寄存器数据的读写。
$ t: e1 |; h  n/ R    I2S 总线 - 实现音频数据在 CPU 和 Codec 间的通信。
/ n' k' \' ~, P3 T" Z    HP_DEC - 实现检测是否有 HeadSet 设备插入。
. \. W5 Z1 ?" [  }1 g; L, u. `# n( M) D. y; [
    第二节 linux workqueue 工作原理" I6 z  C  J+ E  h
    音频子系统的源代码中用到了一个概念:workqueue。对于不了解的朋友,读代码可能会引起疑惑,所以这里做一个简单介绍。Linux 中的 Workqueue 机制就是为了简化内核线程的创建,只是通过调用 workqueue 的接口就能创建内核线程;并且可以根据当前系统 CPU 的个数创建线程的数量,使得线程处理的事务能够并行化;workqueue 是内核中实现简单而有效的机制,它显然简化了内核 Daemon 的创建,方便了用户的编程。工作队列(workqueue) 是另外一种将工作推后执行的形式。它把工作推后,交由一个内核线程去执行,也就是说,   这个下半部分可以在进程上下文中执行。最重要的就是工作队列允许被重新调度甚至是睡眠。  举个栗子:
0 C' ?, E+ a8 W) c6 `5 g! O& L. l, H
; E- Z7 X* f& N" M+ |: \+ s5 X / S3 W4 Y8 o3 _6 M6 [
   0 g9 \3 I) f+ Q; l; z4 K8 |$ R2 E
    代码1
' G7 x; P$ {( }0 N0 Y
$ P* b7 S3 e6 I5 d' W% ?    第三节 电路原理图介绍
& ~/ n* L+ ^/ r: M    下图来源于文档 3128_sdk_a02_20170325.pdf 中第 18 页。* T- U7 c: V# U
    图一、绿色框中是 codec 芯片自己检测是否有 HeadSet 设备插入的电路原理图,它是通过 HP_HOOK(HP_HOOK 和 HP_DEC 是连在一条线上)与 cpu 的 ADC_IN0 连接,这个有点类似于 AD 按键检测的功能;音频 Codec 模块是数据与控制分开的,所以有 I2c 来控制 Codec 的寄存器的读写,数据通过 I2s 总线进行传输。
, e% _. c' }- g- t5 J+ s2 d! z- E6 S9 H9 H- Y+ b% [. \& D; c
5 ~+ |7 ^3 _: y) p6 I6 L
    图2+ A$ z1 d% k- T( U% X$ W
" w. \( A6 O5 d/ K" F: \  C
    第四节 音频驱动代码结构/ f( s0 i# g1 w

! Z! U: k5 R' X2 E- H, k% P    
8 ?  y2 b7 J0 l, S+ g    代码2& a3 l7 ?9 H# r2 X- ~) s

1 }, N$ ], C7 R% b    第五节 dts 文件讲解
: u3 A% w+ r7 u: ]# ~
, p$ x# v$ V( }2 m! H
# {* x6 W, o3 @* r1 i  V: G  r1 L   & E6 ?. G2 U' y( V! f, ?
    代码3
. m2 e  E" P7 ]# c. I  h8 d6 }) P
    HeadSet 配置文件# ~8 T7 Q  R: k5 x

" H  r4 K# j& }! Z    
7 l  y# @1 L2 d. q    代码4$ G! Q' J$ g4 p- ?8 V+ L& c" o8 m( H5 |
) K) |; ~; n$ q
    I2c 配置文件
% g5 g7 ~1 F! X0 G3 B; w- z/ h. g
% _6 `  R, Q8 h, N    
, t0 P; l: M+ u6 q    代码56 p" R! w7 X7 C) ~: w* Y
    I2s 配置文件4 `- V5 u; ?$ W1 E
    rockchip-rt3224 {9 ^; C1 O, H$ [* W8 G
: n7 x5 G# ^0 e2 v6 j9 ~

  k: i3 k  n5 E5 c/ y 8 Y) A  ?5 x0 v+ M! s" K8 y
   9 j, D' a* y! _# c0 y; O; h
    代码6
: k5 z, N; S" p  i5 r7 o' z0 p. r7 ]5 W- z# h
    第六节 实验代码* P& ?- v6 g4 _3 G+ `! S
    1.HeadSet 检测
! ]! h& l3 I5 Z' |. y    原理类似于一个 ad 按键的功能。% T, N. k/ w5 M# O+ W
    注意:这里如果要测试这个功能必须在 codec 中设置一个值:1 A6 W( d! U, g7 [( u/ m8 e
    codec_hp_det = <0>; ===> codec_hp_det = <1>;8 }2 ]7 j$ K$ U
    增加两条测试信息到如下代码中。
; c- N+ w/ x# n% t# f& m4 S. l
% v( q+ h: E# c( o     8 ^% E8 e* q8 ]  W
    代码7
  W+ t4 {; X+ c    耳机检测状态的调试:3 V9 s" o9 b0 _" l% Y4 c, {  t
    cat sys/class/switch/h2w/state 0:无耳机插入1 `  y6 d1 U3 s
    1:带Mic 耳机插入(四段耳机)4 f+ J$ ~4 P( Y: ]. }
    2:不带 Mic 耳机插入(三段耳机)$ c( \6 `$ i! l( [
    2.测试命令        amix
4 L) z9 H2 D6 h, Z; t    用 amix 命令来调节音量
' |9 v- A, U4 A% z    amix 11 0; Z$ N; @1 a+ c  k3 q2 [
    amix 11 120( R4 ~7 o! Y9 @* U& }

% n/ r2 @1 t& U" k8 E. u
: n3 d  J0 K. W# O7 ~
, {# W3 U! w8 z9 l% K7 C
0 }  ~: P0 M* j$ x" j3 d+ Y7 g& @8 }6 }
文件下载请点击: 6、音频驱动实验教程.pdf (507.76 KB, 下载次数: 0)
( H# q7 i% i7 k& D0 _: v8 v
: s5 I; L- N$ F3 O0 e- J* k5 L+ |

该用户从未签到

2#
发表于 2022-8-9 13:25 | 只看该作者
实验结果如何
' |+ i3 E3 p! f* L
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-22 02:28 , Processed in 0.140625 second(s), 27 queries , Gzip On.

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

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

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