這段時間做了IIS的試驗。被這個試驗也折騰了很久??偟膩碇vIIS還是一個相對簡單的通信協議。
s3c2440一共有5個引腳用于IIS:IISDO、IISDI、IISSCLK、IISLRCK和CDCLK。前兩個引腳用于數字音頻信號的輸出和輸入,另外三個引腳都與音頻信號的頻率有關。
要用好IIS,就要把信號頻率設置正確。下面介紹這幾個時鐘:
fs:采樣頻率。fs不是任意設置的,一般基于不同的應用場合和聽覺效果,設置不同的幾個固定的值,如8kHz、16kHz、22.05kHz、44.1kHz、48kHz、96kHz等。通常,在wav文件的頭部中, 會給出該文件的fs。
IISSCLK:串行時鐘,每一個時鐘信號傳送一位音頻信號,因此IISSCLK的頻率=聲道數×采樣頻率×采樣位數。如采樣頻率fs為44.1kHz,采樣的位數為16位,聲道數2個(左、右兩個聲道),則IISSCLK的頻率=32fs=1411.2kHz。
IISLRCK:幀時鐘,用于切換左、右聲道,如IISLRCK為高電平表示正在傳輸的是左聲道數據,為低電平表示正在傳輸的是右聲道數據。IISLRCK的頻率=采樣頻率。
CDCLK:由于IIS只負責數字音頻信號的傳輸,而要真正實現音頻信號的放、錄,還需要額外的處理芯片(在這里,我們使用的是UDA1341),CDCLK為該芯片提供系統同步時鐘,即編解碼時鐘,主要用于音頻的A/D、D/A采樣時的采樣時鐘。一般CDCLK=256fs或384fs,通過寄存器可以配置。
這里有一個重要的約束關系:PCLK經過兩個預分頻器處理后分別得到IISSCLK、IISLRCK和CDCLK(預分頻器A得到IISSCLK、IISLRCK,預分頻器B得到CDCLK)。寄存器IISPSR是IIS預分頻器寄存器,5~9位是預分頻器A,0~4位是預分頻器B,一般來說,這兩個預分頻器的值N相等。我們是通過CDCLK來計算預分頻器B的值N的,即CDCLK=PCLK / (N+1)。對于給定的wav文件,fs是確定的。因此這里就需要協調:PCLK、CDCLK、和N的值。有時需要重新調整系統時鐘(因為保持PCLK不變,只改變CDCLK和N的值很難滿足CDCLK=256fs或者384fs。)
PCLK與FCLK有一定的比例關系,而FCLK又是由輸入頻率Fin得到。在這里,我們為了簡化計算,不改變PCLK與FCLK的比例關系(即維持在啟動代碼中定義的1:8的關系),那么由Fin而得到CDCLK一共涉及到四個參數:MDIV、PDIV、SDIV和前面公式中的N,涉及到的寄存器有MPLLCON和IISPSR。因此要得到這四個參數值,就需要一點耐心地計算,原則是誤差最小,其中需要注意的是,計算的結果(包括中間過程的結果)不要溢出,即不要超過32位。例如Fin為12MHz,我們設置采樣頻率fs=44.1kHz,而CDCLK=384fs=16.9344MHz,那么經過計算,最終得到N=3,MDIV=150,PDIV=5,SDIV=0,即IISPSR = (3<<5) | 3;,MPLLCON = (150<<12) | (5<<4) | 0。
在arm中MPLL的頻率就等于FCLK的頻率。
s3c2440有關IIS的寄存器除了IISPSR外,還包括IIS控制寄存器IISCON,主要用于控制數據傳輸的方式、預分頻器和IIS接口是否開啟;IIS模式寄存器IISMOD,主要用于設置IIS的時鐘源、主從方式、接收發送方式、串行接口方式、每個聲道串行數據位數和各種頻率值;IIS的FIFO接口寄存器IISFCON用于設置和判斷數據傳輸的FIFO狀態;而寄存器IISFIFO則用于音頻數據的傳輸。
在mini2440上,負責具體解碼音頻的芯片是uda1341。s3c2440與UDA1341之間除了我們前面介紹過的IIS接口相連接外,還有一個稱之為L3總線的連接,用于s3c2440配置UDA1341內部的寄存器。IIS用于實現ARM和uda1341之間數據的傳輸,L3總線用于實現arm對uda1341的配置。由于s3c2440不具備L3總線接口,因此我們是用三個通用IO口來模擬L3,從而實現L3總線的傳輸。
L3就是line 3(3條線)的意思,它只有L3DATA(數據線:用于傳輸數據)、L3MODE(模式線:用于選擇模式)、L3CLOCK(時鐘線:用于傳輸時鐘)。L3一共有兩個模式:地址模式和數據傳輸模式,先傳輸地址模式數據,再傳輸數據模式數據。L3MODE為低時是地址模式,L3MODE為高時是數據傳輸模式。L3DATA和L3CLOCK相互作用,完成8位數據的傳輸,傳輸的順序是先低位數據,再高位數據。對于clock沒有特別精確的頻率要求,因此,我們在程序中通過手動將一個gpio拉高拉低,從而模擬了一個時鐘信號。在拉高拉低的同時,再配合數據的傳輸,就可以了(傳輸時,是把數據按位送出的,L3是串行的協議)。
地址模式是用于選擇設備和定義目標寄存器,在這種模式下,8位數據的含義是:高6位是設備地址(UDA1341的地址為000101),低兩位是后面數據模式下寄存器的類型(00:DATA0,01:DATA1,10:STATUS)。只要沒有再改變地址模式下的數據,則數據模式下的數據始終是傳輸到上一個地址模式所定義的寄存器內。
傳輸數據模式下,STATUS是用于設置復位,系統時鐘頻率、數據輸入模式、DC濾波等內容。DATA0分為直接尋址模式和擴展尋址模式,直接尋址模式是直接進行模式的控制,包括音量、靜音等等,而擴展尋址模式是在直接尋址模式下先設置3位擴展地址,再在直接尋址模式下設置5位擴展數據。在DATA1下,可以讀取到被檢測峰值。至于具體的DATA0、DATA1、STATUS下。
在我們的程序中,通過下面這個函數實現L3的協議:就是實現從arm給uda寫入數據。(主要是配置它的寄存器)
//L3總線接口的寫函數
//輸入參數data為要寫入的數據
//輸入參數address,為1表示地址模式,為0表示數據傳輸模式
static void WriteL3(U8 data,U8 address)
{
int i,j;
if(address == 1)
rGPBDAT = rGPBDAT & ~(L3D | L3M | L3C) | L3C; //L3D=L, L3M=L(地址模式), L3C=H
else
rGPBDAT = rGPBDAT & ~(L3D | L3M | L3C) | (L3C | L3M); //L3M=H(數據傳輸模式)
for(i=0;i<10;i++)
; //等待一段時間
//并行數據轉串行數據輸出,以低位在前、高位在后的順序
for(i=0;i<8;i++)
{
if(data & 0x1) // H
{
rGPBDAT &= ~L3C; //L3C=L
rGPBDAT |= L3D; //L3D=H
for(j=0;j<5;j++)
; //等待一段時間
rGPBDAT |= L3C; //L3C=H
rGPBDAT |= L3D; //L3D=H
for(j=0;j<5;j++)
; //等待一段時間
} else {// L
rGPBDAT &= ~L3C; //L3C=L
rGPBDAT &= ~L3D; //L3D=L
for(j=0;j<5;j++)
; //等待一段時間
rGPBDAT |= L3C; //L3C=H
rGPBDAT &= ~L3D; //L3D=L
for(j=0;j<5;j++)
; //等待一段時間
}
data >>= 1;
}
rGPBDAT = rGPBDAT & ~(L3D | L3M | L3C) | (L3C | L3M); //L3M=H,L3C=H
}
放音的程序就是先通過L3協議配置uda,然后再配置arm的寄存器。這樣就可以播放音樂了。在uda的配置中,會設置CDCLK的頻率。要保證對uda的設置和對arm的設置是一致的。
//放音
//at 256fs profermance is the best, at 384fs playing is a little slower.
void playsound(unsigned char *buffer, int length)
{
int count,i;
char flag;
rGPBDAT = rGPBDAT & ~(L3M|L3C|L3D) |(L3M|L3C); //L3開始傳輸:L3M=H, L3C=H
//配置UDA1341
WriteL3(0x14 + 2,1); //狀態模式(000101xx+10)
WriteL3(0x60,0); //0,1,10, 000,0 : 狀態0,復位
WriteL3(0x14 + 2,1); //狀態模式 (000101xx+10)
WriteL3(0x28,0); // 0, 0, 10, 1000, 256fs
WriteL3(0x14 + 2,1); //狀態模式 (000101xx+10)
WriteL3(0xc1,0); //1,0,0,0, 0,0,01:狀態1,
//Gain of DAC 6 dB,Gain of ADC 0dB,ADC non-inverting,
//DAC non-inverting,Single speed playback,ADC-Off DAC-On
//配置s3c2440的IIS寄存器
//預分頻器為5,所以CDCLK=PCLK/(5+1)=5644.8kHz
rIISPSR = (5<<5)|5;
//無效DMA,輸入空閑,預分頻器有效
rIISCON = (0<<5)|(0<<4)|(0<<3)|(1<<2)|(1<<1);
//PCLK為時鐘源,輸出模式,IIS模式,每個聲道16位,CODECLK=256fs,SCLK=32fs
rIISMOD = (0<<9)|(0<<8)|(2<<6)|(0<<5)|(1<<4)|(1<<3)|(0<<2)|(1<<0);
rIISFCON = (0<<15)|(1<<13); //輸出FIFO正常模式,輸出FIFO使能
flag=1;
count=0;
上一篇:ARM64平臺下WFE和SEV相關指令解析
下一篇:mini2440 裸機編程 -led
推薦閱讀
史海拾趣
EMMICRO公司自創立之初,就致力于在電子微芯片領域進行技術創新。公司研發團隊不斷突破技術瓶頸,成功研發出具有高性能、低功耗的芯片產品,填補了市場的空白。通過不斷的創新和技術迭代,EMMICRO的芯片產品在市場上贏得了廣泛的認可,并逐漸樹立起品牌的知名度和影響力。
為了進一步擴大市場份額,Chip Supply Micro Devices制定了國際化戰略。公司積極開拓海外市場,通過參加國際電子展會、建立海外銷售網絡等方式,將產品推向全球。同時,公司還針對不同國家和地區的市場需求,推出了定制化的產品解決方案。這些努力使得Chip Supply Micro Devices在國際市場上獲得了良好的口碑和業績。
在電子行業競爭激烈的今天,COMPEX公司始終堅持質量至上的原則。公司建立了嚴格的質量管理體系,從原材料采購到產品生產、檢驗、出貨等各個環節都嚴格把關,確保產品質量符合客戶要求。這種對質量的執著追求,使得COMPEX的產品在市場上具有很高的口碑和競爭力。
深圳市飛翼科技有限公司自2006年成立以來,一直致力于模擬與數字MCU混合芯片領域的研究、設計和開發應用。公司主攻電容式觸摸感應按鍵芯片設計,憑借多項獨有的專利技術,成功突破了行業內的技術難點。經過多年的努力,飛翼科技已成為該應用領域中技術最全面、市場份額最大的公司之一。其電容式觸摸感應芯片廣泛應用于各類電子產品中,為用戶帶來了更加便捷、智能的交互體驗。
隨著國內市場的飽和,宜源科技公司積極尋求海外市場的發展機會。公司加強與國際知名企業的合作,共同開發新產品,拓展市場份額。同時,宜源科技還積極參加國際展會和論壇,提升品牌知名度和影響力。通過不懈的努力,宜源科技的產品已經成功進入多個國家和地區,實現了國際化發展。
Amphenol公司成立于1932年,最初由Arthur J. Schmitt和Gordon K. Klapmeier共同創辦,專注于電磁線纜的制造。然而,隨著技術的進步和市場需求的變化,Amphenol公司逐漸將重心轉向電纜連接器的制造。憑借高品質的產品和服務,Amphenol公司的電纜連接器在市場上獲得了廣泛的認可,并逐漸發展成為全球最大的電纜連接器制造商之一。
[ip]快畢業了,畢業論文是 基于modbus協議的數據采集系統,不知道各位高手們有沒有想要對我這個笨笨知道的地方.謝謝,謝謝,十分感謝.… 查看全部問答∨ |
|
想做個東西,簡單來講就是通過外部設備給單片機一個開關信號,然后通過單片機告訴PC,再由PC根據信號進行程序處理,PC串口已經占用,所以用網口來實現。 單片機能否直接做協議轉換,還是還要通過一個專用芯片來做,請兄弟們幫忙提出一個解決方案?!? 查看全部問答∨ |
|
問題1:高端中斷向量是什么意思?以IRQ中斷為例,中斷產生后先是跳到0x18處,然后再跳到中斷處理函數,這是不是就是所謂的低端中斷向量? 問題2:如果是高端中斷向量,是不是irq中斷發生后,并不是跳到0x18處,而是跳到自己指定的地址? 問題3: ...… 查看全部問答∨ |
|
各位大俠:小弟現需在WinCE5.0開發wifi driver,以前完全沒有相關經驗,完全沒有概念,模不著頭腦,問題真的很多。感覺微軟本身的文檔挺混亂的,說的也不怎么具體,大家有沒有好的教材?最好可以可以手把手教這個開發過程的?。ǖ谝徊阶鍪裁矗诙?...… 查看全部問答∨ |
收集到很多關于Altium Designer 資料,希望對大家有所幫助。 [ 本帖最后由 熊貓 于 2010-12-23 20:17 編輯 ]… 查看全部問答∨ |
這篇學習筆記,完全是基于《STM32不完全手冊》而言的,我沒有買Alientek的開發板,買的是ARMFly的,其實都差不多,只不過安福萊的板載資源非常豐富罷了,應用起來其實都差不都。 《STM32不完全手冊》的51到56頁就是要這次筆記學習的內容,請自己參 ...… 查看全部問答∨ |
設計資源 培訓 開發板 精華推薦
- 試用Vishay新型“IHLP磁芯損耗計算器”,搶樓贏好禮
- LPC4370重磅來襲 有獎問答贏好禮!
- 電子工程師,如何更好地擁抱GaN?參與問卷有好禮!
- 報名贏京東卡 | 國產FPGA安路科技2024線上新品發布會
- 兆易GD32450I-EVAL免費測評試用
- 追更有驚喜:解救被FSM折磨過的你,justd0解析LSM6DSOX有限狀態機官方例程
- 電路圖站2.0版上線,公開征集網友建議,填寫調查問卷贏積分!
- 全球首款Cortex-M23內核物聯網芯片SAML10和SAM L11系列 闖關獲取SAML10/SAML11法寶,拆除電子界安全危機,贏好禮!
- 邀請好友體驗WEBENCH,禮品豐厚你有他也有!