国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于ARM9的UDA1341驅(qū)動(dòng)在Linux下移植方法

2011-03-26 07:32:14劉文王曉輝盛文婷李智
電子設(shè)計(jì)工程 2011年14期
關(guān)鍵詞:聲卡驅(qū)動(dòng)程序內(nèi)核

劉文,王曉輝,盛文婷,李智

(1.新疆機(jī)電職業(yè)技術(shù)學(xué)院電氣工程系,新疆烏魯木齊830000;2.新疆農(nóng)業(yè)大學(xué)科學(xué)技術(shù)學(xué)院,新疆烏魯木齊830091)

S3C2410處理器是Samsung公司生產(chǎn)的基于ARM920T核心、采用0.18 μm制造工藝的32位微控制器,帶IIC-BUS和IIS-BUS接口。UDA1341芯片支持IIS總線數(shù)據(jù)格式,采用位元流轉(zhuǎn)換技術(shù)進(jìn)行信號(hào)處理,具有可編程增益放大器(PGA)和數(shù)字自動(dòng)增益控制器(AGC)。在基于上述硬件平臺(tái)的嵌入式Linux環(huán)境中移植UDA1341音頻驅(qū)動(dòng)程序,而通用的驅(qū)動(dòng)程序不能在此硬件平臺(tái)直接運(yùn)行,需要做很多修改,所以對(duì)具體移植過(guò)程的總結(jié)、分析和具體的測(cè)試工作變得尤為重要。

1 硬件核心技術(shù)分析

1.1 S3C2410處理器特點(diǎn)

S3C2410處理器具有獨(dú)立的16 kB指令Cache和16 kB數(shù)據(jù)Cache,MMU,支持TFT的LCD控制器,NAND閃存控制器,3路UART,4路DMA,4路帶PWM的Timer,I/O口,RTC,8路10位ADC,Touch Screen接口,IIC-BUS接口,IISBUS接口,2個(gè)USB主機(jī),1個(gè)USB設(shè)備,SD主機(jī)和MMC接口,2路SPI。S3C2410處理器最高主頻可達(dá)202 MHz[1]。

1.2 IIS(Inter-IC Sound)總線分析

IIS(Inter-IC Sound)總線是飛利浦公司為數(shù)字音頻設(shè)備之間的音頻數(shù)據(jù)傳輸而制定的一種總線標(biāo)準(zhǔn)。它是一種面向多媒體的音頻總線專(zhuān)用于音頻設(shè)備之間的數(shù)據(jù)傳輸,為數(shù)字立體聲提供序列的連接至標(biāo)準(zhǔn)編解碼器[2]。IIS總線只處理聲音數(shù)據(jù),其他信號(hào)(如控制信號(hào))必須單獨(dú)傳輸。

1.3 UDA1341技術(shù)分析

UDA1341支持IIS總線數(shù)據(jù)格式,對(duì)外提供兩組音頻信號(hào)輸入接口,每組包含左右2個(gè)聲道。由于IIS總線只處理音頻數(shù)據(jù),因此UDA1341還內(nèi)置用于傳輸控制信號(hào)的L3總線接口[1]。L3接口即混音器控制接口,可以控制輸入/輸出音頻信號(hào)的低音及音量大小等。

2 修改通用驅(qū)動(dòng)程序的關(guān)鍵思路和方法

2.1 IIS 總線的信號(hào)處理

CDCLK是由S3C2410內(nèi)部的APH總線時(shí)鐘首先經(jīng)過(guò)一個(gè)IIS的模式選擇(56 fs或384 fs),然后再經(jīng)過(guò)一個(gè)IIS的預(yù)分頻器分頻后得到[3]。S3C2410主頻202 MHz,它的APH總線頻率是202/4=50 MHz,在選擇IIS的主時(shí)鐘模式為384 fs后,經(jīng)過(guò)IIS的PSR得到的由IPSR_A分出的一個(gè)頻率用于IIS時(shí)鐘輸出,另一個(gè)由IPSR_B分出的頻率CDCLK則直接作為UDA1341編解碼時(shí)鐘。在分頻前要進(jìn)行IIS的主時(shí)鐘頻率選擇(本文選擇384 fs),將系數(shù)384乘以fs得到CDCLK時(shí)鐘輸出頻率。

UDA1341芯片的初始化中也需要進(jìn)行系統(tǒng)時(shí)鐘的設(shè)置(512 fs,384 fs或256 fs),在進(jìn)行音頻的編解碼時(shí)會(huì)根據(jù)SYSCLK輸入的系統(tǒng)時(shí)鐘除以相應(yīng)的系數(shù)來(lái)得到采樣頻率fs。所以對(duì)于S3C2410芯片的IIS控制器和UDA1341芯片,兩者相應(yīng)的CDCLK和SYSCLK的時(shí)鐘頻率需要設(shè)置一致。在調(diào)試過(guò)程中,如果將兩者設(shè)置不一致,聲卡就不能正常工作。由于預(yù)分頻值與384這個(gè)系數(shù)和采樣頻率fs有關(guān),所以在計(jì)算預(yù)分頻值的函數(shù)iispsr_value中,384這個(gè)系數(shù)也要和CDCLK和SYSCLK設(shè)置的系數(shù)一致。如果設(shè)置不一致,會(huì)導(dǎo)致聲音播放速度太快或太慢。

