




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 基于ARM的樓宇對(duì)講系統(tǒng)設(shè)計(jì)班 級(jí): 電信 12-2 姓 名: 李 猛 學(xué) 號(hào): 1206110207 指導(dǎo)教師: 張沛泓 成 績(jī): 電子與信息工程學(xué)院信息與通信工程系基于ARM的樓宇對(duì)講系統(tǒng)設(shè)計(jì)摘要近年來(lái),基于ARM內(nèi)核的處理器被廣泛應(yīng)用,越來(lái)越多的樓宇對(duì)講設(shè)備增加了語(yǔ)音、圖像等多媒體處理能力。本文利用三星的ARM9微處理器S3C2440和Philips公司的UDAl341芯片構(gòu)建了一個(gè)嵌入式樓宇對(duì)講系統(tǒng),并給出硬件電路的設(shè)計(jì)和基于Linux的基本實(shí)現(xiàn),該系統(tǒng)可以采樣、傳輸語(yǔ)音信號(hào),可以雙工通話(huà),可以應(yīng)用于網(wǎng)絡(luò)監(jiān)控、視頻傳輸?shù)榷喾N系統(tǒng)中。關(guān)鍵詞:嵌入式;ARM;Linux;音頻;驅(qū)動(dòng)程序1
2、 系統(tǒng)設(shè)計(jì)思路1.1 功能分析傳統(tǒng)的對(duì)講系統(tǒng)中話(huà)路傳輸采用模擬信號(hào)傳輸,信令和數(shù)據(jù)往往采用簡(jiǎn)單的串行通訊方式,這必然造成重復(fù)投資,布線(xiàn)施工及調(diào)試的難度大大增加。同時(shí)由于使用串行信號(hào)線(xiàn),無(wú)法解決遠(yuǎn)距離信號(hào)衰減等問(wèn)題。隨著嵌入式處理器技術(shù)的發(fā)展,原來(lái)被廣泛采用的模擬語(yǔ)音通信技術(shù)正逐漸被數(shù)字語(yǔ)音技術(shù)所代替。雙向語(yǔ)音通信是樓宇對(duì)講系統(tǒng)的基本功能,如何設(shè)計(jì)一個(gè)高效率的雙向語(yǔ)音對(duì)講系統(tǒng)對(duì)基于其上的多種應(yīng)用都有很現(xiàn)實(shí)的技術(shù)意義。由此,本文提出了一種利用三星公司的ARM9 2440處理器和Linux操作系統(tǒng)的樓宇對(duì)講系統(tǒng)。1.2 設(shè)計(jì)思路本文采用的嵌入式微處理器為三星公司的ARM9 2440處理器,該芯片是一
3、款使用ARM公司的ARM920T處理器核,180nm制造工藝的32位微控制器。其擁有獨(dú)立的16KB指令Cache、16KB數(shù)據(jù)Cache和存儲(chǔ)器管理單元,最高可運(yùn)行在533MHz,具有更高的指令和數(shù)據(jù)處理能力,能夠運(yùn)行完整的Linux系統(tǒng)。同時(shí)它集成了USB控制器、以太網(wǎng)控制、RTC、SPI、IIC等豐富的外圍設(shè)備,系統(tǒng)采用的硬件平臺(tái)的總體結(jié)構(gòu)如圖1-1所示。本設(shè)計(jì)軟硬件采用模塊化嵌入式系統(tǒng)設(shè)計(jì),使系統(tǒng)容易擴(kuò)展,豐富了智能社區(qū)系統(tǒng)的功能。其他相關(guān)硬件有中國(guó)臺(tái)灣DAVICOM公司的以太網(wǎng)接口芯片DM9000A,該芯片集成10/100M物理層接口,內(nèi)部帶有用來(lái)接收發(fā)送數(shù)據(jù)的FIFO緩存SRAM 1
4、6K字節(jié),支持8/16bit兩種主機(jī)工作模式,是實(shí)現(xiàn)嵌入式設(shè)備網(wǎng)絡(luò)接口的理想選擇。SAMSUNG公司的64M NAND FLASH芯片K9F1208;現(xiàn)代公司的32M SDRAM芯片;IIS音頻接口。2440核心板S3C2440 CPU64M SDRAM64M NAND FLASHSD卡接口3路RS232接口SPI、IIC接口2路變頻輸出3.5寸觸摸屏接口10M/100M網(wǎng)絡(luò)接口4個(gè)發(fā)光二極管4個(gè)按鍵電源、復(fù)位邏輯電路、JTAG調(diào)試接口IIS音頻接口2路USB接口圖1-1 系統(tǒng)硬件設(shè)計(jì)結(jié)構(gòu)圖2 系統(tǒng)設(shè)計(jì)2.1 音頻硬件設(shè)計(jì)S3C2440內(nèi)置數(shù)字音頻接口IIS,IIS(Inter-IC Soun
5、d)是Philips公司提出的串行數(shù)字音頻總線(xiàn)協(xié)議。目前很多音頻芯片和MCU都提供了對(duì)IIS的支持,UDA1341就是Philips公司生產(chǎn)的一款通用的支持IIS接口的音頻芯片,其采用位流轉(zhuǎn)換技術(shù)進(jìn)行信號(hào)處理,具有可編程增益放大器(PGA)和數(shù)字自動(dòng)增益控制器(AGC),提供兩組音頻信號(hào)輸入接口,每組包括左右2個(gè)聲道。由于IIS總線(xiàn)只處理音頻數(shù)據(jù),因此UDA1341還內(nèi)置用于傳輸控制信號(hào)的L3總線(xiàn)接口,L3接口相當(dāng)于混音器控制接口,可以控制輸入/輸出音頻信號(hào)的高低音及音量大小等,UDA1341的L3總線(xiàn)由時(shí)鐘、數(shù)據(jù)、模式3根線(xiàn)構(gòu)成,UDA1341和S3C2440的連接如圖2-1所示。由于S3C
6、2440具備IIS總線(xiàn)接口,所以可直接外接8/16比特的立體聲CODEC,它還可以給FIFO通道提供DMA傳輸模式,從而使數(shù)據(jù)發(fā)送和接收同時(shí)進(jìn)行。IIS為了處理聲音數(shù)據(jù),提供了4根串行總線(xiàn):串行數(shù)據(jù)輸入(I2SSDI)、串行數(shù)據(jù)輸出(I2SSDO)、左右聲道選擇(IISLRCK)和串行位時(shí)鐘(IISCLK)。另外,CDCLK為UDA1341芯片提供音頻A/D、D/A采樣時(shí)的時(shí)鐘信號(hào)。S3C2440的IIS總線(xiàn)信號(hào)與UDAl34l的IIS信號(hào)直接相連。圖2-1 UDA1341硬件原理圖S3C2440的TOUT2、TCLK0和TOUT3通用數(shù)據(jù)輸出引腳和UDA1341TS的引腳L3MODE、L3C
7、LOCK和L3DATA分別連接,可以控制輸入/輸出音頻信號(hào)的低音及音量大小,UDAl34l對(duì)外提供兩組音頻信號(hào)輸入接口,每組包括左右2個(gè)聲道,本設(shè)計(jì)使用了其中的一組。UDAl34l的VOUTL、VOUTR分別經(jīng)過(guò)電容C405、C406和電阻R400、R401、R402、R403組成的低通濾波電路和揚(yáng)聲器相連接。VINL1、VINR1經(jīng)過(guò)電容C407和話(huà)筒相連4。2.2 音頻驅(qū)動(dòng)的實(shí)現(xiàn)音頻設(shè)備驅(qū)動(dòng)程序除了對(duì)硬件的控制實(shí)現(xiàn)音頻流的傳輸,還要向上層提供標(biāo)準(zhǔn)的音頻接口。設(shè)備驅(qū)動(dòng)程序需要完成的工作包括:對(duì)設(shè)備以及資源初始化及釋放;讀取應(yīng)用程序傳送給設(shè)備文件的數(shù)據(jù)轉(zhuǎn)交給系統(tǒng)底層處理,并回送應(yīng)用程序請(qǐng)求的數(shù)
8、據(jù)。UDA1341芯片的驅(qū)動(dòng)程序結(jié)構(gòu)如圖2-2所示,從上到下可以劃分為:用戶(hù)接口層、數(shù)據(jù)I/O層、硬件接口層三個(gè)層次2。設(shè)備驅(qū)動(dòng)的具體實(shí)現(xiàn)包括設(shè)備初始化、DSP驅(qū)動(dòng)、MIXER驅(qū)動(dòng)和釋放設(shè)備四部分。MIXER(混音器)和DSP(數(shù)字信號(hào)處理器)是兩個(gè)最基本的音頻設(shè)備,MIXER的作用是將多個(gè)信號(hào)組合或者疊加在一起,在Linux系統(tǒng)中,其對(duì)應(yīng)的設(shè)備文件是/dev/mixer,DSP為編解碼器,實(shí)現(xiàn)錄音和放音功能,其對(duì)應(yīng)的設(shè)備文件是/dev/dsp。UDA1341設(shè)備驅(qū)動(dòng)用戶(hù)接口層:DSP設(shè)備驅(qū)動(dòng)、MIXER設(shè)備驅(qū)動(dòng)DMA方式數(shù)據(jù)輸入DMA方式數(shù)據(jù)輸出UDA1341硬件接口層一層二層三層圖2-2
9、音頻芯片的驅(qū)動(dòng)程序結(jié)構(gòu)框圖2.3 DSP驅(qū)動(dòng)的實(shí)現(xiàn)DSP設(shè)備讀取數(shù)據(jù)時(shí),從麥克輸入的模擬信號(hào)經(jīng)過(guò)低通濾波以后發(fā)送給A/D轉(zhuǎn)換器,A/D轉(zhuǎn)換器將模擬信號(hào)轉(zhuǎn)變成數(shù)字信號(hào)并保存在音頻驅(qū)動(dòng)程序的內(nèi)核緩沖區(qū)中,同時(shí)還要向應(yīng)用程序提供read()系統(tǒng)調(diào)用接口。當(dāng)向DSP設(shè)備寫(xiě)入數(shù)據(jù)時(shí),數(shù)字信號(hào)會(huì)經(jīng)過(guò)D/A轉(zhuǎn)換器變成模擬信號(hào),應(yīng)用程序可以通過(guò)write()系統(tǒng)調(diào)用完成這個(gè)過(guò)程。DSP驅(qū)動(dòng)實(shí)現(xiàn)的主要工作就是完成file_operations中的open()、read()、write()、ioctl()等函數(shù),其中ioct l()函數(shù)能夠?qū)Σ蓸勇省⒘炕?、DMA緩沖區(qū)塊大小等參數(shù)進(jìn)行設(shè)置1。為了提高傳輸速度和
10、系統(tǒng)性能,本系統(tǒng)使用DMA技術(shù)直接將需要回放或錄制的聲音存放在內(nèi)核的DMA緩存區(qū)中,由于S3C2440的DMA控制器沒(méi)有內(nèi)置的DMA存儲(chǔ)區(qū)域,因而驅(qū)動(dòng)程序必須在內(nèi)存中為音頻設(shè)備分配DMA緩存區(qū)。緩沖區(qū)大小的設(shè)置對(duì)系統(tǒng)性能有很大的影響,因?yàn)橐纛l數(shù)據(jù)量通常較大,緩存太小容易造成緩存溢出,而如果要填充大的緩沖區(qū),CPU就要一次處理大量的數(shù)據(jù),這樣處理數(shù)據(jù)時(shí)間較長(zhǎng),容易造成延遲。為此,本文采用一個(gè)環(huán)形緩沖區(qū)(ring buffer),將DMA緩沖區(qū)分成多個(gè)固定大小的塊,塊的大小可以通過(guò)ioctl()系統(tǒng)調(diào)用來(lái)調(diào)整,驅(qū)動(dòng)程序每次在聲音緩沖區(qū)傳送一個(gè)塊的數(shù)據(jù)到用戶(hù)的應(yīng)用程序中??刂蒲h(huán)緩沖區(qū)的兩個(gè)結(jié)構(gòu)為:
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內(nèi)記錄了每個(gè)DMA緩存區(qū)的長(zhǎng)度、虛擬地址、物理地址以及一個(gè)用來(lái)防止多個(gè)write對(duì)緩存區(qū)同時(shí)操作的信號(hào)量。audio_st
12、ream_t內(nèi)包含了指向循環(huán)緩存區(qū)開(kāi)始的指針,正被使用的緩存區(qū)的指針,每個(gè)緩存區(qū)的大小,緩存區(qū)的個(gè)數(shù)以及使用的DMA通道號(hào)。如果要驅(qū)動(dòng)DSP,還需要注冊(cè)一個(gè)DSP設(shè)備,注冊(cè)函數(shù)為:Int register_sound_dsp(struct_file_operatio ns *fops,int dev);參數(shù)fops是一個(gè)文件操作接口,第二個(gè)參數(shù)dev是設(shè)備編號(hào),如果值為-1,則系統(tǒng)自動(dòng)分配一個(gè)設(shè)備編號(hào)。2.4 MIXER驅(qū)動(dòng)的實(shí)現(xiàn)MIXER驅(qū)動(dòng)只控制混音效果,可以控制輸入/輸出音頻信號(hào)的低音及音量大小等2。其中最主要的函數(shù)為:static int mixdev_ioctl(struct ino
13、de* inod,struct file *file,unsigned int cmd, unsigned long arg);ioctl()函數(shù)通過(guò)不同的I/O控制命令來(lái)實(shí)現(xiàn)MIXER的不同功能。本文實(shí)現(xiàn)的主要控制命令如表2-1。用戶(hù)的應(yīng)用程序可以調(diào)用ioctl()函數(shù)對(duì)MIXER進(jìn)行控制。表2-1 MIXER主要控制命令控制命令注釋SOUND_MIXER_INFO返回MIXER信息SOUND_MIXER_READ_STEREODEVS獲取設(shè)備對(duì)立體聲的支持SOUND_MIXER_READ_CAPS獲取聲卡能力SOUND_MIXER_WRITE_VOLUME錄音音量調(diào)節(jié)SOUND_MIXER
14、_READ_VOLUME放音音量調(diào)節(jié)SOUND_MIXER_READ_IGAIN放音增益調(diào)節(jié)SOUND_MIXER_WRITE_IGAIN錄音增益調(diào)節(jié)2.5 L3接口的設(shè)計(jì)L3接口由S3C2440的引腳TOUT2、TCLK0和TOUT3組成,與S3C2440的B組通用寄存器GBB2、GPB3、GPB4復(fù)用。在設(shè)備MIXER工作之前,需要對(duì)這些端口進(jìn)行初始化,本文是用了下面的宏將引腳初始化為輸出模式,低電平觸發(fā)2。set_gpio_ctrl(GPIO_MODE_OUT | GPIO_PULLUP_DIS | GPIO_B4);set_gpio_ctrl(GPIO_MODE_OUT | GPIO_
15、PULLUP_DIS | GPIO_B3);set_gpio_ctrl(GPIO_MODE_OUT | GPIO_PULLUP_DIS | GPIO_B2);2.6 設(shè)備的安裝與卸載在UDA1341加載模塊中,除了需要初始化IIS接口、設(shè)置L3總線(xiàn)對(duì)應(yīng)的GPIO、設(shè)置UDA1341的工作模式外,還需要申請(qǐng)DMA通道和注冊(cè)DSP和MIXER接口。S3C2440具有4個(gè)DMA通道,為了實(shí)現(xiàn)存儲(chǔ)器和I/O之間的傳輸,本文采用DMA通道1輸出聲音數(shù)據(jù),DMA通道2來(lái)輸入聲音數(shù)據(jù),其初始化的過(guò)程代碼為:output_stream.dma_ch = DMA_CH2;if (audio_init_dma(&
16、amp;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_st
17、ream);printk( KERN_WARNING AUDIO_NAME_VERBOSE ": unable to get DMA channelsn" );return -EBUSY; 設(shè)備的卸載由注銷(xiāo)函數(shù)close()來(lái)完成。注銷(xiāo)函數(shù)釋放驅(qū)動(dòng)程序使用的各種系統(tǒng)資源,如DMA和緩沖區(qū)等。3 系統(tǒng)工作流程3.1 工作流程設(shè)備驅(qū)動(dòng)程序完成以后,就可以在用戶(hù)空間實(shí)現(xiàn)數(shù)據(jù)的輸入和輸出,其程序流程如圖3-1所示。失敗打開(kāi)設(shè)備文件設(shè)置緩沖區(qū)為512字節(jié)設(shè)置采樣率、位數(shù)、格式、聲道等讀/dev/dsp實(shí)現(xiàn)錄音寫(xiě)/dev/dsp實(shí)現(xiàn)放音結(jié) 束啟 動(dòng)成功失敗失敗圖3-1 用戶(hù)錄音放音程序
18、流程圖采樣率設(shè)置為44.1kHz,位數(shù)為16bit,格式為立體聲,雙聲道。主要實(shí)現(xiàn)了對(duì)DSP接口的讀寫(xiě),讀數(shù)據(jù)的過(guò)程就是錄音的過(guò)程,寫(xiě)數(shù)據(jù)的過(guò)程就是播放的過(guò)程。測(cè)試用的讀函數(shù)代碼為:Static ssize_t audio_read(struct file *file, char *buffer, size_t count,loff_t *ppos);測(cè)試用的寫(xiě)函數(shù)代碼為:Static ssize_t audio_write(struct file *file, char *buffer, size_t count, loff_t *ppos);參數(shù)file是要操作的設(shè)備,在使用之前必須要打開(kāi)
19、,buffer是一個(gè)環(huán)形的緩沖區(qū),每次讀寫(xiě)緩沖區(qū)的大小由count來(lái)設(shè)定,ppos為用來(lái)控制數(shù)據(jù)的指針4。3.2 數(shù)據(jù)的傳輸為了實(shí)現(xiàn)設(shè)備之間的對(duì)講,還要能夠在設(shè)備間進(jìn)行數(shù)據(jù)傳輸,數(shù)據(jù)傳輸是利用SOCKET來(lái)實(shí)現(xiàn)的,在每一個(gè)終端上都實(shí)現(xiàn)了一個(gè)服務(wù)器應(yīng)用程序,監(jiān)聽(tīng)端口是3391,如果接收到一個(gè)響應(yīng),就利用服務(wù)器管理程序進(jìn)行數(shù)據(jù)處理。考慮到樓宇對(duì)講系統(tǒng)的特點(diǎn),不會(huì)有兩個(gè)網(wǎng)絡(luò)請(qǐng)求同時(shí)到達(dá)同一個(gè)終端的情況,所以本文采用循環(huán)服務(wù)器模型來(lái)處理數(shù)據(jù),在同一時(shí)刻只能處理一個(gè)客戶(hù)機(jī)請(qǐng)求。服務(wù)器在接收到一個(gè)客戶(hù)機(jī)請(qǐng)求之后,立即處理,在處理完這個(gè)請(qǐng)求之后再繼續(xù)下一個(gè)。在處理一個(gè)請(qǐng)求的過(guò)程中,下一個(gè)請(qǐng)求將等待。3.3 系統(tǒng)測(cè)試模型整個(gè)測(cè)試系統(tǒng)分為前端設(shè)備和終端設(shè)備兩部分,拓?fù)浣Y(jié)構(gòu)如圖3-2所示。圖3-2 系統(tǒng)測(cè)試模型驅(qū)動(dòng)程序被單獨(dú)編譯為一個(gè)可加載的模塊,模塊的加載代碼寫(xiě)在文件/etc/profile文件中,在Linux內(nèi)核啟動(dòng)以后,會(huì)自動(dòng)執(zhí)行這個(gè)腳本文件,在控制終端可以看到有“UDA1341 audio driver initialized” 信息,說(shuō)明設(shè)備已經(jīng)初始化。進(jìn)入終端之后,查看設(shè)備文件名:ls -al /dev/sound/*crw- 1 root root 14, 3 Jan 1 00:00 /dev/sound/dspcrw- 1 root
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025屆中國(guó)燃?xì)庑@招聘正式啟動(dòng)筆試參考題庫(kù)附帶答案詳解
- 保證函和保證合同范本
- 加工產(chǎn)品企業(yè)合同范本
- 養(yǎng)殖買(mǎi)賣(mài)合同范例
- 農(nóng)村購(gòu)墓地合同范本
- 介紹股合同范本
- 勞動(dòng)聘用合同范本
- 親兄弟合伙合同范本
- pe管材購(gòu)銷(xiāo)合同范本
- 虧損分擔(dān)合同范例
- 土力學(xué)與地基基礎(chǔ)(課件)
- 股票入門(mén)-k線(xiàn)圖基礎(chǔ)知識(shí)
- 全國(guó)大全身份證前六位、區(qū)號(hào)、郵編-編碼
- 種植林業(yè)可行性研究報(bào)告
- 金和物業(yè)公司簡(jiǎn)介
- 廣東省五年一貫制考試英語(yǔ)真題
- 2023年中央廣播電視總臺(tái)校園招聘筆試參考題庫(kù)附帶答案詳解
- 項(xiàng)目部崗位廉潔風(fēng)險(xiǎn)情景教育案例
- 小學(xué)英語(yǔ)-What a dream教學(xué)設(shè)計(jì)學(xué)情分析教材分析課后反思
- 消防栓定期檢查記錄表
- 員工面試登記表通用模板
評(píng)論
0/150
提交評(píng)論