S3C2410通過IIS匯流排與音訊晶元UDA1

2021-06-19 19:25:54 字數 2497 閱讀 4437

s3c2410通過iis(inter-ic sound)匯流排與音訊控制晶元uda1380進行通訊。放音時傳送資料到uda1380的datai管腳,錄音時從uda1380的datao管腳接收資料,其資料傳輸方式為dma方式。

iis用於傳輸音訊資料,iic用於控制1380晶元。

iis有pclk,sclk,lrclk,sdi,sdo。

pclk(通俗來說就是聲音的取樣頻率如:44.1k,它的產生是有2410系統時鐘分頻得到的。

具體過程:2410主頻202m,它的aph匯流排頻率是202/4=50m,在經過iis的psr(分頻比例因子)得到的乙個頻率用於iis時鐘輸出也可以說是同步)。

這個時鐘是輸出給1380的,對於1380來說它的取樣頻率即:ad的頻率是可以程式設計控制的。

資料中表明:1可以直接用iis穿過來的時鐘就是上面解釋的,1可以用pll分頻後的時鐘來確定ad的頻率,da同理就是了。

注意:如果是雙聲道,上面的就要變化下了,呵呵各位大哥應該都比我明白。

sclk:在iis中有2個psr控制起的,乙個用於外部b,另個用於內部a(sclk)形成時鐘用於

pclk8或者16倍頻 (對把這裡有點不敢確定不過應該沒錯就是了)

lr就是左右phe的切換訊號了

sd就是資料輸出線

dma其實三星公司已經把很多東西遮蔽了當然是為了我門應用比較簡單了呵呵,

從程式上來說只要明白幾個函式就可以了:

這樣幾個就可以完好dma了呵呵,

這裡有個回掉函式的感念要引起注意啊:

meaning:驅動提供的乙個函式結構位址給dma的,當然dma傳送完或者接受完觸發這個函式的響應

驅動程式的分析

function:因為很多東西華恆已經介紹了就不在寫了

希望喜歡看驅動的朋友仔細明白audio_buf_t,audio_stream_t並引起重視;;;

1static void audio_clear_buf(audio_stream_t * s)

如果你明白了audio_buf_t,audio_stream_t就很簡單了,就是把指標所指的位址的記憶體釋放這裡用的是for來實現的;;;;

2static int audio_setup_buf這裡是用結構提管理的概念實現的內河記憶體的申請的,

note:用audio_buf_t來管理一段記憶體,在用audio_stream_t來管理n個audio_buf_t

聽說這樣的好處是提高了音訊給cpu的負擔呵呵 鬼知道是不是真的

//這裡有個訊號燈的概念要大家注意下:

我們從訊號量資料結構開始,它定義在include/asm/semaphore.h中:

struct semaphore

down()操作可以理解為申請資源,up()操作可以理解為釋放資源,因此,訊號量實際表示的是資源的數量以及是否有程序正在等待。在 semaphore結構中,count相當於資源計數,為正數或0時表示可用資源數,-1則表示沒有空閒資源且有等待程序。而等待程序的數量並不關心。這種設計主要是考慮與訊號量的原語相一致,當某個程序執行up()函式釋放資源,點亮訊號燈時,如果count恢復到0,則表示尚有程序在等待該資源,因此執行喚醒操作。乙個典型的down()-up()流程是這樣的:

down()-->count做原子減1操作,如果結果不小於0則表示成功申請,從down()中返回;

-->如果結果為負(實際上只可能是-1),則表示需要等待,則呼叫__down_fail();

__down_fail()呼叫__down(),__down()用c**實現,要求已不如down()和__down_fail()嚴格,在此作實際的等待

//3 void audio_dmaout_done_callback

這個就是當dma接收後要喚醒等待的smdk2410_mixer_read

4static void audio_dmain_done_callback

和上面的一樣

5int audio_sync

為安全保證,當系統掉點的時候,強烈執行這個函式來儲存ram to flash

6ssize_t smdk2410_audio_write

這裡用到阻塞和訊號燈的概念,就是把使用者空間的記憶體資料送到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返回的值負給已經映**的暫存器

11smdk2410_audio_ioctl

12init_module

這個華恆書寫的很明白了呵呵

看過之後的感受:

1、記憶體管理重中之重

2、描述物件結構體要仔細的理解各個與的含義

S3C2410讀寫Nand Flash分析

2009 01 15 16 51 321人閱讀 收藏舉報 s3c2410讀寫nand flash分析 一 結構分析 s3c2410處理器整合了8位nandflash控制器。目前市場上常見的8位nandflash有三星公司的k9f1208 k9f1g08 k9f2g08等。k9f1208 k9f1g0...

s3c2410與s3c2440的部分細節區別整理

這兩個soc都是arm920,cpuid都是0x41129200,很多暫存器設定都是一樣的,但是你要想直接把2410的bootloader 核心拿到2440上用,那是肯定會出錯的 網上這樣的文章很多,大多都僅僅是巨集觀上比劃兩句,如攝像頭驅動 主頻之類,沒有什麼意義 細節是魔鬼,只有在細節上充分積累...

s3c2410的nand flash的驅動分析

以前都是把別人寫好的 直接拿過來用,而沒有去關心裡面到底怎麼實現的,昨晚對照著samsung 2410和k 9f1208的晶元資料把這些 讀了一遍,終於明白了對nand flash的操作一步步是怎麼實現的了。以下的這些 可以在vivi或者kernel裡面找到 對乙個nand flash的操作,總體上...