基于ARM的楼宇对讲系统设计研究分析

上传人:无*** 文档编号:65098905 上传时间:2022-03-23 格式:DOC 页数:12 大小:612KB
收藏 版权申诉 举报 下载
基于ARM的楼宇对讲系统设计研究分析_第1页
第1页 / 共12页
基于ARM的楼宇对讲系统设计研究分析_第2页
第2页 / 共12页
基于ARM的楼宇对讲系统设计研究分析_第3页
第3页 / 共12页
资源描述:

《基于ARM的楼宇对讲系统设计研究分析》由会员分享,可在线阅读,更多相关《基于ARM的楼宇对讲系统设计研究分析(12页珍藏版)》请在装配图网上搜索。

1、 基于ARM的楼宇对讲系统设计班 级: 电信 12-2 姓 名: 李 猛 学 号: 1206110207 指导教师: 张沛泓 成 绩: 电子与信息工程学院信息与通信工程系技术发展基于ARM的楼宇对讲系统设计摘要近年来,基于ARM内核的处理器被广泛应用,越来越多的楼宇对讲设备增加了语音、图像等多媒体处理能力。本文利用三星的ARM9微处理器S3C2440和Philips公司的UDAl341芯片构建了一个嵌入式楼宇对讲系统,并给出硬件电路的设计和基于Linux的基本实现,该系统可以采样、传输语音信号,可以双工通话,可以应用于网络监控、视频传输等多种系统中。关键词:嵌入式;ARM;Linux;音频;驱

2、动程序1 系统设计思路1.1 功能分析传统的对讲系统中话路传输采用模拟信号传输,信令和数据往往采用简单的串行通讯方式,这必然造成重复投资,布线施工及调试的难度大大增加。同时由于使用串行信号线,无法解决远距离信号衰减等问题。随着嵌入式处理器技术的发展,原来被广泛采用的模拟语音通信技术正逐渐被数字语音技术所代替。双向语音通信是楼宇对讲系统的基本功能,如何设计一个高效率的双向语音对讲系统对基于其上的多种应用都有很现实的技术意义。由此,本文提出了一种利用三星公司的ARM9 2440处理器和Linux操作系统的楼宇对讲系统。1.2 设计思路本文采用的嵌入式微处理器为三星公司的ARM9 2440处理器,该

3、芯片是一款使用ARM公司的ARM920T处理器核,180nm制造工艺的32位微控制器。其拥有独立的16KB指令Cache、16KB数据Cache和存储器管理单元,最高可运行在533MHz,具有更高的指令和数据处理能力,能够运行完整的Linux系统。同时它集成了USB控制器、以太网控制、RTC、SPI、IIC等丰富的外围设备,系统采用的硬件平台的总体结构如图1-1所示。本设计软硬件采用模块化嵌入式系统设计,使系统容易扩展,丰富了智能社区系统的功能。其他相关硬件有中国台湾DAVICOM公司的以太网接口芯片DM9000A,该芯片集成10/100M物理层接口,内部带有用来接收发送数据的FIFO缓存SR

4、AM 16K字节,支持8/16bit两种主机工作模式,是实现嵌入式设备网络接口的理想选择。SAMSUNG公司的64M NAND FLASH芯片K9F1208;现代公司的32M SDRAM芯片;IIS音频接口。2440核心板S3C2440 CPU64M SDRAM64M NAND FLASHSD卡接口3路RS232接口SPI、IIC接口2路变频输出3.5寸触摸屏接口10M/100M网络接口4个发光二极管4个按键电源、复位逻辑电路、JTAG调试接口IIS音频接口2路USB接口图1-1 系统硬件设计结构图2 系统设计2.1 音频硬件设计S3C2440内置数字音频接口IIS,IIS(Inter-IC

5、Sound)是Philips公司提出的串行数字音频总线协议。目前很多音频芯片和MCU都提供了对IIS的支持,UDA1341就是Philips公司生产的一款通用的支持IIS接口的音频芯片,其采用位流转换技术进行信号处理,具有可编程增益放大器(PGA)和数字自动增益控制器(AGC),提供两组音频信号输入接口,每组包括左右2个声道。由于IIS总线只处理音频数据,因此UDA1341还内置用于传输控制信号的L3总线接口,L3接口相当于混音器控制接口,可以控制输入/输出音频信号的高低音及音量大小等,UDA1341的L3总线由时钟、数据、模式3根线构成,UDA1341和S3C2440的连接如图2-1所示。由

6、于S3C2440具备IIS总线接口,所以可直接外接8/16比特的立体声CODEC,它还可以给FIFO通道提供DMA传输模式,从而使数据发送和接收同时进行。IIS为了处理声音数据,提供了4根串行总线:串行数据输入(I2SSDI)、串行数据输出(I2SSDO)、左右声道选择(IISLRCK)和串行位时钟(IISCLK)。另外,CDCLK为UDA1341芯片提供音频A/D、D/A采样时的时钟信号。S3C2440的IIS总线信号与UDAl34l的IIS信号直接相连。图2-1 UDA1341硬件原理图S3C2440的TOUT2、TCLK0和TOUT3通用数据输出引脚和UDA1341TS的引脚L3MODE

