使用内存映射(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寄存器)操作实现。此外,在对音频操作时还要注意:一次采样得到的数据必须一次处理,否则不能正确播放数据。
本文关键字:嵌入式 嵌入式系统-技术,单片机-工控设备 - 嵌入式系统-技术