2.2 DMA相關(guān)函數(shù)修改

S3C2410共有4通道的DMA,每通道9個(gè)寄存器,共36個(gè)。如果通道映射不正確的話,UDA1341就沒(méi)有輸出。在內(nèi)核的arch/arm/plat-s3c24xx/dma.c的s3c2410_dma_map_channel函數(shù)中部分修改如下:

2.3 緩存區(qū)的管理

采用循環(huán)緩存區(qū)的方法設(shè)計(jì)驅(qū)動(dòng)程序,循環(huán)緩存區(qū)的空間大小可以通過(guò)ioctl來(lái)設(shè)置。如只采用一個(gè)DMA緩存區(qū),在進(jìn)行寫(xiě)操作的時(shí)候,則必須等待該緩存區(qū)的數(shù)據(jù)都傳輸完畢,同時(shí),讀操作也會(huì)被阻塞,系統(tǒng)的性能會(huì)下降許多[4]。管理循環(huán)緩存區(qū)的兩個(gè)結(jié)構(gòu):typedef struct{

audio_buf_t內(nèi)包含了每個(gè)DMA緩存區(qū)的長(zhǎng)度、虛擬地址、物理地址以及一個(gè)用來(lái)防止多個(gè)寫(xiě)操作對(duì)緩存區(qū)同時(shí)操作的信號(hào)量。

audio_stream_t內(nèi)包含了循環(huán)緩存區(qū)開(kāi)始的指針、正被使用的緩存區(qū)的指針、單個(gè)緩存區(qū)的大小、緩存區(qū)的個(gè)數(shù)以及使用的dma通道號(hào)[5]。

3 驅(qū)動(dòng)程序移植方法

3.1 獲取UDA1341通用驅(qū)動(dòng)程序

在Samsung公司官方網(wǎng)站下載s3c2410-uda1341.c文件,并且放到Linux內(nèi)核源代碼目錄linux2.6.14/sound/oss/下。

3.2 添加驅(qū)動(dòng)程序至Linux內(nèi)核

1)修改oss目錄下的kconfig文件,添加如下代碼:

config S3C2410_SND_UDA1341

tristate"S3C2410 UDA1341 driver(S3C2410)"

depends on SOUND_PRIME!=n&&SOUND&&ARM&&ARCH_SMDK2410

2)修改oss目錄下的makefile文件,添加如下代碼:

obj-$(CONFIG_S3C2410_SND_UDA1341)+=s3c2410-uda1341.o

3)增加內(nèi)存映射,修改虛擬地址可用,并且對(duì)應(yīng)的物理地址是UDA1341相應(yīng)引腳[6]。修改/arch/arm/mach-s3c2410/smdk-s3c2410文件如下:

static struct map_desc smdk2410_iodesc[]__initdata={

{0xf0d00000,0x55000000,SZ_1M,MT_DEVICE},//聲卡內(nèi)存映射

};

4)加入內(nèi)核對(duì)UDA1341芯片的支持

<*>Sound card support

S3C2440 Sound devices-->

<*>S3C2440 UDA1341TS driver

聲卡的IC是UDA1341TS,如果此時(shí)編譯內(nèi)核make uImage會(huì)返回如下錯(cuò)誤信息:

sound/built-in.o:(.text+0xXXXX)In funcion'$a'

undefine reference'l3_write':

...

產(chǎn)生該錯(cuò)誤的原因是內(nèi)核不支持L3模塊,這樣make的時(shí)候就沒(méi)有把L3的頭文件包含進(jìn)來(lái),加入內(nèi)核對(duì)L3模塊的支持:

L3 Sopport

L3 support--->

<*>L3 serial bus support

[*]S3C2440 L3 adapter

重新配置內(nèi)核再次make uImage即可實(shí)現(xiàn)內(nèi)核對(duì)UDA1341芯片的支持。

3.3 交叉編譯驅(qū)動(dòng)程序至Linux內(nèi)核映像文件

1)在Linux內(nèi)核源代碼目錄執(zhí)行命令make menuconfig,選擇driver->sound->oss->uda1341模塊。

2)編譯make zImage如果編譯成功,內(nèi)核啟動(dòng)時(shí)可以看到mice:PS/2 mouse device common for all mice UDA1341 audio driver initialized NET:Registered protocol family 2 3)系統(tǒng)測(cè)試

①建立塊專(zhuān)用或字符專(zhuān)用文件

mknod/dev/dsp c 14 3

mknod/dev/mixer c 14 0

/dev/dsp數(shù)字信號(hào)處理(DSP):DSP指音頻設(shè)備中專(zhuān)門(mén)處理效果的芯片,稱(chēng)為效果器,對(duì)提高音頻設(shè)備性能意義重大。

