第一篇:ARM11處理器(共)
ARM11處理器改變世界
對(duì)于ARM平臺(tái),相信眾多的音改愛(ài)好者并不陌生。ARM11系列微處理器是ARM公司今年推出的新一代RISC處理器,它是ARM新指令構(gòu)架——ARMV6的新一代設(shè)計(jì)實(shí)現(xiàn)。該系列主要有ARM1136J,ARM1156T2和ARM1176T2三個(gè)內(nèi)核型號(hào),分別針對(duì)不同應(yīng)用領(lǐng)域。過(guò)去的十年中,ARM處理器經(jīng)歷了從簡(jiǎn)單的ARM7TDMI內(nèi)核發(fā)展到最新ARM11EJ-S內(nèi)核,目前已有5個(gè)產(chǎn)品系列——ARM7,ARM9,ARM9E,ARM10,SeourCore和ARM11.從簡(jiǎn)單的三級(jí)流水線到先進(jìn)的8級(jí)流水線結(jié)構(gòu),ARM11是ARM家族中性能最強(qiáng)的一個(gè)系列。凡是ARM11所到之處必定火上一把,成為眾多明星產(chǎn)品必備的不二選擇。
在國(guó)內(nèi)外都拿有贊譽(yù)的國(guó)內(nèi)第一大電子品牌愛(ài)國(guó)者M(jìn)P4產(chǎn)品,就是成功地采用了ARM11處理核心平臺(tái),產(chǎn)品得到國(guó)內(nèi)外用戶(hù)的認(rèn)可,并且順利走出了國(guó)門(mén)。還有引爆全球蘋(píng)果風(fēng)的IPHONE4代手機(jī),也正是采用了ARM11的處理平臺(tái),更快的運(yùn)作通度和更強(qiáng)大的兼容性,給蘋(píng)果產(chǎn)品注入了一股全新的巨大爆發(fā)力,全球銷(xiāo)售短短兩個(gè)月突破6億臺(tái)。也許沒(méi)有AMR11,它們也會(huì)是一款成功的產(chǎn)品。但是有了ARM11,他們卻變得更成功。ARM11的成功之處遠(yuǎn)不止于此,它還比同系列產(chǎn)品增強(qiáng)了異常和中斷的處理速度。ARM11媒體處理擴(kuò)展使MPEG4編碼/解碼加快一倍。音頻處理加快一倍。綜合ARM11的諸多優(yōu)點(diǎn),我們就能夠理解,ARM11為什么是蘋(píng)果,三星,愛(ài)國(guó)者等國(guó)內(nèi)國(guó)際高科技產(chǎn)品追逐的寵兒了。這也更加彰顯了ARM11的控制魅力。
在高科技支配下的世界里,信息瞬息萬(wàn)變,任何高科技產(chǎn)品都需要不斷追求高效,穩(wěn)定的性能。車(chē)載導(dǎo)航系統(tǒng)也需要順應(yīng)這種潮流,從原先單一的導(dǎo)航軟件發(fā)展演變成為能強(qiáng)大的專(zhuān)用一體機(jī)。隨著越來(lái)越多心功能的研發(fā)與運(yùn)用,產(chǎn)品各方面的要求也愈加嚴(yán)格,但這些功能離不開(kāi)一個(gè)能運(yùn)行得了他們的子核心。產(chǎn)品的還壞也在于核心的還壞,核心及處理平臺(tái)??v觀整個(gè)車(chē)載導(dǎo)航產(chǎn)品市場(chǎng),相比較之下,ARM11高校處理平臺(tái)在各個(gè)方面都在導(dǎo)航產(chǎn)品處理器領(lǐng)域獨(dú)占螫頭。
之前車(chē)載導(dǎo)航產(chǎn)品使用過(guò)程中反應(yīng)速度慢,容易死機(jī),功能簡(jiǎn)單,界面粗糙等缺點(diǎn)。ARM11都可以一并解決。ARM11更穩(wěn)定,更低的耗能,能讓更多的功能,更好更兼容地運(yùn)行在平臺(tái)上,免除車(chē)主不必要的煩惱。3D實(shí)景地圖的運(yùn)用,是導(dǎo)航軟件的一個(gè)革命性飛躍,當(dāng)各大處理平臺(tái)產(chǎn)品廠商在研發(fā)能更好地兼容3D地圖的新處理平臺(tái)產(chǎn)品時(shí),ARM11處理平臺(tái)就已經(jīng)具備完美運(yùn)行3D實(shí)景地圖的功能。
現(xiàn)實(shí)生活中,很多生產(chǎn)日常生活必備品的廠家,為了能給消費(fèi)者提供更便捷多樣的服務(wù)與功能,也強(qiáng)強(qiáng)聯(lián)合ARM處理器。這樣的碰撞,產(chǎn)生的效益與影響,無(wú)可估量。以手機(jī)產(chǎn)品為例,數(shù)據(jù)顯示,現(xiàn)階段市場(chǎng)上使用ARM平臺(tái)的手機(jī)品牌有:諾基亞(NOKIA)、摩托羅拉(MOTOROLA)、索愛(ài)、三星(SAMSUNG)、奔邁等,這些品牌在手機(jī)市場(chǎng)的份額上占據(jù)了95%的市場(chǎng),由此可以看出ARM處理器的應(yīng)用之防范。也正是由于ARM處理器的性能特點(diǎn),才是個(gè)眾多知識(shí)品牌與合作的如此成功。
當(dāng)把一個(gè)成熟的、有針對(duì)性的、高性能、低能耗的優(yōu)質(zhì)產(chǎn)品加以運(yùn)用時(shí),便會(huì)產(chǎn)生很多的驚喜與發(fā)展空間。所以,加載了ARM11高校處理平臺(tái)的導(dǎo)航系統(tǒng),將會(huì)引起車(chē)載導(dǎo)航市場(chǎng)的熱烈追捧。
第二篇:arm心得.
心得體會(huì)(許晶)
本次實(shí)習(xí)時(shí)間是一周,我們組所選的題目是直流電動(dòng)機(jī)轉(zhuǎn)速控制設(shè)計(jì),其要求有:硬件部分要求在LPC2100系列ARM的最小系統(tǒng)的基礎(chǔ)上,設(shè)計(jì)通過(guò)按鍵控制直流電動(dòng)機(jī)速度的驅(qū)動(dòng)電路,要求通過(guò)LPC2100內(nèi)置的PWM發(fā)生器控制直流電動(dòng)機(jī);并將電動(dòng)機(jī)速度通過(guò)串口送至PC機(jī)。軟件部分要求設(shè)計(jì)以上功能的脫機(jī)運(yùn)行程序,并在試驗(yàn)室調(diào)試通過(guò)。我負(fù)責(zé)的是硬件部分。首先我將系統(tǒng)分為兩部分。一是電動(dòng)機(jī)控制驅(qū)動(dòng)電路;二是ARM最小系統(tǒng)。在電動(dòng)機(jī)驅(qū)動(dòng)中,直流電機(jī)控制使用了H橋驅(qū)動(dòng)電路,控制口線為P0.21、P0.22。在ARM最小系統(tǒng)中,分為5部分:電源電路、復(fù)位電路、JTAG接口電路、RS232串口電路、時(shí)鐘電路。
在制作原理圖中,我查閱了實(shí)驗(yàn)指導(dǎo)書(shū)和課本。我所選用的是2114板子。因?yàn)長(zhǎng)PC2114是基于一個(gè)支持實(shí)時(shí)仿真和跟蹤的16/32位ARM7TDMI-STM CPU的微控制器,并帶有128/256 k字節(jié)(kB)嵌入的高速Flash存儲(chǔ)器。128位寬度的存儲(chǔ)器接口和獨(dú)特的加速結(jié)構(gòu)使32位代碼能夠在最大時(shí)鐘速率下運(yùn)行。對(duì)代碼規(guī)模有嚴(yán)格控制的應(yīng)用可使用16位Thumb模式將代碼規(guī)模降低超過(guò)30%,而性能的損失卻很小。
在這個(gè)過(guò)程中,我注意到了許多問(wèn)題。通過(guò)最小系統(tǒng)的制圖,我對(duì)一些問(wèn)題逐漸了解,不像剛開(kāi)始學(xué)習(xí)一樣,感覺(jué)什么也不懂,硬裝知識(shí)。我畫(huà)了5部分,這幾個(gè)部分讓我對(duì)書(shū)上的內(nèi)容更加深了學(xué)習(xí)。如:時(shí)鐘電路中,我就把時(shí)鐘系統(tǒng)和晶體振蕩兩節(jié)課程,重新學(xué)習(xí)。
而在軟件設(shè)計(jì)中,在我的搭檔編程完之后,我也對(duì)程序進(jìn)行了研究。在主程序中,我們用的是i、j表示速度與方向,正轉(zhuǎn)為“+”、反轉(zhuǎn)為“—”;最小速度為1,最大速度為4。先讓電機(jī)正向慢慢的加速,加到正傳的最大速后,在按下就變成反轉(zhuǎn),然后在依次加速,往返循環(huán),直至沒(méi)有按鍵按下。所運(yùn)用的是,調(diào)節(jié)PWM的占空比就能達(dá)到電機(jī)的速度調(diào)節(jié)。
我們組在硬件中遇到的問(wèn)題并不多,主要是在畫(huà)各部分原理圖時(shí)找器件很不熟練,不能很快的找到。這說(shuō)明我不經(jīng)常用軟件。其實(shí)這個(gè)軟件制圖很方便,各種器件幾乎都能找到,找不到時(shí)也可以在上面畫(huà)圖。
軟件中,程序在編譯正確后,下載方面出現(xiàn)了許多問(wèn)題,如連接不上;不能生成hex文件等。其實(shí)這些問(wèn)題,都是因?yàn)槲覀儗?duì)軟件不熟悉所造成的。在我們多次調(diào)試、鏈接之后,終于完成。
經(jīng)過(guò)一周實(shí)習(xí),是我對(duì)ARM系統(tǒng)有了更深刻的認(rèn)識(shí)。因?yàn)榍捌诖蠹叶颊夜ぷ鞯脑?,我并沒(méi)有特別認(rèn)真的學(xué)習(xí),而這次的實(shí)習(xí),可以讓我重新再次拿起課本,認(rèn)真學(xué)習(xí)。并且使我感觸最深的是,由于嵌入系統(tǒng)的廣泛應(yīng)用,我應(yīng)該更好的去學(xué)習(xí)它、掌握它。像掌握辦公自動(dòng)化一樣,成為必不可少的技術(shù)。
第三篇:ARM學(xué)習(xí)心得
ARM linux學(xué)習(xí)心得(zt)
2008-08-13 13:55
由于很多人總問(wèn)這個(gè)問(wèn)題,所以這里做一個(gè)總結(jié)文檔供大家參考。
這里必須先說(shuō)明,以下的步驟都是針對(duì)Linux系統(tǒng)的,并不面向WinCE。也許你會(huì)注意到,現(xiàn)在做嵌入式的人中,做linux研究的人遠(yuǎn)比做WinCE的人多,很多產(chǎn)家提供的資料也是以linux為主。我一直很難理解,其實(shí)WinCE的界面比linux的界面好看多了,使用起來(lái)也很方便,更為重要的是,WinCE的開(kāi)發(fā)和Windows下的開(kāi)發(fā)基本一樣,學(xué)起來(lái)簡(jiǎn)單得多,但是學(xué)linux或者使用linux做嵌入式的人就是遠(yuǎn)比WinCE多。在和很多工作的人交流時(shí)我了解到,他們公司從沒(méi)考慮使用WinCE,因?yàn)槌杀靖撸际鞘褂胠inux進(jìn)行開(kāi)發(fā)。我讀研究生的的實(shí)驗(yàn)室中也沒(méi)有使用WinCE的,大都研究linux,也有少部分項(xiàng)目使用vxwork,但是就沒(méi)有聽(tīng)說(shuō)過(guò)使用WinCE的,原因就是開(kāi)源!當(dāng)然現(xiàn)在WinCE6.0聽(tīng)說(shuō)也開(kāi)源,不過(guò)在成本和資源上linux已經(jīng)有了無(wú)人能擋的優(yōu)勢(shì)。與此相對(duì)應(yīng)的是,越來(lái)越多的電子廠商已經(jīng)開(kāi)始使用linux開(kāi)發(fā)產(chǎn)品。舉個(gè)例子,Google近期開(kāi)發(fā)的智能手機(jī)操作系統(tǒng)Android其實(shí)就是使用linux-2.6.23內(nèi)核進(jìn)行改進(jìn)得到的。
第一,學(xué)習(xí)基本的裸機(jī)編程。
對(duì)于學(xué)硬件的人而言,必須先對(duì)硬件的基本使用方法有感性的認(rèn)識(shí),更必須深刻認(rèn)識(shí)該硬件的控制方式,如果一開(kāi)始就學(xué)linux系統(tǒng)、學(xué)移植那么只會(huì)馬上就陷入一個(gè)很深的漩渦。我在剛剛開(kāi)始學(xué)ARM的時(shí)候是選擇ARM7(主意是當(dāng)時(shí)ARM9還很貴),學(xué)ARM7的時(shí)候還是保持著學(xué)51單片機(jī)的思維,使用ADS去編程,第一個(gè)實(shí)驗(yàn)就是控制led。學(xué)過(guò)一段時(shí)間ARM的人都會(huì)笑這樣很笨,實(shí)際上也不是,我倒是覺(jué)得有這個(gè)過(guò)程會(huì)好很多,因?yàn)闊o(wú)論做多復(fù)雜的系統(tǒng)最終都會(huì)落實(shí)到這些最底層的硬件控制,因此對(duì)這些硬件的控制有了感性的認(rèn)識(shí)就好很多了
學(xué)習(xí)裸機(jī)的編程的同時(shí)要好好理解這個(gè)硬件的構(gòu)架、控制原理,這些我稱(chēng)他為理解硬件。所謂的理解硬件就是說(shuō),理解這個(gè)硬件是怎么組織這么多資源的,這些資源又是怎么由cpu、由編程進(jìn)行控制的。比如說(shuō),s3c2410中有AD轉(zhuǎn)換器,有GPIO(通用IO口),還有nandflash控制器,這些東西都有一些寄存器來(lái)控制,這些寄存器都有一個(gè)地址,那么這些地址是什么意思?又怎么通過(guò)寄存器來(lái)控制這些外圍設(shè)備的運(yùn)轉(zhuǎn)?還有,norflash內(nèi)部的每一個(gè)單元在這個(gè)芯片的內(nèi)存中都有一個(gè)相應(yīng)的地址單元,那么這些地址與剛剛說(shuō)的寄存器地址又有什么關(guān)系?他們是一樣的嗎?而與norflash相對(duì)應(yīng)的nandflash內(nèi)部的儲(chǔ)存單元并不是線性排放的,那么s3c2410怎么將nandflash的地址映射在內(nèi)存空間上進(jìn)行使用?或者簡(jiǎn)單地說(shuō)應(yīng)該怎么用nandflash?再有,使用ADS進(jìn)對(duì)ARM9行編程時(shí)都需要使用到一個(gè)初始化的匯編文件,這個(gè)文件究竟有什么用?他里面的代碼是什么意思?不要這個(gè)可以嗎?
諸如此類(lèi)都是對(duì)硬件的理解,理解了這些東西就對(duì)硬件有很深的理解了,這對(duì)以后更深一步的學(xué)習(xí)將有很大的幫助,如果跳過(guò)這一步,我相信越往后學(xué)越會(huì)
覺(jué)得迷茫,越覺(jué)得這寫(xiě)東西深不可測(cè)。因?yàn)?,你的根基沒(méi)打好。
不過(guò)先聲明一下,本人并沒(méi)有使用ADS對(duì)ARM9進(jìn)行編程,我是學(xué)完ARM7后直接就使用ARM9學(xué)linux系統(tǒng)的,因此涉及使用ADS對(duì)ARM9進(jìn)行編程的問(wèn)題我很難回答^_^,自己去研究研究吧。
對(duì)于這部分不久將提供一份教程,這個(gè)教程中的例程并不是我為我們所代理的板子寫(xiě)的,是我在我們學(xué)院實(shí)驗(yàn)室拿的,英培特為他們自己的實(shí)驗(yàn)箱寫(xiě)的,不過(guò)很有借鑒意義,可以作為一份有價(jià)值的參考。
第二,使用linux系統(tǒng)進(jìn)行一些基本的實(shí)驗(yàn)。
在買(mǎi)一套板子的時(shí)候一般會(huì)提供一些linux的試驗(yàn)例程,好好做一段時(shí)間這個(gè)吧,這個(gè)過(guò)程也是很有意義的,也是為進(jìn)一步的學(xué)習(xí)積累感性認(rèn)識(shí),你能想象一個(gè)從沒(méi)有使用過(guò)linux系統(tǒng)的人能學(xué)好linux的編程嗎?好好按照手冊(cè)上的例程做一做里面的實(shí)驗(yàn),雖然有點(diǎn)娃娃學(xué)走路,有點(diǎn)弱智,但是我想很多高手都會(huì)經(jīng)歷這個(gè)過(guò)程。
在這方面我們深藍(lán)科技目前沒(méi)有計(jì)劃提供相應(yīng)的例程,主要是開(kāi)發(fā)板的提供商會(huì)提供很豐富的例程,我們不做重復(fù)工作,只提供他們沒(méi)有的、最有價(jià)值的東西給大家。
第三,研究完整的linux系統(tǒng)的的運(yùn)行過(guò)程。
所謂完整的linux系統(tǒng)包括哪些部分呢?
三部分:bootloader、linux kernel(linux內(nèi)核)、rootfile(根文件系統(tǒng))。那么這3部分是怎么相互協(xié)作來(lái)構(gòu)成這個(gè)系統(tǒng)的呢?各自有什么用呢?三者有什么聯(lián)系?怎么聯(lián)系?系統(tǒng)的執(zhí)行流程又是怎么樣的呢?搞清楚這個(gè)問(wèn)題你對(duì)整個(gè)系統(tǒng)的運(yùn)行就很清楚了,對(duì)于下一步制作這個(gè)linux系統(tǒng)就打下了另一個(gè)重要的根基。介紹這方面的資料網(wǎng)上可以挖掘到幾噸,自己好好研究吧。第四,開(kāi)始做系統(tǒng)移植。
上面說(shuō)到完整的linux有3部分,而且你也知道了他們之間的關(guān)系和作用,那么現(xiàn)在你要做的便是自己動(dòng)手學(xué)會(huì)制作這些東西。
當(dāng)然我不可能叫你編寫(xiě)這些代碼,這不實(shí)現(xiàn)。事實(shí)上這個(gè)3者都能在網(wǎng)下載到相應(yīng)的源代碼,但是這個(gè)源代碼不可能下載編譯后就能在你的系統(tǒng)上運(yùn)行,需要很多的修改,直到他能運(yùn)行在你的板子上,這個(gè)修改的過(guò)程就叫移植。在進(jìn)行移植的過(guò)程中你要學(xué)的東西很多,要懂的相關(guān)知識(shí)也很多,等你完成了這個(gè)過(guò)程你會(huì)發(fā)現(xiàn)你已經(jīng)算是一個(gè)初出茅廬的高手了。
在這個(gè)過(guò)程中如果你很有研究精神的話你必然會(huì)想到看源代碼。很多書(shū)介紹你
怎么閱讀linux源代碼,我不提倡無(wú)目的地去看linux源代碼,用許三多的話說(shuō),這沒(méi)有意義。等你在做移植的時(shí)候你覺(jué)得你必須去看源代碼時(shí)再去找基本好書(shū)看看,這里我推薦一本好書(shū)倪繼利的《linux內(nèi)核的分析與編程》,這是一本針對(duì)linux-2.6.11內(nèi)核的書(shū),說(shuō)得很深,建議先提高自己的C語(yǔ)言編程水平再去看。
至于每個(gè)部分的移植網(wǎng)上也可以找到好多噸的資料,自己研究研究吧,不過(guò)要提醒的是,很多介紹自己經(jīng)驗(yàn)的東西都或多或少有所保留,你按照他說(shuō)的去做總有一些問(wèn)題,但是他不會(huì)告訴你怎么解決,這時(shí)就要靠自己,如果自己都靠不住就找我一起研究研究吧,我也不能保證能解決你的問(wèn)題,因?yàn)槲椅幢赜龅竭^(guò)你的問(wèn)題,不過(guò)我相信能給你一點(diǎn)建議,也許有助你解決問(wèn)題。
這一步的最終目的是,從源代碼的官方主頁(yè)上(都是外國(guó)的,悲哀)下載標(biāo)準(zhǔn)的源代碼包,然后進(jìn)行修改,最終運(yùn)行在板子上。
盜用阿基米德的一句話:“給我一根網(wǎng)線,我能將linux搞定”。
第五,研究linux驅(qū)動(dòng)程序的編寫(xiě)。
移植系統(tǒng)并不是最終的目的,最終的目的是開(kāi)發(fā)產(chǎn)品,做項(xiàng)目,這些都要進(jìn)行驅(qū)動(dòng)程序的開(kāi)發(fā)。
Linux的驅(qū)動(dòng)程序可以說(shuō)是五花八門(mén),linux2.4和linux2.6的編寫(xiě)有相當(dāng)大的區(qū)別,就是同為linux2.6但是不同版本間的驅(qū)動(dòng)程序也有區(qū)別,因此編寫(xiě)linux的驅(qū)動(dòng)程序變都不是那么容易的事情,對(duì)于最新版本的驅(qū)動(dòng)程序的編寫(xiě)甚至還沒(méi)有足夠的參考資料。那么我的建議就是使用、移植一個(gè)不算很新的版本內(nèi)核,這樣到時(shí)學(xué)驅(qū)動(dòng)的編程就有足夠的資料了。
這部分的推薦書(shū)籍可以參考另一篇文章《推薦幾本學(xué)習(xí)嵌入式linux的書(shū)籍》。第六,研究應(yīng)用程序的編寫(xiě)。
做作品做項(xiàng)目除了編寫(xiě)驅(qū)動(dòng)程序,最后還要編寫(xiě)應(yīng)用程序?,F(xiàn)在的趨勢(shì)是圖形應(yīng)用程序的開(kāi)發(fā),而圖形應(yīng)用程序中用得最多的還是qt/e函數(shù)庫(kù)。我一直就使用這個(gè)函數(shù)庫(kù)來(lái)開(kāi)發(fā)自己的應(yīng)用程序,不過(guò)我希望你能使用國(guó)產(chǎn)的MiniGUI函數(shù)庫(kù)。盜用周杰倫的廣告詞就是“支持國(guó)產(chǎn),支持MiniGUI”。MiniGUI的編程比較相似Windows下的VC編程,比較容易上手,效果應(yīng)該說(shuō)是相當(dāng)不錯(cuò)的,我曾使用過(guò)來(lái)開(kāi)發(fā)ARM7的程序。不過(guò)MiniGUI最大的不好就是沒(méi)有像qtopia這樣的圖形操作平臺(tái),這大大限制了他的推廣,我曾經(jīng)幻想過(guò)與北京飛漫公司(就是MiniGUI的版權(quán)擁有者)合作使用MiniGUI函數(shù)庫(kù)開(kāi)發(fā)像qtopia這樣的圖形操作平臺(tái),不過(guò)由于水平有限這只能是幻想了,呵呵。
完成這一步你基本就學(xué)完了嵌入式linux的全部?jī)?nèi)容了。
還有一個(gè)小小的經(jīng)驗(yàn)想和大家分享。我在學(xué)習(xí)嵌入式linux的過(guò)程中很少問(wèn)人,客觀原因是身邊的老師、同學(xué)師兄都沒(méi)有這方面的高手,主觀原因是我不喜歡問(wèn)人,喜歡自己研究解決問(wèn)題。這樣做有個(gè)好處,就是可以提高自己解決問(wèn)題的能力,因?yàn)樽鲞@些東西總有很多問(wèn)題你難以理解,別人也沒(méi)有這方面的經(jīng)驗(yàn),也不是所有問(wèn)題都有人給你答案,這時(shí)必須要自己解決問(wèn)題,這樣,個(gè)人的解決問(wèn)題能力就顯得非常關(guān)鍵了。因此我的建議就是一般的問(wèn)題到網(wǎng)上搜索一下,確實(shí)找不到答案了就問(wèn)問(wèn)高手,還是不行了就自己去研究,不要一味去等別人幫你解決問(wèn)題。
記住,問(wèn)題是學(xué)習(xí)的最好機(jī)會(huì)。
第四篇:ARM學(xué)習(xí)方法
ARM學(xué)習(xí)方法
一步一步學(xué)習(xí)uCOS和ARM體系結(jié)構(gòu)的心得
學(xué)習(xí)必備條件:
1、一塊開(kāi)發(fā)板——例如44B0開(kāi)發(fā)板,建議初學(xué)者不要去購(gòu)買(mǎi)那些ARM9體系結(jié)構(gòu)的,因?yàn)樽鳛槌鯇W(xué)者來(lái)說(shuō)ARM9體系的東西是很復(fù)雜的,買(mǎi)塊ARM7的就可以了(先入門(mén),然后再提高);
2、學(xué)習(xí)必備書(shū)籍
《Pointer on C》中文名字叫《C和指針》(美)里科|譯者:徐波 前提你的了解C指針吧(這本書(shū)時(shí)非常經(jīng)典的書(shū)籍,完全可以看中文版的,作者翻譯的非常到位)
《嵌入式實(shí)時(shí)操作系統(tǒng)μCOS-II(第二版)》--邵貝貝翻譯的(不能不承認(rèn)邵貝貝是一個(gè)非常好的翻譯者)
《μC/OS-Ⅱ標(biāo)準(zhǔn)教程》--楊宗德
對(duì)于英文不好的朋友可以購(gòu)買(mǎi)《ARM體系結(jié)構(gòu)與編程》--杜春蕾(該書(shū)其實(shí)還是有很多翻譯錯(cuò)誤的,大家在看的時(shí)候要注意一下,但是不可否認(rèn)的是這本書(shū)到目前為止算得上是我見(jiàn)過(guò)最好的講解關(guān)于ARM體系結(jié)構(gòu)的書(shū)籍了)
對(duì)于英文過(guò)關(guān)的兄弟姐妹可以直接看
《ARM+Architecture+Reference+Manual(2nd+Edition)》
3、有條件的兄弟姐妹可以選購(gòu)一個(gè)仿真器 JLINK V8全功能版(這個(gè)的感謝中國(guó)的優(yōu)秀工程師,是他們把原價(jià)1999多的JLINK變成了幾十元錢(qián)的東西
4、開(kāi)發(fā)環(huán)境--MDK350或者IARARM
如果要熟悉這些開(kāi)發(fā)環(huán)境,就需要好好讀一些這些開(kāi)發(fā)環(huán)境的手冊(cè)資料,不好意思,這個(gè)就只有英文的了。
以上4個(gè)條件具備下來(lái),可能也不會(huì)超過(guò)500元錢(qián)。
下面來(lái)講講我的學(xué)習(xí)經(jīng)歷:
我剛開(kāi)始學(xué)習(xí)的時(shí)候,自己走了不少?gòu)澛?,這里就省略不說(shuō)了。
第一步:在開(kāi)發(fā)板上跑跑簡(jiǎn)單程序
因?yàn)槟阌虚_(kāi)發(fā)板,所以你就先在網(wǎng)上找一下對(duì)應(yīng)開(kāi)發(fā)板上的ARM芯片的datasheet,你都不先搞懂芯片的手冊(cè),又談何讓自己實(shí)現(xiàn)很多功能呢。
熟讀數(shù)據(jù)手冊(cè)后,就盡可能的在開(kāi)發(fā)板上實(shí)現(xiàn)芯片對(duì)應(yīng)的每個(gè)功能,像GPIO實(shí)驗(yàn),UART通訊,I2C,ADC,DAC,PWM,RTC,SPI等等。自己寫(xiě)自己的程序,然后在開(kāi)發(fā)板上好好實(shí)踐一下。
當(dāng)每個(gè)功能模塊都實(shí)現(xiàn)以后,建議你讓你的開(kāi)發(fā)板實(shí)驗(yàn)一下多個(gè)功能復(fù)合使用,比如用UART打印出ADC的值什么的。
第二步:學(xué)習(xí)uCOS
鑒于你已經(jīng)購(gòu)買(mǎi)了《嵌入式實(shí)時(shí)操作系統(tǒng)μCOS-II(第二版)》,除開(kāi)以下三個(gè)文件:
1、OS_CPU_C.c2、OS_CPU.H,3、OS_CPU_A.asm(這個(gè)是MDK環(huán)境下的匯編文件)或OS_CPU_A.a(這個(gè)是IAR開(kāi)發(fā)環(huán)境下的匯編)
這三個(gè)文件的處理機(jī)制暫時(shí)可以不用先了解怎么做的,怎么移植的,以后再說(shuō)
第一次讀這本書(shū)時(shí),搞清楚什么是任務(wù),什么是前后臺(tái),為什么要在系統(tǒng)中加入嵌入式操作系統(tǒng)。
第二次讀這本書(shū)時(shí),詳細(xì)了解他的TCB(Task Control Block)和ECB(Event Control
Block)的數(shù)據(jù)結(jié)構(gòu),搞清楚整個(gè)uCOS的實(shí)現(xiàn)機(jī)制(這里不要先就去看uCOS的移植,這樣只會(huì)讓你云里霧里的)
第三次讀這本書(shū)是,詳細(xì)了解信號(hào)量,互斥信號(hào)量、消息隊(duì)列、郵箱和時(shí)間標(biāo)志組
鑒于你又購(gòu)買(mǎi)了《μC/OS-Ⅱ標(biāo)準(zhǔn)教程》,你 可以想在VC++ 6.0開(kāi)發(fā)環(huán)境下實(shí)現(xiàn)對(duì)信號(hào)量,互斥信號(hào)量、消息隊(duì)列、郵箱和事件標(biāo)志組的上機(jī)實(shí)驗(yàn)代碼。
如果還是不能了解uCOS怎么工作的,建議你多看幾遍(我可是足足看了6、7遍了,書(shū)都翻得脫頁(yè)了。汗說(shuō)明我很笨,希望各位看官都比我聰明,呵呵)
第三步:建立對(duì)uCOS的初步認(rèn)識(shí)
在網(wǎng)上下載對(duì)應(yīng)你的開(kāi)發(fā)板ARM芯片移植好了文件OS_CPU_C.c,OS_CPU.H,OS_CPU_A.asm(當(dāng)然有的開(kāi)發(fā)板已經(jīng)提供了這樣的基礎(chǔ)實(shí)驗(yàn))
在你的開(kāi)發(fā)板上跑跑uCOS,建立起自己對(duì)于uCOS在ARM7開(kāi)發(fā)板上的認(rèn)識(shí)。
在你所購(gòu)買(mǎi)的ARM7開(kāi)發(fā)板上編寫(xiě)一個(gè)自己跑uCOS得任務(wù)(這里先不要去搞中斷,初學(xué)者對(duì)于uCOS下的中斷程序設(shè)計(jì)根本就搞不清楚)
第四步:熟悉ARM體系結(jié)構(gòu)
因?yàn)槭腔贏RM7的移植,建議英文不好的去看看這本書(shū)《ARM體系結(jié)構(gòu)與編程》(雖然這本書(shū)的作者在翻譯時(shí)有很多操作,但是還是建議初學(xué)者去購(gòu)買(mǎi)來(lái)好好看看),對(duì)于英文好的直接在網(wǎng)上下載《ARM+Architecture+Reference+Manual(2nd+Edition)》看就可以了
在看這個(gè)《ARM體系結(jié)構(gòu)與編程》或
《ARM+Architecture+Reference+Manual(2nd+Edition)》時(shí),務(wù)必注意多看幾次,了解以下幾個(gè)方面的知識(shí):
1、ARM模式下的指令集
2、Thumd模式下的指令集
3、異常模式及進(jìn)入異常時(shí)ARM如何處理
4、一定能熟悉ARM中的匯編指令
5、熟悉CPSR,R0-R7,R8-R14,R15及在各個(gè)模式下,這些寄存器的映射。熟悉以后,再來(lái)自己做uCOS的移植了。
第五步:uCOS移植
當(dāng)然在自己編寫(xiě)代碼做移植uCOS之前,有必要看看別人的移植代碼。
其實(shí)對(duì)于uCOS的移植,我們只需要編寫(xiě)關(guān)鍵的三個(gè)文件,文件如下:
1、OS_CPU_C.c(堆棧初始化操作OSTaskStkInit函數(shù))
2、OS_CPU.H:完成在該芯片下的數(shù)據(jù)定義,比如什么unsigned char 之類(lèi)的,注意一下OS_STK和OS_CPU_SR的定義,定義下關(guān)中斷和開(kāi)中斷的方式,有三個(gè)只能選擇1個(gè),ARM芯片一般是定義為第三種方式
3、OS_CPU_A.asm(這個(gè)是MDK環(huán)境下的匯編文件)或OS_CPU_A.a(這個(gè)是IAR開(kāi)發(fā)環(huán)境下的匯編),這個(gè)文件的內(nèi)容就多了,要做以下幾個(gè)函數(shù)的重寫(xiě):
1、OSStartHighRdy函數(shù)
2、任務(wù)級(jí)的任務(wù)切換函數(shù)OSCtxSw,3、中斷級(jí)的任務(wù)切換OSIntCtxSw,其實(shí)只要寫(xiě)好了OSCtxSw,OSIntCtxSw自然就copy一下就完了(copy的時(shí)候記者要把保存當(dāng)前任務(wù)的寄存器去掉就可以了。第六步:測(cè)試自己的uCOS移植代碼
第七步:在自己寫(xiě)的uCOS移植代碼中跑跑任務(wù)。
[分享]ARM初學(xué)者學(xué)習(xí)ARM的步驟
很多人學(xué)完單片機(jī)就想學(xué)arm,但不知如何去學(xué)~現(xiàn)在列出一下學(xué)習(xí)這方面的步驟-----基于linux系統(tǒng)的學(xué)習(xí)步驟如下:(一步步來(lái)哦:)
其實(shí)這也只是個(gè)基礎(chǔ),以后實(shí)際做項(xiàng)目了還要去學(xué)很多
1、Linux 基礎(chǔ)
安裝Linux操作系統(tǒng)
Linux文件系統(tǒng)
Linux常用命令
Linux啟動(dòng)過(guò)程詳解
熟悉Linux服務(wù) 能夠獨(dú)立安裝Linux操作系統(tǒng)
能夠熟練使用Linux系統(tǒng)的基本命令
認(rèn)識(shí)Linux系統(tǒng)的常用服務(wù) 安裝Linux操作系統(tǒng)
Linux基本命令實(shí)踐
設(shè)置Linux環(huán)境變量
定制Linux的服務(wù) Shell 編程基礎(chǔ)使用vi編輯文件
使用Emacs編輯文件
使用其他編輯器
2、Shell 編程基礎(chǔ)
Shell簡(jiǎn)介
認(rèn)識(shí)后臺(tái)程序
Bash編程熟悉Linux系統(tǒng)下的編輯環(huán)境
熟悉Linux下的各種Shell
熟練進(jìn)行shell編程熟悉vi基本操作
熟悉Emacs的基本操作
比較不同shell的區(qū)別
編寫(xiě)一個(gè)測(cè)試服務(wù)器是否連通的shell腳本程序
編寫(xiě)一個(gè)查看進(jìn)程是否存在的shell腳本程序
編寫(xiě)一個(gè)帶有循環(huán)語(yǔ)句的shell腳本程序
3、Linux 下的 C 編程基礎(chǔ)
linux C語(yǔ)言環(huán)境概述
Gcc使用方法
Gdb調(diào)試技術(shù)
Autoconf
Automake
Makefile
代碼優(yōu)化 熟悉Linux系統(tǒng)下的開(kāi)發(fā)環(huán)境
熟悉Gcc編譯器
熟悉Makefile規(guī)則編寫(xiě)Hello,World程序
使用 make命令編譯程序
編寫(xiě)帶有一個(gè)循環(huán)的程序
調(diào)試一個(gè)有問(wèn)題的程序
4、嵌入式系統(tǒng)開(kāi)發(fā)基礎(chǔ)
嵌入式系統(tǒng)概述
交叉編譯
配置TFTP服務(wù)
配置NFS服務(wù)
下載Bootloader和內(nèi)核
嵌入式Linux應(yīng)用軟件開(kāi)發(fā)流程
熟悉嵌入式系統(tǒng)概念以及開(kāi)發(fā)流程
建立嵌入式系統(tǒng)開(kāi)發(fā)環(huán)境制作cross_gcc工具鏈
編譯并下載U-boot
編譯并下載Linux內(nèi)核
編譯并下載Linux應(yīng)用程序
4、嵌入式系統(tǒng)移植
Linux內(nèi)核代碼
平臺(tái)相關(guān)代碼分析
ARM平臺(tái)介紹
平臺(tái)移植的關(guān)鍵技術(shù)
移植Linux內(nèi)核到 ARM平臺(tái) 了解移植的概念
能夠移植Linux內(nèi)核移植Linux2.6內(nèi)核到 ARM9開(kāi)發(fā)板
5、嵌入式 Linux 下串口通信
串行I/O的基本概念
嵌入式Linux應(yīng)用軟件開(kāi)發(fā)流程
Linux系統(tǒng)的文件和設(shè)備
與文件相關(guān)的系統(tǒng)調(diào)用
配置超級(jí)終端和MiniCOM 能夠熟悉進(jìn)行串口通信熟悉文件I/O 編寫(xiě)串口通信程序
編寫(xiě)多串口通信程序
6、嵌入式系統(tǒng)中多進(jìn)程程序設(shè)計(jì)
Linux系統(tǒng)進(jìn)程概述
嵌入式系統(tǒng)的進(jìn)程特點(diǎn)
進(jìn)程操作
守護(hù)進(jìn)程
相關(guān)的系統(tǒng)調(diào)用了解Linux系統(tǒng)中進(jìn)程的概念
能夠編寫(xiě)多進(jìn)程程序編寫(xiě)多進(jìn)程程序
編寫(xiě)一個(gè)守護(hù)進(jìn)程程序
sleep系統(tǒng)調(diào)用任務(wù)管理、同步與通信 Linux任務(wù)概述 任務(wù)調(diào)度
管道
信號(hào)
共享內(nèi)存
任務(wù)管理 API 了解Linux系統(tǒng)任務(wù)管理機(jī)制
熟悉進(jìn)程間通信的幾種方式
熟悉嵌入式Linux中的任務(wù)間同步與通信
編寫(xiě)一個(gè)簡(jiǎn)單的管道程序?qū)崿F(xiàn)文件傳輸
編寫(xiě)一個(gè)使用共享內(nèi)存的程序
7、嵌入式系統(tǒng)中多線程程序設(shè)計(jì)
線程的基礎(chǔ)知識(shí)
多線程編程方法
線程應(yīng)用中的同步問(wèn)題了解線程的概念
能夠編寫(xiě)簡(jiǎn)單的多線程程序編寫(xiě)一個(gè)多線程程序
8、嵌入式 Linux 網(wǎng)絡(luò)編程
網(wǎng)絡(luò)基礎(chǔ)知識(shí)
嵌入式Linux中TCP/IP網(wǎng)絡(luò)結(jié)構(gòu)
socket 編程
常用 API函數(shù)
分析Ping命令的實(shí)現(xiàn)
基本UDP套接口編程
許可證管理
PPP協(xié)議
GPRS 了解嵌入式Linux網(wǎng)絡(luò)體系結(jié)構(gòu)
能夠進(jìn)行嵌入式Linux環(huán)境下的socket 編程
熟悉UDP協(xié)議、PPP協(xié)議
熟悉GPRS 使用socket 編寫(xiě)代理服務(wù)器
使用socket 編寫(xiě)路由器
編寫(xiě)許可證服務(wù)器
指出TCP和UDP的優(yōu)缺點(diǎn)
編寫(xiě)一個(gè)web服務(wù)器
編寫(xiě)一個(gè)運(yùn)行在 ARM平臺(tái)的網(wǎng)絡(luò)播放器
9、GUI 程序開(kāi)發(fā)
GUI基礎(chǔ)
嵌入式系統(tǒng)GUI類(lèi)型
編譯QT
進(jìn)行QT開(kāi)發(fā)熟悉嵌入式系統(tǒng)常用的GUI
能夠進(jìn)行QT編程使用QT編寫(xiě)“Hello,World”程序調(diào)試一個(gè)加入信號(hào)/槽的實(shí)例
通過(guò)重載QWidget 類(lèi)方法處理事件
10、Linux 字符設(shè)備驅(qū)動(dòng)程序
設(shè)備驅(qū)動(dòng)程序基礎(chǔ)知識(shí)
Linux系統(tǒng)的模塊
字符設(shè)備驅(qū)動(dòng)分析
fs_operation結(jié)構(gòu)
加載驅(qū)動(dòng)程序了解設(shè)備驅(qū)動(dòng)程序的概念
了解Linux字符設(shè)備驅(qū)動(dòng)程序結(jié)構(gòu)
能夠編寫(xiě)字符設(shè)備驅(qū)動(dòng)程序編寫(xiě)Skull驅(qū)動(dòng)
編寫(xiě)鍵盤(pán)驅(qū)動(dòng)
編寫(xiě)I/O驅(qū)動(dòng)
分析一個(gè)看門(mén)狗驅(qū)動(dòng)程序
對(duì)比Linux2.6內(nèi)核與2.4內(nèi)核中字符設(shè)備驅(qū)動(dòng)的不同 Linux 塊設(shè)備驅(qū)動(dòng)程序塊設(shè)備驅(qū)動(dòng)程序工作原理
典型的塊設(shè)備驅(qū)動(dòng)程序分析
塊設(shè)備的讀寫(xiě)請(qǐng)求隊(duì)列了解Linux塊設(shè)備驅(qū)動(dòng)程序結(jié)構(gòu)
能夠編寫(xiě)簡(jiǎn)單的塊設(shè)備驅(qū)動(dòng)程序比較字符設(shè)備與塊設(shè)備的異同編寫(xiě)MMC卡驅(qū)動(dòng)程序
分析一個(gè)文件系統(tǒng)
對(duì)比Linux2.6內(nèi)核與2.4內(nèi)核中塊設(shè)備驅(qū)動(dòng)的不同
11、文件系統(tǒng)
虛擬文件系統(tǒng)
文件系統(tǒng)的建立
ramfs內(nèi)存文件系統(tǒng)
proc文件系統(tǒng)
devfs 文件系統(tǒng)
MTD技術(shù)簡(jiǎn)介
MTD塊設(shè)備初始化
MTD塊設(shè)備的讀寫(xiě)操作了解Linux系統(tǒng)的文件系統(tǒng)了解嵌入式Linux的文件系統(tǒng)
了解MTD技術(shù)
能夠編寫(xiě)簡(jiǎn)單的文件系統(tǒng)為 ARM9開(kāi)發(fā)板添加 MTD支持移植JFFS2文件系統(tǒng)
通過(guò)proc文件系統(tǒng)修改操作系統(tǒng)參數(shù)
分析romfs 文件系統(tǒng)源代碼
創(chuàng)建一個(gè)cramfs 文件系統(tǒng)
第五篇:arm對(duì)講機(jī)報(bào)告
《嵌入式實(shí)訓(xùn)課》 課程設(shè)計(jì)報(bào)告
設(shè)計(jì)題目: 基于ARM的網(wǎng)絡(luò)對(duì)講機(jī)
專(zhuān) 業(yè) 電子信息科學(xué)與技術(shù) 班 級(jí) 091 學(xué) 號(hào) 200916022118 學(xué)生姓名 大石頭
2012年 6 月 10 日
摘要
語(yǔ)音對(duì)講系統(tǒng)是現(xiàn)代智能化服務(wù)的一個(gè)重要組成部分,它對(duì)于提高社會(huì)高效率和方便還有安全監(jiān)控力度提高,在現(xiàn)代社會(huì)語(yǔ)音對(duì)講機(jī)在小區(qū)等一些工程中高效率的提高的人們方便和減輕了很多事情的工作量。本設(shè)計(jì)首先是用網(wǎng)線使用UDP協(xié)議將兩個(gè)ARM機(jī)連接起來(lái),通過(guò)麥克風(fēng)傳遞給dev/dsp聲卡的數(shù)據(jù)然后通過(guò)網(wǎng)線傳送到另外一臺(tái)ARM機(jī)的接收端通過(guò)dev/dsp聲卡播放來(lái)實(shí)現(xiàn)對(duì)講的功能。由這樣的思路來(lái)實(shí)現(xiàn)對(duì)講機(jī)的功能。
目錄
一、前言...................................................................................................................4
二、系統(tǒng)的總體設(shè)計(jì).................................................................................................4(一)功能描述.....................................................................................................4(二)系統(tǒng)基本功能圖..........................................................................................5
三、相關(guān)技術(shù)綜述.....................................................................................................5(一)Linux操作系統(tǒng)...........................................................................................5 1.Linux的歷史...........................................................................................5 2.Linux具有以下一些特點(diǎn):......................................................................6(二)聲卡驅(qū)動(dòng).....................................................................................................7(三)(四)
四、(一)(二)(三)(四)UDP協(xié)議.....................................................................................................8 Socket套接字.............................................................................................9 SamSung公司s3c6410微處理器簡(jiǎn)介...........................................................9 SamSung公司s3c6410微處理器功能特性...................................................11 系統(tǒng)設(shè)計(jì)器件.............................................................................................11 電源及復(fù)位電路........................................................................................12 系統(tǒng)的硬件設(shè)計(jì).................................................................................................9 3.電源電路...............................................................................................12 4.復(fù)位電路...............................................................................................12(五)系統(tǒng)時(shí)鐘電路............................................................................................13(六)(七)系統(tǒng)存儲(chǔ)器電路........................................................................................14 IIS數(shù)字音頻電路.....................................................................................15 5.下面是WM9714芯片和音頻線路輸入的原理圖:.....................................16 6.下圖是mic座原理圖:..........................................................................17 7.下圖為MIC輸入座的俯視圖:................................................................17(八)網(wǎng)卡電路...................................................................................................17
五、系統(tǒng)的軟件設(shè)計(jì)...............................................................................................19(一)總體設(shè)計(jì)流程圖........................................................................................19(二)(三)(四)聲卡部分...................................................................................................19 網(wǎng)絡(luò)連接部分............................................................................................22 總體部分...................................................................................................23
六、系統(tǒng)測(cè)試..........................................................................................................24(一)Linux系統(tǒng)移植安裝..................................................................................24(二)(三)七、八、九、交叉編譯環(huán)境搭建.....................................................................................24 聲卡的初始化參數(shù).....................................................................................24 參考文獻(xiàn)..........................................................................................................24 總結(jié)與心得體會(huì)...............................................................................................25 致謝.................................................................................................................26
一、前言
對(duì)講機(jī)對(duì)大家來(lái)說(shuō)一點(diǎn)也不陌生?,F(xiàn)在小區(qū)和寫(xiě)字樓很多場(chǎng)所的保安人員都佩戴有對(duì)講機(jī)。它給我們的日常生活帶來(lái)了便利。對(duì)講機(jī)的英文名稱(chēng)是 two way radio,它是一種雙向移動(dòng)通信工具,在不需要任何網(wǎng)絡(luò)支持的情況下,就可以通話,沒(méi)有話費(fèi)產(chǎn)生,適用于相對(duì)固定且頻繁通過(guò)話的場(chǎng)合。對(duì)講機(jī)已經(jīng)有很長(zhǎng)的一段歷史了,大部分的對(duì)講機(jī)是基于模擬電路的集成芯片技術(shù)。功能比較單一,價(jià)格也不菲。今天我們?cè)O(shè)計(jì)的對(duì)講機(jī)是應(yīng)用了現(xiàn)在主流處理器arm的技術(shù)。
首先,我們?cè)赼rm開(kāi)發(fā)板燒入了linux系統(tǒng),在開(kāi)發(fā)的時(shí)候無(wú)論是系統(tǒng)還是代碼,都增加了可移植性。另外便于擴(kuò)展我們目前沒(méi)考慮后期需要的模塊。比如,pc對(duì)各個(gè)對(duì)講機(jī)的數(shù)據(jù)監(jiān)控,lcd顯示等等。Arm的開(kāi)發(fā)靈活的特點(diǎn)讓這些都變成了可能。另外,從經(jīng)濟(jì)方面來(lái)看,現(xiàn)在arm芯片的價(jià)格相對(duì)來(lái)說(shuō)也不高,在市場(chǎng)方面帶來(lái)價(jià)格上的優(yōu)勢(shì)。
二、系統(tǒng)的總體設(shè)計(jì)
(一)功能描述
在6410開(kāi)發(fā)板上寫(xiě)入linux系統(tǒng)后,對(duì)dev/dsp聲卡進(jìn)行編寫(xiě)程序。程序分為錄音,放音,網(wǎng)絡(luò)數(shù)據(jù)傳輸?shù)葞撞糠帧J紫?,第一塊arm(以后稱(chēng)為arm1)在按鍵按下的情況下,麥克風(fēng)工作,此時(shí)對(duì)聲卡進(jìn)行讀寫(xiě),并將數(shù)據(jù)經(jīng)網(wǎng)路傳給另一塊arm(以后成為arm2,設(shè)計(jì)過(guò)程中用pc代替)。此時(shí)如果arm2的按鍵沒(méi)有按下的情況下將網(wǎng)絡(luò)傳過(guò)來(lái)的數(shù)據(jù)寫(xiě)入聲卡,此時(shí)喇叭發(fā)出聲音。相對(duì)的過(guò)程同上依次重復(fù)下去
4(二)系統(tǒng)基本功能圖
三、相關(guān)技術(shù)綜述
(一)Linux操作系統(tǒng)
1.Linux的歷史
Linux它起源于Unix。是一種可自由發(fā)布的、多用戶(hù)、多任務(wù)的優(yōu)秀操作系統(tǒng)。
UNIX穩(wěn)定性高、可擴(kuò)展性強(qiáng),在金融、電信、能源等一些關(guān)鍵性部門(mén)得到廣泛的應(yīng)用。
1991年,芬蘭赫爾辛基大學(xué)的學(xué)生Linus Torvalds,受Minix系統(tǒng)的啟發(fā),推出一個(gè)新的UNIX的變種。他給Internet上的新聞組comp.os.minix發(fā)了一封信,聲稱(chēng)其開(kāi)發(fā)了一個(gè)免費(fèi)的操作系統(tǒng),并歡迎其他的開(kāi)發(fā)者研究他的工作、提出修改意見(jiàn)。
在芬蘭最大的FTP站點(diǎn)上,Linus建立了一個(gè)名為L(zhǎng)inux的目錄存放他的源文件,意思是“Linus的Minix”,于是,Linux就這樣被命名了。
許多程序員獲得了Linux的源代碼。隨著他們不斷將原商用UNIX的特性和產(chǎn)品加入到Linux中來(lái),Linux不斷發(fā)展壯大,到現(xiàn)在為止,已成為具有全部UNIX特征的操作系統(tǒng)。
2.Linux具有以下一些特點(diǎn):
(1)兼容UNIX:Linux是UNIX的完整的實(shí)現(xiàn),它混合了BSD UNIX和System V這兩個(gè)UNIX版本的最優(yōu)良的特性。UNIX中的絕大多數(shù)命令都可以在Linux中找到、并有所加強(qiáng);其可靠性、穩(wěn)定性、以及強(qiáng)大的網(wǎng)絡(luò)功能也得到體現(xiàn)。
(2)價(jià)格低廉:是一種免費(fèi)的、公開(kāi)源碼的自由軟件。它是根據(jù)GNU通用公共許可證(GNU General Public License,GPL)發(fā)布的。
根據(jù)GPL,用戶(hù)可以改變?nèi)魏卧创a,甚至可以銷(xiāo)售Linux。但有一個(gè)前提,如果以盈利為目的,則必須提供系統(tǒng)的源代碼,以便其他人也能進(jìn)一步的修改并銷(xiāo)售。
Linux是由志愿者免費(fèi)開(kāi)發(fā)和維護(hù)的,甚至Linux下的許多應(yīng)用軟件都是根據(jù)GPL發(fā)布的、免費(fèi)的自由軟件。用戶(hù)只需花費(fèi)下載費(fèi)用,完全可以搭建一套全免費(fèi)的、與商用系統(tǒng)性能相當(dāng)?shù)南到y(tǒng)。
(3)強(qiáng)大的網(wǎng)絡(luò)功能: Linux的開(kāi)發(fā)是通過(guò)Internet進(jìn)行的,支持網(wǎng)絡(luò)的功能在開(kāi)發(fā)的早期就已經(jīng)加入了。
6(4)可靠性好:比Windows更可靠。
Linux對(duì)應(yīng)用程序使用的內(nèi)存進(jìn)行了保護(hù),應(yīng)用程序無(wú)法訪問(wèn)系統(tǒng)分配的區(qū)域以外的其他內(nèi)存,因此,一個(gè)軟件的錯(cuò)誤操作不會(huì)造成整個(gè)系統(tǒng)的癱瘓(在Windows系統(tǒng)中經(jīng)常出現(xiàn)的)。
在安全方面,由于源碼被公開(kāi),可消除系統(tǒng)中是否有“后門(mén)”的疑惑。而且,由于一旦發(fā)現(xiàn)漏洞就可以馬上修改源代碼,所以安全性要遠(yuǎn)高于Windows系統(tǒng)。
(5)可移植性好:Linux幾乎可以運(yùn)行在任何的計(jì)算機(jī)系統(tǒng)之上。
(二)聲卡驅(qū)動(dòng)
聲卡驅(qū)動(dòng)程序提供的/dev/dsp 是用于數(shù)字采樣(sampling)和數(shù)字錄音(recording)的設(shè)備文件,它對(duì)于Linux下的音頻編程來(lái)講非常重要:向該設(shè)備寫(xiě)數(shù)據(jù)即意味著激活聲卡上的D/A轉(zhuǎn)換器進(jìn)行放音,而向該設(shè)備讀數(shù)據(jù)則意味 著激活聲卡上的A/D 轉(zhuǎn)換器進(jìn)行錄音。目前許多聲卡都提供有多個(gè)數(shù)字采樣設(shè)備,它們?cè)贚inux下可以通過(guò)/dev/dsp1 等設(shè)備文件進(jìn)行訪問(wèn)。
DSP是數(shù)字信號(hào)處理器(Digital Signal Processor)的簡(jiǎn)稱(chēng),它是用來(lái)進(jìn)行數(shù)字信號(hào)處理的特殊芯片,聲卡使用它來(lái)實(shí)現(xiàn)模擬信號(hào)和數(shù)字信號(hào)的轉(zhuǎn)換。聲卡中的DSP設(shè)備實(shí)際上包含兩個(gè)組成部分:在以只讀方式打開(kāi)時(shí),能夠使用A/D 轉(zhuǎn)換器進(jìn)行聲音的輸入;而在以只寫(xiě)方式打開(kāi)時(shí),則能夠使用D/A轉(zhuǎn)換器進(jìn)行聲音的輸出。嚴(yán)格說(shuō)來(lái),Linux下的應(yīng)用程序要么以只讀方式打開(kāi)/dev/dsp 輸入聲音,要么以只寫(xiě)方式打開(kāi)/dev/dsp 輸出聲音,但事實(shí)上某些聲卡驅(qū)動(dòng)程序仍允許以讀寫(xiě)的方式打開(kāi)/dev/dsp,以便同時(shí)進(jìn)行聲音的輸入和輸出,這對(duì)于某些應(yīng)用場(chǎng)合(如IP 電話)來(lái)講是非常關(guān)鍵的。
在從DSP設(shè)備讀取數(shù)據(jù)時(shí),從聲卡輸入的模擬信號(hào)經(jīng)過(guò)A/D 轉(zhuǎn)換器變成數(shù)字采樣后的樣本(sample),保存在聲卡驅(qū)動(dòng)程序的內(nèi)核緩沖區(qū)中,當(dāng)應(yīng)用程序通過(guò)read 系統(tǒng)調(diào)用從聲卡讀取數(shù)據(jù)時(shí),保存在內(nèi)核緩沖區(qū)中的數(shù)字采樣結(jié)果將 被復(fù)制到應(yīng)用程序所指定的用戶(hù)緩沖區(qū)中。需要指出的是,聲卡采樣頻率是由內(nèi)核中的驅(qū)動(dòng)程序所決定的,而不取決于應(yīng)用程序從聲卡讀取數(shù)據(jù)的速度。如果應(yīng)用程序讀取數(shù)據(jù)的速度過(guò)慢,以致低于聲卡的采樣頻率,那么多余的數(shù)據(jù)將會(huì)被丟棄;如果讀取數(shù)據(jù)的速度過(guò)快,以致高于聲卡的采樣頻率,那么聲卡驅(qū)動(dòng)程序?qū)?huì)阻塞那些請(qǐng)求數(shù)據(jù)的應(yīng)用程序,直到新的數(shù)據(jù)到來(lái)為止。
在向DSP設(shè)備寫(xiě)入數(shù)據(jù)時(shí),數(shù)字信號(hào)會(huì)經(jīng)過(guò)D/A轉(zhuǎn)換器變成模擬信號(hào),然后產(chǎn)生出聲音。應(yīng)用程序?qū)懭霐?shù)據(jù)的速度
同樣應(yīng)該與聲卡的采樣頻率相匹配,否則過(guò)慢的話會(huì)產(chǎn)生聲音暫?;蛘咄nD的現(xiàn)象,過(guò)快的話又會(huì)被內(nèi)核中的聲
卡驅(qū)動(dòng)程序阻塞,直到硬件有能力處理新的數(shù)據(jù)為止。與其它設(shè)備有所不同,聲卡通常不會(huì)支持非阻塞(non-blocking)的I/O 操作。
無(wú)論是從聲卡讀取數(shù)據(jù),或是向聲卡寫(xiě)入數(shù)據(jù),事實(shí)上都具有特定的格式(format),默認(rèn)為8 位無(wú)符號(hào)數(shù)據(jù)、單聲道、8KHz采樣率,如果默認(rèn)值無(wú)法達(dá)到要求,可以通過(guò)ioctl 系統(tǒng)調(diào)用來(lái)改變它們。通常說(shuō)來(lái),在應(yīng)用程序中打 開(kāi)設(shè)備文件/dev/dsp 之后,接下去就應(yīng)該為其設(shè)置恰當(dāng)?shù)母袷?,然后才能從聲卡讀取或者寫(xiě)入數(shù)據(jù)。
(三)UDP協(xié)議
UDP協(xié)議的全稱(chēng)是用戶(hù)數(shù)據(jù)報(bào)協(xié)議,在網(wǎng)絡(luò)中它與TCP協(xié)議一樣用于處理數(shù)據(jù)包。在OSI模型中,在第四層——傳輸層,處于IP協(xié)議的上一層。UDP有不提供數(shù)據(jù)報(bào)分組、組裝和不能對(duì)數(shù)據(jù)包的排序的缺點(diǎn),也就是說(shuō),當(dāng)報(bào)文發(fā)送之后,是無(wú)法得知其是否安全完整到達(dá)的。
UDP用來(lái)支持那些需要在計(jì)算機(jī)之間傳輸數(shù)據(jù)的網(wǎng)絡(luò)應(yīng)用。包括網(wǎng)絡(luò)視頻會(huì)議系統(tǒng)在內(nèi)的眾多的客戶(hù)/服務(wù)器模式的網(wǎng)絡(luò)應(yīng)用都需要使用UDP協(xié)議。UDP協(xié) 8 議從問(wèn)世至今已經(jīng)被使用了很多年,雖然其最初的光彩已經(jīng)被一些類(lèi)似協(xié)議所掩蓋,但是即使是在今天,UDP仍然不失為一項(xiàng)非常實(shí)用和可行的網(wǎng)絡(luò)傳輸層協(xié)議。
與所熟知的TCP(傳輸控制協(xié)議)協(xié)議一樣,UDP協(xié)議直接位于IP(網(wǎng)際協(xié)議)協(xié)議的頂層。根據(jù)OSI(開(kāi)放系統(tǒng)互連)參考模型,UDP和TCP都屬于傳輸層協(xié)議。
UDP協(xié)議的主要作用是將網(wǎng)絡(luò)數(shù)據(jù)流量壓縮成數(shù)據(jù)報(bào)的形式。一個(gè)典型的數(shù)據(jù)報(bào)就是一個(gè)二進(jìn)制數(shù)據(jù)的傳輸單位。每一個(gè)數(shù)據(jù)報(bào)的前8個(gè)字節(jié)用來(lái)包含報(bào)頭信息,剩余字節(jié)則用來(lái)包含具體的傳輸數(shù)據(jù)。
(四)Socket套接字
套接字(socket)是套接口描述字的簡(jiǎn)稱(chēng)。和文件句柄相似,SOCKET提供了一種通訊機(jī)制,是linux的一種通訊方式。應(yīng)用程序創(chuàng)建了一個(gè)套接字后,就能夠獲得這種機(jī)制提供的網(wǎng)絡(luò)服務(wù)功能。對(duì)于服務(wù)器來(lái)說(shuō),它提供了監(jiān)聽(tīng)網(wǎng)絡(luò)的連接請(qǐng)求;對(duì)于客戶(hù)機(jī)來(lái)說(shuō),它可以連接到一個(gè)給定的主計(jì)算機(jī)和特定的端口上??蛻?hù)端和服務(wù)器端可以通過(guò)套接字對(duì)象來(lái)發(fā)送和接收數(shù)據(jù)。套接字提供了分別基于連接的協(xié)議(TCP)等和無(wú)連接的協(xié)議(UDP)等,以滿(mǎn)足網(wǎng)絡(luò)連接的可靠性、穩(wěn)定性以及高速性的要求。
四、系統(tǒng)的硬件設(shè)計(jì)
(一)SamSung公司s3c6410微處理器簡(jiǎn)介
隨著微電子技術(shù)的快速發(fā)展,ARM處理器經(jīng)歷了包括ARM7、ARM9在內(nèi)的多個(gè)發(fā)展歷程,而ARM11的成熟應(yīng)用必將為嵌入式的發(fā)展帶來(lái)新的活力,使更高端的產(chǎn)品應(yīng)用成為可能。
與ARM9的5級(jí)流水線相比,ARM11擁有一條具有獨(dú)立的load-store和算術(shù) 流水的8級(jí)流水線,在同樣工藝下,ARM11處理器的性能與ARM9相比大約提高 了40%。ARM11執(zhí)行ARMv6架構(gòu)的指令,ARMv6指令包含了針對(duì)媒體處理的單指令流多數(shù)據(jù)流(SIMD)擴(kuò)展,采用特殊的設(shè)計(jì),以改善視頻處理性能。為了能夠進(jìn)行快速浮點(diǎn)運(yùn)算,ARM11增加了向量浮點(diǎn)單元。所有這些結(jié)構(gòu)上的提高,都是ARM9處理器不可比擬的。
ARM11為便攜式和無(wú)線應(yīng)用,提供了從未有過(guò)的高超性能,并且使我們主要關(guān)心的成本和功耗減到最小。ARM11的微架構(gòu)保證了系統(tǒng)性能可以從基本的350-500MHz范圍擴(kuò)展到最終的1GHz以上。其微架構(gòu)的高效率表現(xiàn),允許開(kāi)發(fā)者根據(jù)不同的應(yīng)用來(lái)調(diào)節(jié)時(shí)鐘頻率和電源電壓,從而在性能和功耗之間達(dá)到最佳的折衷。例如,一個(gè)基于ARM11的微架構(gòu)的處理器在1.2V工作電壓下,使用0.13um工藝實(shí)現(xiàn),其功率將不會(huì)超過(guò)0.4mW/MHz。
ARM11微處理器是一種高性能、低功耗的‘準(zhǔn)64位’微處理器!對(duì)于目前大多數(shù)嵌入式應(yīng)用,一個(gè)真正的64位處理器仍然被認(rèn)為是不必要的,其巨大的功耗和面積讓人難以接受。對(duì)此,ARM11選擇了一個(gè)折中的方案,以較小的代價(jià),部分實(shí)現(xiàn)了一個(gè)64位微架構(gòu)。ARM11只在處理器整數(shù)單位和高速緩存之間,以及在整數(shù)單位和協(xié)處理器之間實(shí)現(xiàn)了64位數(shù)據(jù)總線。這些64位數(shù)據(jù)道路允許處理器在一個(gè)時(shí)鐘周期中同時(shí)獲取兩條指令,還允許在一個(gè)時(shí)鐘周期執(zhí)行多個(gè)數(shù)據(jù)讀寫(xiě)指令。這使得ARM11在執(zhí)行很多特定序列的代碼時(shí)能夠達(dá)到非常高的性能,特別是那些允許數(shù)據(jù)搬移與數(shù)據(jù)處理并行處理的代碼序列。
S3C6410是由三星公司推出的一款低功耗、高性?xún)r(jià)比的RSIC處理器,它基于ARM11內(nèi)核(ARM1176JZF-S),可廣泛應(yīng)用于移動(dòng)電話和通用處理等領(lǐng)域;S3C6410為2.5G和3G通信服務(wù)提供了優(yōu)化的硬件性能,內(nèi)置強(qiáng)大的硬件加速器:包括運(yùn)動(dòng)視頻處理、音頻處理、2D加速、顯示處理和縮放等;集成了一個(gè)MFC(Multi-Format video Codec)支持MPEG4 /H.263/H.264編解碼和VC1的解碼,能夠提供實(shí)時(shí)的視頻會(huì)議以及NRSC和PAL制式的TV輸出;除此之外,該處理器內(nèi)置一個(gè)采用最先進(jìn)技術(shù)的3D加速器,支持OpenGL ES 1.1/ 2.0和D3DMAPI,能實(shí)現(xiàn)4M triangles/s的3D加速;同時(shí),S3C6410包含了優(yōu)化的外部存儲(chǔ)器接口,該接口能滿(mǎn)足在高端通信服務(wù)中的數(shù)據(jù)帶寬要求。由于以上突出的性能表現(xiàn),10 著名的蘋(píng)果公司手機(jī)IPHONE就是基于S3C6410處理器。
(二)SamSung公司s3c6410微處理器功能特性
S3C6410 是一個(gè) 16/32 位 RISC 微處理器,旨在提供一個(gè)具有成本效益、功耗低,性能高的應(yīng)用處理器解決方案,像移動(dòng)電話和一般的應(yīng)用。它為 2.5G 和 3G 通信服務(wù)提供優(yōu)化的 H /W 性能,S3C6410 采用了64/32 位內(nèi)部總線架構(gòu)。該 64/32 位內(nèi)部總線結(jié)構(gòu)由 AXI、AHB 和 APB 總線組成。它還包括許多強(qiáng)大的硬件加速器,像視頻處理,音頻處理,二維圖形,顯示操作和縮放。一個(gè)集成的多格式編解碼器(MFC)支持 MPEG4/H.263/H.264 編碼、譯碼以及 VC1 的解碼。這個(gè) H/W 編碼器/解碼器支持實(shí)時(shí)視頻會(huì)議和 NTSC、PAL 模式的 TV 輸出。
S3C6410 有一個(gè)優(yōu)化的接口連線到外部存儲(chǔ)器。存儲(chǔ)器系統(tǒng)具有雙重外部存儲(chǔ)器端口、DRAM 和 FLASH /ROM/ DRAM 端口。DRAM 的端口可以配置為支持移動(dòng) DDR,DDR,移動(dòng) SDRAM 和 SDRAM。FLASH/ROM/DRAM端口支持 NOR-FLASH,NAND-FLASH,ONENAND,CF,ROM 類(lèi)型外部存儲(chǔ)器和移動(dòng) DDR,DDR,移動(dòng) SDRAM 和SDRAM。
為減少系統(tǒng)總成本和提高整體功能,S3C6410 包括許多硬件外設(shè),如一個(gè)相機(jī)接口,TFT 24 位真彩色液晶顯示控制器,系統(tǒng)管理器(電源管理等),4 通道 UART,32 通道 DMA,4 通道定時(shí)器,通用的 I/O 端口,IIS 總線接口,IIC 總線接口,USB 主設(shè)備,在高速(480 MB/S)時(shí) USB OTG 操作,SD 主設(shè)備和高速多媒體卡接口、用于產(chǎn)生時(shí)鐘的 PLL。
S3C6410 提供了豐富的內(nèi)部設(shè)備,下面我們從它的整體特性、多媒體加速特性、視頻接口、USB 特征、存儲(chǔ)器設(shè)備、系統(tǒng)外設(shè)以及它的系統(tǒng)管理等方面來(lái)詳細(xì)的介紹 S3C6410 處理器的特性
(三)系統(tǒng)設(shè)計(jì)器件
? Samsung S3C6410處理器
? 256M字節(jié)NAND Flash(SLC)
? 12MHz、48MHz、27MHz、32.768KHz時(shí)鐘源;
? 1個(gè)100M網(wǎng)口,采用DM9000AE,帶連接和傳輸指示燈
? 2個(gè)3.5MM標(biāo)準(zhǔn)立體聲音頻插座。其中包括1個(gè)音頻輸出插座,可與耳機(jī)連接;1個(gè)話筒輸入插座。另有插針形式提供了Line In(四)電源及復(fù)位電路
3.電源電路
4.復(fù)位電路
系統(tǒng)復(fù)位按鍵使用輕觸開(kāi)關(guān),復(fù)位芯片選擇MAX811t,專(zhuān)業(yè)復(fù)位芯片可保證系統(tǒng)的穩(wěn)定可靠。
復(fù)位芯片MAX811設(shè)計(jì)原理圖如下:
(五)系統(tǒng)時(shí)鐘電路 主晶振(12MHZ)原理圖:
網(wǎng)卡晶振原理圖:
(六)系統(tǒng)存儲(chǔ)器電路
使用了256M Bytes NAND FLASH,型號(hào)為K9F2G08U0B(另有MLC結(jié)構(gòu)2G Bytes NAND FLASH的K9GAG08U0D供用戶(hù)選擇),片選信號(hào)使用CSn2。NAND FLASH 存儲(chǔ)器主要用于存放內(nèi)核代碼、應(yīng)用程序、文件系統(tǒng)和數(shù)據(jù)資料。
NAND FLASH設(shè)計(jì)原理圖:
(七)IIS數(shù)字音頻電路
音頻功能使用S3C6410處理器的AC97總線。外接WM9714音頻芯片,實(shí)現(xiàn)集成音頻輸出、Line in輸入和Mic輸入功能。音頻輸出和MIC輸入以及LINE IN均采用標(biāo)準(zhǔn)音頻插座。
5.下面是WM9714芯片和音頻線路輸入的原理圖:
6.下圖是mic座原理圖:
7.下圖為MIC輸入座的俯視圖:
(八)網(wǎng)卡電路
我們?cè)谙到y(tǒng)集成一個(gè)100M以太網(wǎng)接口,通過(guò)DM9000AE芯片來(lái)擴(kuò)展。在開(kāi)發(fā)過(guò)程中,以太網(wǎng)接口可以用來(lái)連接PC機(jī)下載文件;在Linux的系統(tǒng)開(kāi)發(fā)時(shí),可以用來(lái)掛載NFS網(wǎng)絡(luò)文件系統(tǒng)。使用時(shí),需通過(guò)交叉網(wǎng)線直接連接PC機(jī),也可以使用直連網(wǎng)線連接交換機(jī)或路由器。
DM9000AE設(shè)計(jì)原理圖如下:
五、系統(tǒng)的軟件設(shè)計(jì)
(一)總體設(shè)計(jì)流程圖
(二)聲卡部分
對(duì)聲卡進(jìn)行編程時(shí)首先要做的是打開(kāi)與之對(duì)應(yīng)的硬件設(shè)備,這是借助于open系統(tǒng)調(diào)用來(lái)完成的,并且一般情況下使用的是/dev/dsp 文件。采用何種模 19 式對(duì)聲卡進(jìn)行操作也必須在打開(kāi)設(shè)備時(shí)指定,對(duì)于不支持全雙工的聲卡來(lái)說(shuō),應(yīng)該使用只讀或者只寫(xiě)的方式打開(kāi),只有那些支持全雙工的聲卡,才能以讀寫(xiě)的方式打開(kāi),并且還要依賴(lài)于驅(qū)動(dòng)程序的具體實(shí)現(xiàn)。Linux允許應(yīng)用程序多次打開(kāi)或者關(guān)閉與聲卡對(duì)應(yīng)的設(shè)備文件,從而能夠很方便地在放音狀態(tài)和錄音狀態(tài)之間進(jìn)行切換,建議在進(jìn)行音頻編程時(shí)只要有可能就盡量使用只讀或者只寫(xiě)的方式打開(kāi)設(shè)備文件,因?yàn)檫@樣不僅能夠充分利用聲卡的硬件資源,而且還有利于驅(qū)動(dòng)程序的優(yōu)化。下面的代碼示范了如何以可寫(xiě)可讀方式打開(kāi)聲卡進(jìn)行放音(playback)操作:
fd = open(“/dev/dsp”, O_RDWR);
if(fd < 0)
{
perror(“open of /dev/dsp failed”);
exit(1);
}
運(yùn)行在Linux內(nèi)核中的聲卡驅(qū)動(dòng)程序?qū)iT(mén)維護(hù)了一個(gè)緩沖區(qū),其大小會(huì)影響到放音和錄音時(shí)的效果,使用ioctl 系統(tǒng)調(diào)用可以對(duì)它的尺寸進(jìn)行恰當(dāng)?shù)脑O(shè)置。調(diào)節(jié)驅(qū)動(dòng)程序中緩沖區(qū)大小的操作不是必須的,如果沒(méi)有特殊的要求,一般采用默認(rèn)的緩沖區(qū)大小也就可以了。但需要注意的是,緩沖區(qū)大小的設(shè)置通常應(yīng)緊跟在設(shè)備文件打開(kāi)之后,這是因?yàn)閷?duì)聲卡的其它操作有可能會(huì)導(dǎo)致驅(qū)動(dòng)程序無(wú)法再修改其緩沖區(qū)的大小。下面的代碼示范了怎樣設(shè)置聲卡驅(qū)動(dòng)程序中的內(nèi)核緩沖區(qū)的大?。?/p>
#define LENGTH 3 /* 存儲(chǔ)秒數(shù) */ #define RATE 8000 /* 采樣頻率 */ #define SIZE 8 /* 量化位數(shù) */ #define CHANNELS 1 /* 聲道數(shù)目 */ /* 用于保存數(shù)字音頻數(shù)據(jù)的內(nèi)存緩沖區(qū) */ unsigned char msg[LENGTH*RATE*SIZE*CHANNELS/8];
接下來(lái)要做的是設(shè)置聲卡工作時(shí)的聲道(channel)數(shù)目,根據(jù)硬件設(shè)備和驅(qū)動(dòng)程序的具體情況,可以將其設(shè)置為0(單聲道,mono)或者1(立體聲,stereo)。下面的代碼示范了應(yīng)該怎樣設(shè)置聲道數(shù)目:
arg = CHANNELS;
status = ioctl(fd, SOUND_PCM_WRITE_CHANNELS, &arg);
if(status ==-1)
perror(“SOUND_PCM_WRITE_CHANNELS ioctl failed”);
if(arg!= CHANNELS)
perror(“unable to set number of channels”);
采樣格式和采樣頻率是在進(jìn)行音頻編程時(shí)需要考慮的另一個(gè)問(wèn)題,聲卡支持的所有采樣格式可以在頭文件soundcard.h 中找到,而通過(guò)ioctl 系統(tǒng)調(diào)用則可以很方便地更改當(dāng)前所使用的采樣格式。下面的代碼示范了如何設(shè)置聲卡的量化位數(shù):
/* 設(shè)置采樣時(shí)的量化位數(shù) */ arg = SIZE;
status = ioctl(fd, SOUND_PCM_WRITE_BITS, &arg);
if(status ==-1)
perror(“SOUND_PCM_WRITE_BITS ioctl failed”);
if(arg!= SIZE)
perror(“unable to set sample size”);
聲卡采樣頻率的設(shè)置也非常容易,只需在調(diào)用ioctl 時(shí)將第二個(gè)參數(shù)的值設(shè)置為SNDCTL_DSP_SPEED,同時(shí)在第三個(gè)參數(shù)中指定采樣頻率的數(shù)值就行了。對(duì)于大多數(shù)聲卡來(lái)說(shuō),其支持的采樣頻率范圍一般為5kHz到44.1kHz 或者48kHz,但并不意味著該范圍內(nèi)的所有頻率都會(huì)被硬件支持,在Linux下進(jìn)行音頻編程時(shí)最常用到的幾種采樣頻率是11025Hz、16000Hz、22050Hz、32000Hz和44100Hz。下面的代碼示范了如何設(shè)置聲卡的采樣頻率:
/* 設(shè)置采樣時(shí)的采樣頻率 */ arg = RATE;
status = ioctl(fd, SOUND_PCM_WRITE_RATE, &arg);
if(status ==-1)
perror(“SOUND_PCM_WRITE_WRITE ioctl failed”);
(三)網(wǎng)絡(luò)連接部分 Socket套接字初始化:
addr_len=sizeof(struct sockaddr_in);bzero(&addr,sizeof(addr));addr.sin_family=AF_INET;addr.sin_port=htons(REMOTEPORT);addr.sin_addr.s_addr=inet_addr(REMOTEIP);
(四)總體部分 客戶(hù)端:
從聲卡讀取聲音信號(hào)放到緩存中
status = read(fd, msg, sizeof(msg));
if(status!= sizeof(msg))
perror(“read wrong number of bytes”);將緩存中的數(shù)組發(fā)到服務(wù)端:
sendto(s,msg,sizeof(msg),0,&addr,addr_len);
服務(wù)端:
從客戶(hù)端接收數(shù)據(jù):
len= recvfrom(mysock,msg,sizeof(msg),0,&addr,&addr_len);將接收的數(shù)據(jù)寫(xiě)入聲卡,聲音回放
status = write(fd, msg, sizeof(msg));/* 回放 */
if(status!= sizeof(msg))
perror(“wrote wrong number of bytes”);
六、系統(tǒng)測(cè)試
(一)Linux系統(tǒng)移植安裝
我們?cè)诔晒υ囼?yàn)時(shí)使用了ubuntu10.4版本。之前曾經(jīng)嘗試過(guò)很多版本的linux,由于無(wú)法安裝dsp驅(qū)動(dòng)不得一次又一次的裝系統(tǒng),在這個(gè)階段花費(fèi)了很長(zhǎng)一段時(shí)間。
(二)交叉編譯環(huán)境搭建
由于在開(kāi)發(fā)主機(jī)上安裝的交叉編譯器與arm里面燒寫(xiě)的linux版本不對(duì)應(yīng),造成開(kāi)發(fā)調(diào)試的程序無(wú)法正常運(yùn)行。經(jīng)過(guò)訪問(wèn)論壇找到合適版本的交叉編譯器。問(wèn)題得到了解決。
(三)聲卡的初始化參數(shù)
讀寫(xiě)聲卡,要有特定的格式(format),默認(rèn)為8 位無(wú)符號(hào)數(shù)據(jù)、單聲道、8KHz采樣率。雖然默認(rèn)值可以達(dá)到我們pc機(jī)的要求,但是默認(rèn)值無(wú)法達(dá)到我們開(kāi)發(fā)板的要求。在開(kāi)發(fā)過(guò)程中,開(kāi)發(fā)板部分噪聲特別大。嚴(yán)重影響產(chǎn)品效果。
我們翻閱了資料,得知可以通過(guò)ioctl 系統(tǒng)調(diào)用來(lái)改變它們。在不斷的調(diào)試中,不斷地得到老師的幫助。我們最終得到了我們的理想音質(zhì)效果。
七、參考文獻(xiàn)
[1]孫瓊.嵌入式Li舢x應(yīng)用程序開(kāi)發(fā)詳解.北京:人民郵電出版社,2007.9 [2]馬忠梅.ARM&Linux嵌入式系統(tǒng)教程.北京:北京航空航天大學(xué)出版社,2004 [3]于明.范書(shū)瑞.曾祥燁.ARM9嵌入式系統(tǒng)設(shè)計(jì)與開(kāi)發(fā)教程.北京:電子工業(yè) 出版社.2006 24 [4]張景璐.ARM9嵌入式系統(tǒng)設(shè)計(jì)與應(yīng)用案例.北京:中國(guó)電力出版社.2008 [5]李亞鋒.ARM嵌入式Linux設(shè)備驅(qū)動(dòng)實(shí)例開(kāi)發(fā).北京:中國(guó)電力出版 社.2008 [6]張琦文.謝建雄.謝勁心.ARM嵌入式常用模塊與綜合系統(tǒng)設(shè)計(jì)實(shí)例精講. 北京:電子工業(yè)出版社.2006 [7]孫秋野.孫凱.馮?。瓵RM嵌入式系統(tǒng)開(kāi)發(fā)典型模塊.北京:人民郵電出版 社.2007 [8]封景剛.吳寶江.ARM嵌入式系統(tǒng)開(kāi)發(fā)完全入門(mén)與主流實(shí)踐.北京:電子 工業(yè)出版社.2008 [9]田澤.ARM9嵌入式Linux開(kāi)發(fā)實(shí)驗(yàn)與實(shí)踐.北京:北京航空航天大學(xué)出 版社.2006 [10]華清遠(yuǎn)見(jiàn)嵌入式培訓(xùn)中心.嵌入式Linux C語(yǔ)言應(yīng)用程序設(shè)計(jì).北京: 人民郵電出版社出版社.2007 [11]馮國(guó)進(jìn).嵌入式Linux驅(qū)動(dòng)程序設(shè)計(jì)從入門(mén)到精通.北京:清華大學(xué)出 版社.2008 [12]羅苑棠.楊宗德.嵌入式Linux應(yīng)用系統(tǒng)開(kāi)發(fā)實(shí)例精講.北京:電子工業(yè) 出版社.2007 [13]楊樹(shù)青,王歡.Linux環(huán)境下C編程指南.北京:清華大學(xué)出版社,2007 [14]李俊.嵌入式Linux設(shè)備驅(qū)動(dòng)開(kāi)發(fā)詳解.北京:人民郵電出版社,2008 [15] 龍躍.基于嵌入式系統(tǒng)的網(wǎng)絡(luò)音響設(shè)計(jì)與實(shí)現(xiàn).華中科技大學(xué)碩士論 文,2007 [16]陳莉君.Linux操作系統(tǒng)內(nèi)核分析.北京:人民郵電出版社,2000 [17J盧軍.Linux 0.Ol內(nèi)核分析與操作系統(tǒng)設(shè)計(jì):創(chuàng)造你自己的操作系統(tǒng). 北京:清華大學(xué)出版社,2004
八、總結(jié)與心得體會(huì)
這次設(shè)計(jì)有很重要的意義,而且任務(wù)很重,但在這次設(shè)計(jì)中也學(xué)到了很多以前課堂沒(méi)有的知識(shí)。雖然之前有學(xué)過(guò)有關(guān)于ARM方面的知識(shí),不過(guò)到實(shí)際用的時(shí) 25 候發(fā)現(xiàn)了很多問(wèn)題存在,不免有很大的壓力。
這是我們大學(xué)重要的設(shè)計(jì)之一;我們仔細(xì)閱讀老師給的資料,并按照實(shí)驗(yàn)步驟進(jìn)行,盡管如此但在實(shí)踐過(guò)程中還是遇到了很多的問(wèn)題,不過(guò)經(jīng)過(guò)指導(dǎo)老師的細(xì)心講解,讓我學(xué)到了很多東西。有些之前我們學(xué)過(guò)的知識(shí)要點(diǎn),不過(guò)有一段時(shí)間間隔了,很多的知識(shí)要點(diǎn)有不同程度的遺忘,我們通過(guò)網(wǎng)絡(luò)所搜,和同學(xué)一起討論問(wèn)題。時(shí)間過(guò)得很快,短短兩周工程訓(xùn)練;在這兩周時(shí)間里,我學(xué)到了很多東西,對(duì)于linux操作系統(tǒng),以前了解過(guò)一些這方面的知識(shí),但并沒(méi)有實(shí)踐過(guò);安裝ubuntu軟件的時(shí)候,出現(xiàn)了系統(tǒng)卡機(jī);在這次工程訓(xùn)練中安裝交叉編譯環(huán)境讓我有很大的壓力,遇到了很多的問(wèn)題,在網(wǎng)上也查了很多的資料,最后是在同學(xué)的幫助下完成的。安裝完成編譯環(huán)境后,設(shè)置共享文件時(shí)出現(xiàn)了問(wèn)題,而且連U盤(pán)都不能在linux系統(tǒng)中讀出來(lái),開(kāi)始的時(shí)候并不知道怎么樣設(shè)置共享,我試圖使用網(wǎng)絡(luò)傳輸。不過(guò)后來(lái),在同學(xué)的指導(dǎo)下完成了設(shè)置共享文件,真的很感謝那位同學(xué)。使用ARM開(kāi)發(fā)板的時(shí)候,掛接U盤(pán),一開(kāi)始不知道怎們樣把U盤(pán)中的文件拷貝到開(kāi)發(fā)板上,后來(lái)在知道里面搜索到了,相關(guān)的指令;在這次工程訓(xùn)練中讓我受益非淺。功放電路的制作并不是很難,但放出來(lái)的音效并不是很理想,我試圖通過(guò)改變電路的參數(shù)改善音頻效果,但效果并不是很理想,可能是初始化設(shè)置參數(shù)的緣故。
在這次工程訓(xùn)練中學(xué)到了很多,更多的了解到了有關(guān)于ARM11方面的知識(shí);學(xué)會(huì)了獨(dú)立思考,獨(dú)立解決問(wèn)題;通過(guò)和同學(xué)交流,共同學(xué)習(xí),共同進(jìn)步;同時(shí)也了解到了怎樣更好的通過(guò)網(wǎng)絡(luò)查找自己需要的資料,在這次設(shè)計(jì)中由于時(shí)間原因,沒(méi)有實(shí)現(xiàn)同步發(fā)送。還有初始化不太準(zhǔn)確造成有噪聲
九、致謝
首先感謝的是我的老師殷群老師,殷老師的學(xué)術(shù)感染力使我受益匪淺,在這學(xué)年當(dāng)中,我得到了殷老師始終如一的指導(dǎo)、關(guān)心和照顧。殷老師學(xué)識(shí)淵博,治學(xué)嚴(yán)謹(jǐn),在這學(xué)年的學(xué)習(xí)中,事無(wú)巨細(xì),殷老師都能給我最細(xì)致和耐心的指導(dǎo),生活中,殷老師的和善豁達(dá),平易近人的作風(fēng)也為我如何待人接物,為人處事做 了最好的詮釋?zhuān)淙烁聍攘σ矡o(wú)形而有力的指引著我做人做事的方式,為我在以后的工作學(xué)習(xí)中樹(shù)立了榜樣。