基于某ARM的楼宇对讲系统设计Word文件下载.docx
- 文档编号:14439188
- 上传时间:2022-10-22
- 格式:DOCX
- 页数:7
- 大小:77.38KB
基于某ARM的楼宇对讲系统设计Word文件下载.docx
《基于某ARM的楼宇对讲系统设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《基于某ARM的楼宇对讲系统设计Word文件下载.docx(7页珍藏版)》请在冰豆网上搜索。
信息与通信工程系
基于ARM的楼宇对讲系统设计
摘要
近年来,基于ARM核的处理器被广泛应用,越来越多的楼宇对讲设备增加了语音、图像等多媒体处理能力。
本文利用三星的ARM9微处理器S3C2440和Philips公司的UDAl341芯片构建了一个嵌入式楼宇对讲系统,并给出硬件电路的设计和基于Linux的基本实现,该系统可以采样、传输语音信号,可以双工通话,可以应用于网络监控、视频传输等多种系统中。
关键词:
嵌入式;
ARM;
Linux;
音频;
驱动程序
1系统设计思路
1.1功能分析
传统的对讲系统中话路传输采用模拟信号传输,信令和数据往往采用简单的串行通讯方式,这必然造成重复投资,布线施工及调试的难度大大增加。
同时由于使用串行信号线,无法解决远距离信号衰减等问题。
随着嵌入式处理器技术的发展,原来被广泛采用的模拟语音通信技术正逐渐被数字语音技术所代替。
双向语音通信是楼宇对讲系统的基本功能,如何设计一个高效率的双向语音对讲系统对基于其上的多种应用都有很现实的技术意义。
由此,本文提出了一种利用三星公司的ARM92440处理器和Linux操作系统的楼宇对讲系统。
1.2设计思路
本文采用的嵌入式微处理器为三星公司的ARM92440处理器,该芯片是一款使用ARM公司的ARM920T处理器核,180nm制造工艺的32位微控制器。
其拥有独立的16KB指令Cache、16KB数据Cache和存储器管理单元,最高可运行在533MHz,具有更高的指令和数据处理能力,能够运行完整的Linux系统。
同时它集成了USB控制器、以太网控制、RTC、SPI、IIC等丰富的外围设备,系统采用的硬件平台的总体结构如图1-1所示。
本设计软硬件采用模块化嵌入式系统设计,使系统容易扩展,丰富了智能社区系统的功能。
其他相关硬件有中国DAVICOM公司的以太网接口芯片DM9000A,该芯片集成10/100M物理层接口,部带有用来接收发送数据的FIFO缓存SRAM16K字节,支持8/16bit两种主机工作模式,是实现嵌入式设备网络接口的理想选择。
SAMSUNG公司的64MNANDFLASH芯片K9F1208;
现代公司的32MSDRAM芯片;
IIS音频接口。
图1-1系统硬件设计结构图
2系统设计
2.1音频硬件设计
S3C2440置数字音频接口IIS,IIS(Inter-ICSound)是Philips公司提出的串行数字音频总线协议。
目前很多音频芯片和MCU都提供了对IIS的支持,UDA1341就是Philips公司生产的一款通用的支持IIS接口的音频芯片,其采用位流转换技术进行信号处理,具有可编程增益放大器(PGA)和数字自动增益控制器(AGC),提供两组音频信号输入接口,每组包括左右2个声道。
由于IIS总线只处理音频数据,因此UDA1341还置用于传输控制信号的L3总线接口,L3接口相当于混音器控制接口,可以控制输入/输出音频信号的高低音及音量大小等,UDA1341的L3总线由时钟、数据、模式3根线构成,UDA1341和S3C2440的连接如图2-1所示。
由于S3C2440具备IIS总线接口,所以可直接外接8/16比特的立体声CODEC,它还可以给FIFO通道提供DMA传输模式,从而使数据发送和接收同时进行。
IIS为了处理声音数据,提供了4根串行总线:
串行数据输入(I2SSDI)、串行数据输出(I2SSDO)、左右声道选择(IISLRCK)和串行位时钟(IISCLK)。
另外,CDCLK为UDA1341芯片提供音频A/D、D/A采样时的时钟信号。
S3C2440的IIS总线信号与UDAl34l的IIS信号直接相连。
图2-1UDA1341硬件原理图
S3C2440的TOUT2、TCLK0和TOUT3通用数据输出引脚和UDA1341TS的引脚L3MODE、L3CLOCK和L3DATA分别连接,可以控制输入/输出音频信号的低音及音量大小,UDAl34l对外提供两组音频信号输入接口,每组包括左右2个声道,本设计使用了其中的一组。
UDAl34l的VOUTL、VOUTR分别经过电容C405、C406和电阻R400、R401、R402、R403组成的低通滤波电路和扬声器相连接。
VINL1、VINR1经过电容C407和话筒相连[4]。
2.2音频驱动的实现
音频设备驱动程序除了对硬件的控制实现音频流的传输,还要向上层提供标准的音频接口。
设备驱动程序需要完成的工作包括:
对设备以及资源初始化及释放;
读取应用程序传送给设备文件的数据转交给系统底层处理,并回送应用程序请求的数据。
UDA1341芯片的驱动程序结构如图2-2所示,从上到下可以划分为:
用户接口层、数据I/O层、硬件接口层三个层次[2]。
设备驱动的具体实现包括设备初始化、DSP驱动、MIXER驱动和释放设备四部分。
MIXER(混音器)和DSP(数字信号处理器)是两个最基本的音频设备,MIXER的作用是将多个信号组合或者叠加在一起,在Linux系统中,其对应的设备文件是/dev/mixer,DSP为编解码器,实现录音和放音功能,其对应的设备文件是/dev/dsp。
图2-2音频芯片的驱动程序结构框图
2.3DSP驱动的实现
DSP设备读取数据时,从麦克输入的模拟信号经过低通滤波以后发送给A/D转换器,A/D转换器将模拟信号转变成数字信号并保存在音频驱动程序的核缓冲区中,同时还要向应用程序提供read()系统调用接口。
当向DSP设备写入数据时,数字信号会经过D/A转换器变成模拟信号,应用程序可以通过write()系统调用完成这个过程。
DSP驱动实现的主要工作就是完成file_operations中的open()、read()、write()、ioctl()等函数,其中ioctl()函数能够对采样率、量化精度、DMA缓冲区块大小等参数进行设置[1]。
为了提高传输速度和系统性能,本系统使用DMA技术直接将需要回放或录制的声音存放在核的DMA缓存区中,由于S3C2440的DMA控制器没有置的DMA存储区域,因而驱动程序必须在存中为音频设备分配DMA缓存区。
缓冲区大小的设置对系统性能有很大的影响,因为音频数据量通常较大,缓存太小容易造成缓存溢出,而如果要填充大的缓冲区,CPU就要一次处理大量的数据,这样处理数据时间较长,容易造成延迟。
为此,本文采用一个环形缓冲区(ringbuffer),将DMA缓冲区分成多个固定大小的块,块的大小可以通过ioctl()系统调用来调整,驱动程序每次在声音缓冲区传送一个块的数据到用户的应用程序中。
控制循环缓冲区的两个结构为:
typedefstruct{
intsize;
char*start;
dma_addr_tdma_addr;
structsemaphoresem;
intmaster;
}audio_buf_t;
audio_buf_t*buffers;
audio_buf_t*buf;
u_intbuf_idx;
u_intfragsize;
u_intnbfrags;
dmach_tdma_ch;
}audio_stream_t;
audio_buf_t记录了每个DMA缓存区的长度、虚拟地址、物理地址以及一个用来防止多个write对缓存区同时操作的信号量。
audio_stream_t包含了指向循环缓存区开始的指针,正被使用的缓存区的指针,每个缓存区的大小,缓存区的个数以及使用的DMA通道号。
如果要驱动DSP,还需要注册一个DSP设备,注册函数为:
Intregister_sound_dsp(struct_file_operations*fops,intdev);
参数fops是一个文件操作接口,第二个参数dev是设备编号,如果值为-1,则系统自动分配一个设备编号。
2.4MIXER驱动的实现
MIXER驱动只控制混音效果,可以控制输入/输出音频信号的低音及音量大小等[2]。
其中最主要的函数为:
staticintmixdev_ioctl(structinode*inod,structfile*file,unsignedintcmd,unsignedlongarg);
ioctl()函数通过不同的I/O控制命令来实现MIXER的不同功能。
本文实现的主要控制命令如表2-1。
用户的应用程序可以调用ioctl()函数对MIXER进行控制。
表2-1MIXER主要控制命令
控制命令
注释
SOUND_MIXER_INFO
返回MIXER信息
SOUND_MIXER_READ_STEREODEVS
获取设备对立体声的支持
SOUND_MIXER_READ_CAPS
获取声卡能力
SOUND_MIXER_WRITE_VOLUME
录音音量调节
SOUND_MIXER_READ_VOLUME
放音音量调节
SOUND_MIXER_READ_IGAIN
放音增益调节
SOUND_MIXER_WRITE_IGAIN
录音增益调节
2.5L3接口的设计
L3接口由S3C2440的引脚TOUT2、TCLK0和TOUT3组成,与S3C2440的B组通用寄存器GBB2、GPB3、GPB4复用。
在设备MIXER工作之前,需要对这些端口进行初始化,本文是用了下面的宏将引脚初始化为输出模式,低电平触发[2]。
set_gpio_ctrl(GPIO_MODE_OUT|GPIO_PULLUP_DIS|GPIO_B4);
set_gpio_ctrl(GPIO_MODE_OUT|GPIO_PULLUP_DIS|GPIO_B3);
set_gpio_ctrl(GPIO_MODE_OUT|GPIO_PULLUP_DIS|GPIO_B2);
2.6设备的安装与卸载
在UDA1341加载模块中,除了需要初始化IIS接口、设置L3总线对应的GPIO、设置UDA1341的工作模式外,还需要申请DMA通道和注册DSP和MIXER接口。
S3C2440具有4个DMA通道,为了实现存储器和I/O之间的传输,本文采用DMA通道1输出声音数据,DMA通道2来输入声音数据,其初始化的过程代码为:
output_stream.dma_ch=DMA_CH2;
if(audio_init_dma(&
output_stream,"
UDA1341out"
)){
audio_clear_dma(&
output_stream);
printk(KERN_WARNINGAUDIO_NAME_VERBOSE"
:
unabletoget
DMAchannels\n"
);
return-EBUSY;
}
input_stream.dma_ch=DMA_CH1;
input_stream,"
UDA1341in"
input_stream);
设备的卸载由注销函数close()来完成。
注销函数释放驱动程序使用的各种系统资源,如DMA和缓冲区等。
3系统工作流程
3.1工作流程
设备驱动程序完成以后,就可以在用户空间实现数据的输入和输出,其程序流程如图3-1所示。
图3-1用户录音放音程序
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 ARM 楼宇 对讲 系统 设计