7、、L3CLOCK和L3DATA分别连接,可以控制输入/输出音频信号的低音及音量大小,UDAl34l对外提供两组音频信号输入接口,每组包括左右2个声道,本设计使用了其中的一组。UDAl34l的VOUTL、VOUTR分别经过电容C405、C406和电阻R400、R401、R402、R403组成的低通滤波电路和扬声器相连接。VINL1、VINR1经过电容C407和话筒相连4。2.2 音频驱动的实现音频设备驱动程序除了对硬件的控制实现音频流的传输,还要向上层提供标准的音频接口。设备驱动程序需要完成的工作包括:对设备以及资源初始化及释放;读取应用程序传送给设备文件的数据转交给系统底层处理,并回送应用程序

8、请求的数据。UDA1341芯片的驱动程序结构如图2-2所示,从上到下可以划分为:用户接口层、数据I/O层、硬件接口层三个层次2。设备驱动的具体实现包括设备初始化、DSP驱动、MIXER驱动和释放设备四部分。MIXER(混音器)和DSP(数字信号处理器)是两个最基本的音频设备,MIXER的作用是将多个信号组合或者叠加在一起,在Linux系统中,其对应的设备文件是/dev/mixer,DSP为编解码器,实现录音和放音功能,其对应的设备文件是/dev/dsp。UDA1341设备驱动用户接口层:DSP设备驱动、MIXER设备驱动DMA方式数据输入DMA方式数据输出UDA1341硬件接口层一层二层三层图

9、2-2 音频芯片的驱动程序结构框图2.3 DSP驱动的实现DSP设备读取数据时,从麦克输入的模拟信号经过低通滤波以后发送给A/D转换器,A/D转换器将模拟信号转变成数字信号并保存在音频驱动程序的内核缓冲区中,同时还要向应用程序提供read()系统调用接口。当向DSP设备写入数据时,数字信号会经过D/A转换器变成模拟信号,应用程序可以通过write()系统调用完成这个过程。DSP驱动实现的主要工作就是完成file_operations中的open()、read()、write()、ioctl()等函数,其中ioct l()函数能够对采样率、量化精度、DMA缓冲区块大小等参数进行设置1。为了提高传

10、输速度和系统性能,本系统使用DMA技术直接将需要回放或录制的声音存放在内核的DMA缓存区中,由于S3C2440的DMA控制器没有内置的DMA存储区域,因而驱动程序必须在内存中为音频设备分配DMA缓存区。缓冲区大小的设置对系统性能有很大的影响,因为音频数据量通常较大,缓存太小容易造成缓存溢出,而如果要填充大的缓冲区,CPU就要一次处理大量的数据,这样处理数据时间较长,容易造成延迟。为此,本文采用一个环形缓冲区(ring buffer),将DMA缓冲区分成多个固定大小的块,块的大小可以通过ioctl()系统调用来调整,驱动程序每次在声音缓冲区传送一个块的数据到用户的应用程序中。控制循环缓冲区的两个

11、结构为:typedef struct int size;char *start;dma_addr_t dma_addr;struct semaphore sem;int master; audio_buf_t;typedef struct audio_buf_t *buffers;audio_buf_t *buf;u_int buf_idx;u_int fragsize;u_int nbfrags;dmach_t dma_ch; audio_stream_t;audio_buf_t内记录了每个DMA缓存区的长度、虚拟地址、物理地址以及一个用来防止多个write对缓存区同时操作的信号量。audi

12、o_stream_t内包含了指向循环缓存区开始的指针,正被使用的缓存区的指针,每个缓存区的大小,缓存区的个数以及使用的DMA通道号。如果要驱动DSP,还需要注册一个DSP设备,注册函数为:Int register_sound_dsp(struct_file_operatio ns *fops,int dev);参数fops是一个文件操作接口,第二个参数dev是设备编号,如果值为-1,则系统自动分配一个设备编号。2.4 MIXER驱动的实现MIXER驱动只控制混音效果,可以控制输入/输出音频信号的低音及音量大小等2。其中最主要的函数为:static int mixdev_ioctl(struct

13、 inode* inod,struct file *file,unsigned int cmd, unsigned long arg);ioctl()函数通过不同的I/O控制命令来实现MIXER的不同功能。本文实现的主要控制命令如表2-1。用户的应用程序可以调用ioctl()函数对MIXER进行控制。表2-1 MIXER主要控制命令控制命令注释SOUND_MIXER_INFO返回MIXER信息SOUND_MIXER_READ_STEREODEVS获取设备对立体声的支持SOUND_MIXER_READ_CAPS获取声卡能力SOUND_MIXER_WRITE_VOLUME录音音量调节SOUND_M

