设为首页 收藏本站
查看: 644|回复: 0

[经验分享] SylixOS下IIS驱动编程

[复制链接]

尚未签到

发表于 2018-12-8 08:34:32 | 显示全部楼层 |阅读模式

  1. IIS简介    1
  2. 数字声音简介    1
2.1    采样频率    1
2.2    量化位数    1
2.3    声道数    1
  3. WAV音频文件格式简介    2
3.1    文件格式    2
3.2    原始声音数据的组织方式    2
  4. Mini2440声卡的连接方式    3
4.1    相关连线说明    3
  5. SylixOS下的OSS音频驱动接口    3
  6. 播放声音流程    4
  7. 录音流程    5

  • IIS简介
      IIS是飞利浦公司开发的一种用于数字音频设备之间进行数据传输的总线,IIS只负责音频数据的传输,对音频的控制需要另外的芯片来控制,一般声卡都会有IIS接口和控制接口,两者共同协作来完成声音数据的传输和控制。如图 11所示:

    11  声音传输示意图

  • 数字声音简介
      主要介绍数字声音的几个指标:
  • 采样频率
      采样频率fs就是录音时每秒对声音信号的采样次数,播放时最好也以采样频率播放,否则声音听起来会变音。常见的采样频率有22.050kHz、44.100kHz、48.000kHz等。
  • 量化位数
      量化位数指对声音采样结果用几位数据保存,这和声卡中的ADC的位数相关,常见的有8位、16位等。
  • 声道数
      分为单声道和双声道,双声道就是左右两个声道,又称为立体声,另外更高级的有5声道和7声道。
      单声道声音采样如图 21所示,横轴表示时间,纵轴表示采样结果,蓝色线条表示声音的原始波形。

    21  声音采样示意图

  • WAV音频文件格式简介
  • 文件格式
      如图 31所示,WAV音频文件由3部分组成:头部区域、格式描述区域和数据区域。其中格式区域记录了音频的声道数、采样频率、和量化位数等信息,数据区域记录了声音的数据,这些数据是原始数据,没有经过压缩的。像mp3等格式的音频文件中的数据都是经过压缩的数据。

    31  WAV文件格式

  • 原始声音数据的组织方式
      如图 32所示,为4种情况下WAV文件中音频数据的组织方式。

    32  WAV声音数据组织方式

  • Mini2440声卡的连接方式
      如图 41所示,在mini2440中,声卡的型号为UDA1341TS,和IIS接口相关的有5根线,还有另外3条线用于音频控制。

    41  声卡连接图

  • 相关连线说明
      CDCLK:声卡工作时钟,一般为采样频率的256、384、512倍,即256fs、384fs、512fs
      I2SSCLK:数据串行时钟,数值为量化位数*声道数*采样频率。如果量化位数为16,声道数为2,则I2SSCLK=32fs
      I2SLRCLK:左右声道切换频率,该数值应等于采样频率
      I2SSDI:音频数据输入,即由声卡传输数据给2440,录音状态
      I2SSDO:音频数据输出,即由2440传输数据给声卡,播放状态
      控制接口:根据声卡的不同,接口也不同,比如有的是I2C接口,有的是L3接口,具体看声卡手册。控制接口主要控制声音的音量,是否静音,增益等。
      播放和录音时,三个时钟频率要设置正确,否则没有声音或者声音失真。
  • SylixOS下的OSS音频驱动接口
      SylixOS下的OSS音频驱动接口可以在SylixOS\system\device\sound\soundcard.h中查看,主要有几点需要注意:
      播放和录音是通过读写/dev/dsp设备来实现的
      音量、增益等控制是通过读写/dev/mixer设备来实现的
      应用程序通过ioctl来进行参数设置、控制等操作,并且具体操作对应ioctl中的命令都在soundcard.h定义好了,比如:
      设置量化位数是用"SNDCTL_DSP_SETFMT",设置采样频率是"SNDCTL_DSP_SPEED",设置音量是用"SOUND_MIXER_WRITE_VOLUME"等等。
  • 播放声音流程
      1. CPU从上层拷贝音频数据到缓冲区,拷贝完成一个缓冲区后发送一个DMA传输请求,这时DMA开始传送刚刚拷贝好的缓冲区数据,同时CPU继续从上层拷贝音频数据到下一个缓冲区,如图 61所示。

    61  CPU拷贝,DMA传输

      2. CPU拷贝数据的速度是比DMA传送数据速度快的,所以当发生CPU要拷贝到的缓冲区和DMA当前正在处理的缓冲区重叠时,需要阻塞线程,这是通过信号量实现的,如图 62所示。

    62  阻塞线程

      3. 当DMA传送完成后产生中断,在中断处理程序中唤醒刚才阻塞的线程,CPU就可以继续拷贝数据到刚才DMA处理的缓冲区里了,如图 63所示。

    63  唤醒线程

  • 录音流程
      录音的流程和播放流程大体相似,只是先由DMA传送数据到缓冲区,然后由CPU拷贝缓冲区内容给上层应用程序。当CPU处理的缓冲区和DMA当前处理的缓冲区重合时,同样阻塞线程,直到DMA处理完后在中断中唤醒。




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-644491-1-1.html 上篇帖子: ASP.NET一个简易的WebServer,用控制台程序模拟IIS 托起web服务 下篇帖子: ECS Windows服务器IIS搭建HTTPS网站操作方法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

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