【嵌入式开发教程7】手把手教你做平板电脑-音频驱动实验教程
音频驱动实验教程
——疯壳·嵌入式平板开发
图1
如上图是音频模块 codec 和 cpu 连接框图,主要由三部分组成:
I2C 总线 - cpu 通过它实现对 Codec 寄存器数据的读写。
I2S 总线 - 实现音频数据在 CPU 和 Codec 间的通信。
HP_DEC - 实现检测是否有 HeadSet 设备插入。
第二节 linux workqueue 工作原理
音频子系统的源代码中用到了一个概念:workqueue。对于不了解的朋友,读代码可能会引起疑惑,所以这里做一个简单介绍。Linux 中的 Workqueue 机制就是为了简化内核线程的创建,只是通过调用 workqueue 的接口就能创建内核线程;并且可以根据当前系统 CPU 的个数创建线程的数量,使得线程处理的事务能够并行化;workqueue 是内核中实现简单而有效的机制,它显然简化了内核 Daemon 的创建,方便了用户的编程。工作队列(workqueue) 是另外一种将工作推后执行的形式。它把工作推后,交由一个内核线程去执行,也就是说, 这个下半部分可以在进程上下文中执行。最重要的就是工作队列允许被重新调度甚至是睡眠。 举个栗子:
代码1
第三节 电路原理图介绍
下图来源于文档 3128_sdk_a02_20170325.pdf 中第 18 页。
图一、绿色框中是 codec 芯片自己检测是否有 HeadSet 设备插入的电路原理图,它是通过 HP_HOOK(HP_HOOK 和 HP_DEC 是连在一条线上)与 cpu 的 ADC_IN0 连接,这个有点类似于 AD 按键检测的功能;音频 Codec 模块是数据与控制分开的,所以有 I2c 来控制 Codec 的寄存器的读写,数据通过 I2s 总线进行传输。
图2
第四节 音频驱动代码结构
代码2
第五节 dts 文件讲解
代码3
HeadSet 配置文件
代码4
I2c 配置文件
代码5
I2s 配置文件
rockchip-rt3224 {
代码6
第六节 实验代码
1.HeadSet 检测
原理类似于一个 ad 按键的功能。
注意:这里如果要测试这个功能必须在 codec 中设置一个值:
codec_hp_det = <0>; ===> codec_hp_det = <1>;
增加两条测试信息到如下代码中。
代码7
耳机检测状态的调试:
cat sys/class/switch/h2w/state 0:无耳机插入
1:带Mic 耳机插入(四段耳机)
2:不带 Mic 耳机插入(三段耳机)
2.测试命令 amix
用 amix 命令来调节音量
amix 11 0
amix 11 120
配套资料:https://www.fengke.club
套件地址:http://shop115904315.taobao.com
【嵌入式开发教程7】手把手教你做平板电脑-音频驱动实验教程相关推荐
- 【嵌入式开发教程6】手把手教你做平板电脑-触摸屏驱动实验教程
触摸屏驱动实验教程 --疯壳·嵌入式平板开发 第一节 input 输入子系统简单介绍 --- rockchip_gslX680_rk3168.c 触摸屏驱动注册到 input 子系统中后要遵循的框架结 ...
- 【疯壳·嵌入式平板开发教程5】手把手教你做平板电脑-触摸屏驱动实验教程
触摸屏驱动实验教程 --疯壳·嵌入式平板开发 第一节 input 输入子系统简单介绍 --- rockchip_gslX680_rk3168.c 触摸屏驱动注册到 input 子系统中后要遵循的框架结 ...
- 【嵌入式开发教程9】手把手教你做平板电脑-WIFI 驱动实验教程
WIFI 驱动实验教程 --疯壳·嵌入式平板开发 第一节 电路原理图介绍 下图来源于文档 3128_sdk_a02_20170325.pdf 中第 16 页. CMD 信号(用于传送命令和反应): ...
- 【嵌入式开发教程8】手把手教你做平板电脑-Camera 驱动实验教程
Camera 驱动实验教程 --疯壳·嵌入式平板开发 第一节 电路原理图介绍 参考文档 3128_sdk_a02_20170325.pdf 中第 17 页. 第二节 Camera 驱动框架及实现 图1 ...
- 【疯壳·嵌入式平板开发教程1】手把手教你做平板电脑-Linux 引导过程
Linux 引导过程 --疯壳·嵌入式平板开发 Linux 内核与 Android 系统 linux 内核有什么区别? 什么是引导装载程序? 什么是 Zygote? 什么是 init. ...
- 【疯壳·平板教程1】手把手教你做平板电脑-Linux 引导过程
Linux 引导过程 --疯壳·嵌入式平板开发 Linux 内核与 Android 系统 linux 内核有什么区别? 什么是引导装载程序? 什么是 Zygote? 什么是 init. ...
- 手把手教你做产品经理,视频课教程已经发布,欢迎观看
手把手教你做产品经理,视频课教程已经发布,欢迎观看 http://edu.51cto.com/course/course_id-5062.html 转载于:https://blog.51cto.com ...
- Blender图解教程:手把手教你做一个马里奥金币 之 图片转法线贴图法(附模型下载)
<Blender图解教程:手把手教你做一个马里奥金币 之 比较传统的方法>介绍了一种用Blender制作法线贴图的流程,本文介绍一种更加省事的方法. 步骤 效果图 概要 步骤 1. 建模 ...
- Blender图解教程:手把手教你做马里奥问号箱 二 强迫症修复版(附模型下载)
看完 <Blender图解教程:手把手教你做马里奥问号箱>有强迫症同学反应对最后的结果不能忍.那么老王教大家修复一下.初学的同学可以通过这个例子进一步理解一下什么是UV. 修复前 如果你没 ...
最新文章
- tabnavigator_使用TabNavigator在Firefox中享受桌面Alt-Tab样式导航
- 剑指offer之二叉搜索树和双向链表
- Java Annotation认知(包括框架图、详细介绍、示例说明)
- 行为设计模式 - 命令设计模式
- Charles使用详解
- 数据库课程设计报告总结
- 公式经纬度换算度分秒,度分秒换算经纬度
- Python自动采集微信联系人
- ffmpeg wav 转 mp3 以及其他音频转换
- android强制开启深色模式bug,强制深色模式软件
- Linux设备驱动 | LED字符设备驱动(platform平台总线)
- 关于浏览器显示出现中文乱码问题(已解决)
- 前后端分离开发模式介绍
- [2017纪中10-25]嘟噜噜 约瑟夫问题 递推
- mysql主备集群(高可用)
- windows输入法只有中文导致无法使用一系列快捷键问题
- 绩效考核-项目经理绩效考核指标
- 君正平台JZ4775芯片参数详细说明,大家可以看看
- argparse简化版图片教程
- C++中的取余函数%、remainder、fmod以及matlab中的取余函数mod
热门文章
- hpc与超级计算机的区别,超级计算和高性能计算(HPC)的综合分析
- linux 中 read 的用法
- C++利用SIO_GET_INTERFACE_LIST查询网关
- zabbix监控软件介绍<一>
- OS-实现一个RR调度算法
- HttpClient 出现 failed to respond 异常解决
- android 拍摄视频设置参数,手机如何设置参数,才能拍出高清视频?
- java继承求5个圆柱体积_编写Javat程序,计算并输出一个半径为10.5,高为20的圆柱体的体积。...
- 我为 Redis 找到了一个新家——Redis 之父当年的困兽之斗
- 刷酸记录(迪维维A酸乳膏)20190905