您当前的位置:五五电子网电子知识单片机-工控设备嵌入式系统-技术基于IIS总线的嵌入式音频系统设计 正文
基于IIS总线的嵌入式音频系统设计

基于IIS总线的嵌入式音频系统设计

点击数:7438 次   录入时间:03-04 11:51:34   整理:http://www.55dianzi.com   嵌入式系统-技术
 
  为了解决音频应用I/O数据量大的问题,最简单易行的方法是使用比较大的缓存区域。但实际上大的缓存区需要更长的填充时间,在使用时会出现延时,并可能占用过多CPU资源。为了解决延时的问题,使用多段缓存机制。在这种机制下,将可用的缓存区分割成若干个相同大小的块。对较大的缓存区的操作转变成对较小的缓冲区块的操作,在不增加缓存区操作时间的情况下提供较大的缓存。不同的音频应用,精度不一样,需要的缓存大小也不一样
。所以在应用程序层上,驱动程序还必须提供接口让应用程序改变块的大小和个数。这个接口可以在ioctl中实现。对缓存区块的大小控制通过对audio_buf中的对应字段设置实现。   

      使用内存映射(mmap)技术是另一种提高系统性能的途径。Linux系统的内存空间分为内核空间和用户空间,驱动程序工作在内核空间,并负责在内核空间和用户空间传输数据。音频应用一般数据量比较大,而且有较高的质量要求,在驱动程序中还可以使用内存映射进一步提高CPU的利用率。内存映射通过remap_page_range将分配给DMA缓存区的内核空间的内存映射到用户空间,用户不需使用copy_to_user和copy_from_user将数据在内核空间与用户空间中拷贝。图4中缓存区状态和缓存区起点两个字段也用于内存映射服务。在实现时由于DMA的缓存结构复杂,需要将每个缓存块分别映射。   

      2.5 设备无关操作

      设备无关操作对应于file_operations指向的各个例程,它让用户用访问文件的方式访问设备。对设备的打开和读写是启动程序为用户程序提供的最主要接口,分别对应于file_operations中的open、read和write例程。在open例程中需要完成的任务主要是设备初始化,包括:   

      ·通过设置IIS寄存器控制音频设备的初始化,并且初始化设备的工作参数(包括速度、声道、采样宽度);   

      ·为设备分配DMA通道;   

      ·根据采样参数计算出缓存内段的大小(程序也可以指定缓存内段的大小);   

      当缓存区和DMA设置好后,读写操作主要对缓存操作,对设备的操作除了读写操作外,还有音频播放中的暂停和继续。这两个操作在ioctl接口中实现,通过对相应的IIS总线控制器(IISCON寄存器)操作实现。此外,在对音频操作时还要注意:一次采样得到的数据必须一次处理,否则不能正确播放数据。



上一页  [1] [2] 


本文关键字:嵌入式  嵌入式系统-技术单片机-工控设备 - 嵌入式系统-技术