<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > S3C2410通過IIS總線與音頻芯片UDA1380進行通信

          S3C2410通過IIS總線與音頻芯片UDA1380進行通信

          作者: 時間:2013-12-05 來源:網(wǎng)絡(luò) 收藏

          通過IIS(Inter-IC Sound)總線與音頻控制芯片進行通信。放音時發(fā)送數(shù)據(jù)到的DATAI管腳,錄音時從的DATAO管腳接收數(shù)據(jù),其數(shù)據(jù)傳輸方式為DMA方式。
          IIS用于傳輸音頻數(shù)據(jù),IIC用于控制1380芯片。
          IIS有pclk,sclk,lrclk,sdi,sdo。

          PCLK(通俗來說就是聲音的采樣頻率如:44.1K,它的產(chǎn)生是有2410系統(tǒng)時鐘分頻得到的。
          具體過程:2410主頻202M,它的APH總線頻率是202/4=50M,在經(jīng)過IIS的PSR(分頻比例因子)得到的一個頻率用于IIS時鐘輸出也可以說是同步)。
          這個時鐘是輸出給1380的,對于1380來說它的采樣頻率即:AD的頻率是可以編程控制的。
          資料中表明:1可以直接用IIS穿過來的時鐘就是上面解釋的,1可以用PLL分頻后的時鐘來確定AD的頻率,DA同理就是了。

          注意:如果是雙聲道,上面的就要變化下了,呵呵各位大哥應(yīng)該都比我明白。
          SCLK:在IIS中有2個PSR控制起的,一個用于外部B,另個用于內(nèi)部A(SCLK)形成時鐘用于
          PCLK8或者16倍頻 (對把這里有點不敢確定不過應(yīng)該沒錯就是了)
          LR就是左右PHE的切換信號了
          SD就是數(shù)據(jù)輸出線

          //////////////////////////////
          IIC就只有2條線了,論壇里面有人分析過了就不說了
          ////////////////////////////////
          呵呵IISIIC,DMA寄存器的意思當(dāng)然要明白拉
          ///////////////////////////////
          DMA
          其實三星公司已經(jīng)把很多東西屏蔽了當(dāng)然是為了我門應(yīng)用比較簡單了呵呵,
          從程序上來說只要明白幾個函數(shù)就可以了:
          {
          1,s3c2410_request_dma("I2SSDI", s->dma_ch, NULL, audio_dmain_done_callback
          2,s3c2410_free_dma(s->dma_ch);
          3,s3c2410_dma_queue_buffer(s->dma_ch, (void *) b,/////////////添加DMA BUF
          b->dma_addr, b->size, DMA_BUF_WR);
          }
          這樣幾個就可以完好DMA了呵呵,
          這里有個回掉函數(shù)的感念要引起注意?。?BR>MEANING:驅(qū)動提供的一個函數(shù)結(jié)構(gòu)地址給DMA的,當(dāng)然DMA發(fā)送完或者接受完觸發(fā)這個函數(shù)的響應(yīng)


          驅(qū)動程序的分析
          FUNCTION:因為很多東西華恒已經(jīng)介紹了就不在寫了
          希望喜歡看驅(qū)動的朋友仔細(xì)明白audio_buf_t,audio_stream_t并引起重視;;;
          1static void audio_clear_buf(audio_stream_t * s)
          如果你明白了audio_buf_t,audio_stream_t就很簡單了,就是把指針?biāo)傅牡刂返膬?nèi)存釋放這里用的是FOR來實現(xiàn)的;;;;
          2static int audio_setup_buf這里是用結(jié)構(gòu)提管理的概念實現(xiàn)的內(nèi)河內(nèi)存的申請的,
          NOTE:用audio_buf_t來管理一段內(nèi)存,在用audio_stream_t來管理N個audio_buf_t
          聽說這樣的好處是提高了音頻給CPU的負(fù)擔(dān)呵呵 鬼知道是不是真的
          //////////////////////////
          這里有個信號燈的概念要大家注意下:
          我們從信號量數(shù)據(jù)結(jié)構(gòu)開始,它定義在include/asm/semaphore.h中:

            struct semaphore {
             atomic_t count;
             int sleepers;
             wait_queue_head_t wait;
            }
            
            down()操作可以理解為申請資源,up()操作可以理解為釋放資源,因此,信號量實際表示的是資源的數(shù)量以及是否有進程正在等待。在 semaphore結(jié)構(gòu)中,count相當(dāng)于資源計數(shù),為正數(shù)或0時表示可用資源數(shù),-1則表示沒有空閑資源且有等待進程。而等待進程的數(shù)量并不關(guān)心。這種設(shè)計主要是考慮與信號量的原語相一致,當(dāng)某個進程執(zhí)行up()函數(shù)釋放資源,點亮信號燈時,如果count恢復(fù)到0,則表示尚有進程在等待該資源,因此執(zhí)行喚醒操作。一個典型的down()-up()流程是這樣的:
            
            down()-->count做原子減1操作,如果結(jié)果不小于0則表示成功申請,從down()中返回;
            -->如果結(jié)果為負(fù)(實際上只可能是-1),則表示需要等待,則調(diào)用__down_fail();
            __down_fail()調(diào)用__down(),__down()用C代碼實現(xiàn),要求已不如down()和__down_fail()嚴(yán)格,在此作實際的等待
          //////////////////////////
          3 void audio_dmaout_done_callback
          這個就是當(dāng)DMA接收后要喚醒等待的smdk2410_mixer_read
          4static void audio_dmain_done_callback
          和上面的一樣
          5int audio_sync
          為安全保證,當(dāng)系統(tǒng)掉點的時候,強烈執(zhí)行這個函數(shù)來保存RAM TO FLASH
          6ssize_t smdk2410_audio_write
          這里用到阻塞和信號燈的概念,就是把用戶空間的內(nèi)存數(shù)據(jù)送到DMA傳輸隊列中等待傳輸去把
          7 smdk2410_mixer_read和6一樣
          8smdk2410_mixer_ioctl
          這里主要是利用IIC總線控制,沒什么好說的
          判斷COMMAND,在把ARG傳近來和傳出去
          9iispsr_value(int s_bit_clock, int sample_rate
          通過s3c2410_get_bus_clk獲得總線時鐘,在通過sample_rate來計算比例因子并返回
          10audio_set_dsp_speed
          通過9返回的值負(fù)給已經(jīng)映射了的寄存器

          11smdk2410_audio_ioctl
          12init_module
          這個華恒書寫的很明白了呵呵
          看過之后的感受:
          1、內(nèi)存管理重中之重
          2、描述對象結(jié)構(gòu)體要仔細(xì)的理解各個與的含義
          呵呵感覺有點進步了,不過更多的是悲哀
          昨天晚上已經(jīng)實現(xiàn)了MADPLAY的音量控制,不過發(fā)現(xiàn)驅(qū)動中沒有重地音和高音的控制呵呵要自己來寫幾句程序了


          關(guān)鍵詞: S3C2410 IIS總線 UDA1380

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();