【嵌入式开发教程7】手把手教你做平板电脑-音频驱动实验教程

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

【嵌入式开发教程7】手把手教你做平板电脑-音频驱动实验教程_第1张图片  
   图1 
    如上图是音频模块 codec 和 cpu 连接框图,主要由三部分组成:
    I2C 总线 - cpu 通过它实现对 Codec 寄存器数据的读写。
    I2S 总线 - 实现音频数据在 CPU 和 Codec 间的通信。
    HP_DEC - 实现检测是否有 HeadSet 设备插入。
    
    第二节 linux workqueue 工作原理
    音频子系统的源代码中用到了一个概念:workqueue。对于不了解的朋友,读代码可能会引起疑惑,所以这里做一个简单介绍。Linux 中的 Workqueue 机制就是为了简化内核线程的创建,只是通过调用 workqueue 的接口就能创建内核线程;并且可以根据当前系统 CPU 的个数创建线程的数量,使得线程处理的事务能够并行化;workqueue 是内核中实现简单而有效的机制,它显然简化了内核 Daemon 的创建,方便了用户的编程。工作队列(workqueue) 是另外一种将工作推后执行的形式。它把工作推后,交由一个内核线程去执行,也就是说,   这个下半部分可以在进程上下文中执行。最重要的就是工作队列允许被重新调度甚至是睡眠。  举个栗子:
    
【嵌入式开发教程7】手把手教你做平板电脑-音频驱动实验教程_第2张图片【嵌入式开发教程7】手把手教你做平板电脑-音频驱动实验教程_第3张图片    
    代码1
    
    第三节 电路原理图介绍
    下图来源于文档 3128_sdk_a02_20170325.pdf 中第 18 页。
    图一、绿色框中是 codec 芯片自己检测是否有 HeadSet 设备插入的电路原理图,它是通过 HP_HOOK(HP_HOOK 和 HP_DEC 是连在一条线上)与 cpu 的 ADC_IN0 连接,这个有点类似于 AD 按键检测的功能;音频 Codec 模块是数据与控制分开的,所以有 I2c 来控制 Codec 的寄存器的读写,数据通过 I2s 总线进行传输。
    
【嵌入式开发教程7】手把手教你做平板电脑-音频驱动实验教程_第4张图片    
    图2
    
    第四节 音频驱动代码结构
    
【嵌入式开发教程7】手把手教你做平板电脑-音频驱动实验教程_第5张图片    
    代码2
    
    第五节 dts 文件讲解
    
【嵌入式开发教程7】手把手教你做平板电脑-音频驱动实验教程_第6张图片    
    代码3
    
    HeadSet 配置文件
    
【嵌入式开发教程7】手把手教你做平板电脑-音频驱动实验教程_第7张图片    
    代码4
    
    I2c 配置文件
    
【嵌入式开发教程7】手把手教你做平板电脑-音频驱动实验教程_第8张图片    
    代码5
    I2s 配置文件
    rockchip-rt3224 {
    
【嵌入式开发教程7】手把手教你做平板电脑-音频驱动实验教程_第9张图片【嵌入式开发教程7】手把手教你做平板电脑-音频驱动实验教程_第10张图片    
    代码6
    
    第六节 实验代码
    1.HeadSet 检测
    原理类似于一个 ad 按键的功能。
    注意:这里如果要测试这个功能必须在 codec 中设置一个值:
    codec_hp_det = <0>; ===> codec_hp_det = <1>;
    增加两条测试信息到如下代码中。
    
【嵌入式开发教程7】手把手教你做平板电脑-音频驱动实验教程_第11张图片    
    代码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 
 

你可能感兴趣的:(平板电脑,音视频,嵌入式硬件,mcu,arm,驱动开发)