/dev/mixer混音器:混音器是控制音頻信號(hào)的提升并將音頻信號(hào)導(dǎo)向所指目的地的設(shè)備。

②燒寫(xiě)新內(nèi)核文件至硬件Flash,啟動(dòng)后,在/dev/sound/下是有dsp以及mixer兩個(gè)設(shè)備文件,說(shuō)明音頻驅(qū)動(dòng)模塊加載正確。

③執(zhí)行命令:cat test.wav>/dev/sound/dsp命令將PCM數(shù)據(jù)放到dsp設(shè)備上,能聽(tīng)到聲音,則說(shuō)明聲卡驅(qū)動(dòng)移植成功。

4 結(jié)束語(yǔ)

從嵌入式系統(tǒng)硬件結(jié)構(gòu)入手,分析了S3C2410處理器和UDA1341芯片的技術(shù)特點(diǎn),總結(jié)了音頻驅(qū)動(dòng)程序主要模塊的設(shè)計(jì)思路,并提出了部分函數(shù)和模塊的修改方法,最后做了具體測(cè)試。嵌入式系統(tǒng)驅(qū)動(dòng)程序開(kāi)發(fā)這個(gè)研究方向內(nèi)容豐富,牽涉的知識(shí)面比較廣,有很多方面都值得研究,例如寄存器工作特點(diǎn),不同DMA通道工作方式、編譯過(guò)程中排錯(cuò)等。本文涉及的只是音頻驅(qū)動(dòng)程序開(kāi)發(fā)的部分,希望能做拋磚之用。

[1]劉文,閻曉菲,王衛(wèi)平,等.基于嵌入式μClinux路由器的防火墻設(shè)計(jì)[J].新疆農(nóng)業(yè)大學(xué)學(xué)報(bào),2009(5):84-87.

LIU Wen,YAN Xiao-fei,WANG Wei-ping,et al.Design of firewall based on the μCLinux router[J].Journal of Xinjiang Agricultural University,2009(5):84-87.

[2]杜展.基于ARM處理器和嵌入式操作系統(tǒng)μClinux的WebServer實(shí)現(xiàn)[D].上海:上海交通大學(xué),2006.

[3]房國(guó)志,馬傳龍.Linux中IIS總線聲卡驅(qū)動(dòng)的研究[J].科技創(chuàng)新導(dǎo)報(bào),2009(2):45-17.

FANG Zhi-guo,MA Chuan-long.Research of IIS bus sound card driver in linux[J].Science and Technology Innovation Herald,2009(2):45-17.

[4]虞躍,姚國(guó)良.嵌入式Linux系統(tǒng)中音頻驅(qū)動(dòng)的設(shè)計(jì)與實(shí)現(xiàn)[J].電子器件,2008(02):23-24.

YU Yue,YAO Guo-liang.Design and implementation of audio driver based on embeded linux[J].Electronic Device,2008(2):23-24.

[5]劉文.Netfilter數(shù)據(jù)轉(zhuǎn)發(fā)性能測(cè)試與研究[J].計(jì)算機(jī)工程與應(yīng)用,2011(3):61.

LIU Wen.Test and research on performance of Netfilter data forwarding[J].Computer Engineering and Applications,2011(3):61.

[6]劉文,趙曉東,肖松海,等.基于ARM平臺(tái)的引導(dǎo)程序分析與移植研究[J].軟件導(dǎo)刊,2011(2):26-28.

LIU Wen,ZHAO Xiao-dong,XIAO Song-hai,et al.Analysis and transplantation research on bootloader based on arm platform[J].Software Guide,2011(2):26-28.

猜你喜歡
聲卡驅(qū)動(dòng)程序內(nèi)核
萬(wàn)物皆可IP的時(shí)代,我們當(dāng)夯實(shí)的IP內(nèi)核是什么?
強(qiáng)化『高新』內(nèi)核 打造農(nóng)業(yè)『硅谷』
基于嵌入式Linux內(nèi)核的自恢復(fù)設(shè)計(jì)
Linux內(nèi)核mmap保護(hù)機(jī)制研究
麻雀成鳳凰 本本聲卡變X—Fi
用心聆聽(tīng),“高清”聲卡進(jìn)階技
驅(qū)動(dòng)程序更新與推薦
驅(qū)動(dòng)程序更新與推薦
驅(qū)動(dòng)程序更新與推薦
聽(tīng)老鳥(niǎo)講那集成的故事三回合玩轉(zhuǎn)板載聲卡
泾川县| 浑源县| 出国| 南投县| 景洪市| 新兴县| 闸北区| 昆明市| 全椒县| 都匀市| 彰化县| 香河县| 清丰县| 金川县| 馆陶县| 台州市| 通城县| 益阳市| 永平县| 财经| 阿克苏市| 彩票| 泸州市| 郸城县| 福安市| 兴国县| 饶阳县| 达州市| 辽中县| 山阳县| 兴化市| 剑河县| 静安区| 邵阳县| 西乌| 汪清县| 九龙坡区| 斗六市| 礼泉县| 钦州市| 罗源县|