14、IXER_READ_VOLUME放音音量调节SOUND_MIXER_READ_IGAIN放音增益调节SOUND_MIXER_WRITE_IGAIN录音增益调节2.5 L3接口的设计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 | G

15、PIO_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_d

16、ma(&output_stream, UDA1341 out) audio_clear_dma(&output_stream);printk( KERN_WARNING AUDIO_NAME_VERBOSE : unable to get DMA channelsn );return -EBUSY; input_stream.dma_ch = DMA_CH1;if (audio_init_dma(&input_stream, UDA1341 in) audio_clear_dma(&input_stream);printk( KERN_WARNING AUDIO_NAME_VERBOSE :

17、unable to get DMA channelsn );return -EBUSY; 设备的卸载由注销函数close()来完成。注销函数释放驱动程序使用的各种系统资源,如DMA和缓冲区等。3 系统工作流程3.1 工作流程设备驱动程序完成以后,就可以在用户空间实现数据的输入和输出,其程序流程如图3-1所示。失败打开设备文件设置缓冲区为512字节设置采样率、位数、格式、声道等读/dev/dsp实现录音写/dev/dsp实现放音结 束启 动成功失败失败图3-1 用户录音放音程序流程图采样率设置为44.1kHz,位数为16bit,格式为立体声,双声道。主要实现了对DSP接口的读写,读数据的过程就是

18、录音的过程,写数据的过程就是播放的过程。测试用的读函数代码为:Static ssize_t audio_read(struct file *file, char *buffer, size_t count,loff_t *ppos);测试用的写函数代码为:Static ssize_t audio_write(struct file *file, char *buffer, size_t count, loff_t *ppos);参数file是要操作的设备,在使用之前必须要打开,buffer是一个环形的缓冲区,每次读写缓冲区的大小由count来设定,ppos为用来控制数据的指针4。3.2 数据的

19、传输为了实现设备之间的对讲,还要能够在设备间进行数据传输,数据传输是利用SOCKET来实现的,在每一个终端上都实现了一个服务器应用程序,监听端口是3391,如果接收到一个响应,就利用服务器管理程序进行数据处理。考虑到楼宇对讲系统的特点,不会有两个网络请求同时到达同一个终端的情况,所以本文采用循环服务器模型来处理数据,在同一时刻只能处理一个客户机请求。服务器在接收到一个客户机请求之后,立即处理,在处理完这个请求之后再继续下一个。在处理一个请求的过程中,下一个请求将等待。3.3 系统测试模型整个测试系统分为前端设备和终端设备两部分,拓扑结构如图3-2所示。图3-2 系统测试模型驱动程序被单独编译为

20、一个可加载的模块,模块的加载代码写在文件/etc/profile文件中,在Linux内核启动以后,会自动执行这个脚本文件,在控制终端可以看到有“UDA1341 audio driver initialized” 信息,说明设备已经初始化。进入终端之后,查看设备文件名:ls -al /dev/sound/*crw- 1 root root 14, 3 Jan 1 00:00 /dev/sound/dspcrw- 1 root root 14, 0 Jan 1 00:00 /dev/sound/mixer可见,设备已经成功驱动。此时运行用户空间的音频信号采集、播放、数据传输程序就可以实现双向语音对

21、讲。4 总结本文提出一种在嵌入式系统中构建基于IIS总线的音频系统的可行方法,并且实现了音频的播放和录音的采集、数据传输功能。该系统已经在基于S3C2440的开发平台上得到了实现,可以顺利进行音频的播放和采集。语音数据的高效、可靠传输是实现网络监控、可视的一个重要基础,本设计可以为进一步的应用提供参考。通过这次的课程设计,我觉得自己的确学到了许多知识。以前学习嵌入式课程的时候,总觉得没有什么实用性,而现在才发现那种想法是完全错误的。通过一周的课程设计,我学会了许多专业知识。遇到困难时,我就去积极的看教材,去图书馆查阅资料,去网上搜索相关信息,直至把每一个细节,每一个原理都搞清楚弄明白为止,大大增强了我的自学能力和独立能力。更重要的是,我拓展了思路,开阔了视野,活跃了思想。对以后的学习工作起到了很大的帮助作用。参考文献1 白冰,张跃.基于ARM的远程实时心电监护仪软件设计实现J.计算机工程与设计,2009,30(12):2830-2833.2 宋宝华.Linux设备驱动开发祥解M.北京:人民邮电出版社,2008.3 张跃进,谢昕.嵌入式网络数字视频监控系统的设计J.计算机工程与设计,2009,30(4):805-807.4 张海滨,李辉.基于S3C2410的WMA开源解码程序优化J.计算机工程与设计,2009,30(1):13-14.技术发展

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!