<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > S3C2410通過(guò)IIS總線(xiàn)與音頻芯片UDA1380進(jìn)行通信

S3C2410通過(guò)IIS總線(xiàn)與音頻芯片UDA1380進(jìn)行通信

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

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

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

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

//////////////////////////////
IIC就只有2條線(xiàn)了,論壇里面有人分析過(guò)了就不說(shuō)了
////////////////////////////////
呵呵IISIIC,DMA寄存器的意思當然要明白拉
///////////////////////////////
DMA
其實(shí)三星公司已經(jīng)把很多東西屏蔽了當然是為了我門(mén)應用比較簡(jiǎn)單了呵呵,
從程序上來(lái)說(shuō)只要明白幾個(gè)函數就可以了:
{
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);
}
這樣幾個(gè)就可以完好DMA了呵呵,
這里有個(gè)回掉函數的感念要引起注意?。?BR>MEANING:驅動(dòng)提供的一個(gè)函數結構地址給DMA的,當然DMA發(fā)送完或者接受完觸發(fā)這個(gè)函數的響應


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

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

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


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

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>