mini2440硬件篇之IIS
IIS(集成音頻接口)于上個(gè)世紀(jì)80年代首先被Philips公司用于消費(fèi)產(chǎn)品的音頻設(shè)備。被廣泛運(yùn)用于CD、數(shù)字音頻磁帶、數(shù)字音頻處理器和數(shù)字TV音頻。
IIS的組成一般來說包括4個(gè)管腳:串行數(shù)據(jù)輸入(IISDI)、串行數(shù)據(jù)輸出(IISDO)、左/右通道選擇(IISLRCK)、串行位時(shí)鐘(IISCLK);產(chǎn)生IISLRCK和IISCLK的是主控器。在S3C2440上和IIS相關(guān)的接口還有一個(gè)用于提供CODEC時(shí)鐘的管腳。就時(shí)序信號(hào)工作來說,當(dāng)IISSCLK提供不間斷的時(shí)鐘信號(hào)的時(shí)候IISLRCK會(huì)以“數(shù)據(jù)位+1”的寬度方式產(chǎn)生周期信號(hào)。低電平時(shí)期表示左聲道,高電平時(shí)期表示右聲道。然后IISDI或者IISDO就按照一定的格式不斷的發(fā)送/接收數(shù)據(jù)。
至于這種數(shù)據(jù)的格式,根據(jù)S3C2440的芯片資料的說明可以知道這樣以MSB為首位可以讓傳輸器和接收器不用知道對(duì)方的字長。數(shù)據(jù)還是按照各自的字長進(jìn)行截取,如果不能匹配就會(huì)造成截?cái)嗷蛘咛?(意思是如果系統(tǒng)字長為32位而傳輸器的字長為16位那么傳輸?shù)臅r(shí)候32位的系統(tǒng)數(shù)據(jù)就會(huì)被折成16位的)反正就是數(shù)據(jù)位從高到低的傳輸。至于MSB對(duì)齊格式,和上面的時(shí)序區(qū)別在于MSB總是被首先的傳輸在左右聲道切換的時(shí)候。
芯片手冊(cè)
語音芯片UDA1341TS
/*-----------------------------------------------------------------------------------
*地址模式時(shí)序,掌握幾個(gè)要點(diǎn)
*數(shù)據(jù)傳輸?shù)臅r(shí)候保證L3MODE為低
*數(shù)據(jù)傳輸開始的信號(hào)是保證L3MODE為低L3CLOCK為高
*數(shù)據(jù)傳輸結(jié)束的信號(hào)是保證L3MODE為高L3CLOCK為高
*數(shù)據(jù)傳輸過程中一個(gè)L3CLOCK的周期傳一個(gè)數(shù)據(jù)位
*數(shù)據(jù)模式時(shí)序,掌握幾個(gè)要點(diǎn)
*數(shù)據(jù)傳輸?shù)臅r(shí)候保證L3MODE為低
*數(shù)據(jù)傳輸開始的信號(hào)是保證L3MODE為高L3CLOCK為高
*數(shù)據(jù)傳輸結(jié)束的信號(hào)是保證L3MODE為高L3CLOCK為高
*數(shù)據(jù)傳輸過程中一個(gè)L3CLOCK的周期傳一個(gè)數(shù)據(jù)位
*------------------------------------------------------------------------------------*/
2.mini2440電路圖
3.S3C2440寄存器
s3C2440A的IIS總線接口用于實(shí)現(xiàn)一個(gè)CODEC接口來擴(kuò)展8/16位立體聲CODEC芯片到便攜式應(yīng)用。IIS總線接口支持IIS總線數(shù)據(jù)格式和MSB對(duì)齊數(shù)據(jù)格式。接口提供DMA傳輸模式用于FIFO訪問代替一個(gè)中斷。它能同步的傳輸和接收數(shù)據(jù)如同選擇單獨(dú)傳輸或者接收數(shù)據(jù)一樣好。
時(shí)序的速率和音頻數(shù)據(jù)的采樣速率相關(guān),因?yàn)镮IS傳輸?shù)氖菙?shù)字采樣信號(hào)。所以數(shù)據(jù)的傳輸必須要達(dá)到采樣速率。這里以一個(gè)wav文件作為例子(采樣頻率44.1KHz、聲道數(shù)2、數(shù)據(jù)位數(shù)16)。該文件的聲音要得到還原,那么數(shù)據(jù)必須以44.1KHz的速率傳輸。但是數(shù)據(jù)是串行傳輸?shù)模瑸榱嗽谥付〞r(shí)間傳輸?shù)綌?shù)據(jù),所以傳輸速率必須要乘以16才能一個(gè)數(shù)據(jù)以44.1KHz的速率傳輸,然后由于聲道數(shù)位2,所以有兩個(gè)通道要同時(shí)傳輸數(shù)據(jù)。但是傳輸通道只有一個(gè),所以為了保證同時(shí),還要在此基礎(chǔ)上乘以2。根據(jù)上面的時(shí)序可以知道是SCLK在控制整個(gè)時(shí)序,所以得出IISSCLK=采樣頻率×采樣位數(shù)×通道數(shù)。這里為了簡(jiǎn)便起見,采樣頻率記為fs。于是IISSCLK為32fs。知道一個(gè)管腳的時(shí)序,其他時(shí)序也就好確定了。
在S3C2440下,IIS的配置都是通過寄存器來完成的。下面總結(jié)一些S3C2440使用IIS接口需要做的一些配置工作。
IIS相關(guān)的寄存器:
IISCON寄存器
功能名稱
位
說明
LR_CH_INDEX
[8]
左/右聲道索引
0——左
1——右
TRANS_FIFO_RFLAG
[7]
傳輸FIFO準(zhǔn)備標(biāo)識(shí)
0——空
1——非空
RECV_FIFO_RFLAG
[6]
接收FIFO準(zhǔn)備標(biāo)識(shí)
0——滿
1——非滿
TRANS_DMA_EN
[5]
傳輸DMA服務(wù)請(qǐng)求
0——關(guān)閉
1——使能
RECV_DMA_EN
[4]
接收DMA服務(wù)請(qǐng)求
0——關(guān)閉
1——使能
TRANS_CH_IDLE_CMD
[3]
在Idle狀態(tài)IISLRCK是非活動(dòng)的(暫停Tx)
0——Notidle
1——Idle
RECV_CH_IDLE_CMD
[2]
在Idle狀態(tài)IISLRCK是非活動(dòng)的(暫停Rx)
0——Notidle
1——Idle
IIS_PRESCALER
[1]
IIS預(yù)分頻
0——關(guān)閉
1——開啟
IIS_EN
[0]
IIS接口使能
0——關(guān)閉
1——開啟
IISMOD寄存器
功能名稱
位
說明
MA_CLK_SELECT
[9]
主時(shí)鐘選擇
0——PCLK
1——MPLLin
MA_SL_MODE
[8]
主/從模式選擇
0——主模式(IISLRCK和IISCLK是輸出模式)
1——從模式(IISLRCK和IISCLK是輸入模式)
TX_RX_MODE
[7:6]
傳輸/接收模式選擇
00——無傳輸
01——接收模式
10——傳輸模式
11——傳輸和接收模式
LR_CH_EN
[5]
左右聲道使能
0——右聲道
1——左聲道
SER_FORMAT
[4]
串行接口格式
0——IIS兼容格式
1——MSB對(duì)齊格式(最高位左對(duì)齊)
SER_DATA_BIT
[3]
串行數(shù)據(jù)位數(shù)
0——8位
1——16位
MA_CLK_FS
[2]
主時(shí)鐘頻率選擇
0——256fs
1——384fs
(fs:采樣頻率)
SCLK
[1:0]
串行時(shí)鐘頻率選擇
00——16fs
01——32fs
10——48fs
11——保留
IISPSR寄存器
功能名稱
位
說明
PRE_A
[9:5]
預(yù)分頻器A的值
PRE_B
[4:0]
預(yù)分頻器B的值
注意:選擇IIS的時(shí)鐘源(PCLK或者M(jìn)PLLin)后,經(jīng)過兩個(gè)預(yù)分頻器處理后會(huì)分別得到IISSCLK、IISLRCK和CDCLK(預(yù)分頻器A得到IISSCLK、IISLRCK;預(yù)分頻器B得到CDCLK)。一般來說,這兩個(gè)預(yù)分頻器的值N相等。這里通過CDCLK來計(jì)算預(yù)分頻器B的N值來推知預(yù)分頻器A的N值,計(jì)算公式為CDCLK=時(shí)鐘源/(N+1)。
IISFCON寄存器
功能名稱
位
說明
TX_FIFO_MODE
[15]
傳輸FIFO訪問模式選擇
0——普通
1——DMA
RX_FIFO_MODE
[14]
接收FIFO訪問模式選擇
0——普通
1——DMA
TX_FIFO_EN
[13]
傳輸FIFO使能位
0——關(guān)閉
1——使能
RX_FIFO_EN
[12]
接收FIFO使能位
0——關(guān)閉
1——使能
傳輸FIFO數(shù)據(jù)計(jì)數(shù)
[11:6]
數(shù)據(jù)計(jì)數(shù)值0~32
接收FIFO數(shù)據(jù)計(jì)數(shù)
[5:0]
數(shù)據(jù)計(jì)數(shù)值0~32
IISFIFO寄存器
功能名稱
位
說明
FENTRY
[15:0]
IISFIFO寄存器保存?zhèn)鬏敾蛘呓邮盏囊纛l數(shù)據(jù)值
3.1.DMA
S3C2440支持4通道位于系統(tǒng)總線和外圍設(shè)備總線之間的DMA控制器。每個(gè)DMA控制器通道能執(zhí)行數(shù)據(jù)搬運(yùn)在系統(tǒng)總線設(shè)備和/或外圍總線設(shè)備之間而沒有限制。換句話說,每個(gè)通道能處理下面4種情形:
1.源和目地都在系統(tǒng)總線里
2.源在系統(tǒng)總線目地在外圍總線
3.源在外圍總線目地在系統(tǒng)總線
4.源和目地都在外圍總線
DMA的優(yōu)勢(shì)是它在傳輸數(shù)據(jù)的時(shí)候不需要CPU的干預(yù)。DMA操作能被軟件初始化,或者響應(yīng)來自內(nèi)部外圍總線或者擴(kuò)展請(qǐng)求管腳。
DMA請(qǐng)求資源
各個(gè)DMA控制器的通道能選擇其中一個(gè)DMA請(qǐng)求資源,如果H/WDMA請(qǐng)求模式被DCON寄存器選擇(注意如果S/W請(qǐng)求模式被選擇,這個(gè)DMA請(qǐng)求資源無任何意義)。表8-1展示了4個(gè)DMA資源于各個(gè)通道。
DMA操作
空閑時(shí):DMA_ACK=0;INT_REQ=0;
單服務(wù):知道CURR_TC計(jì)數(shù)變?yōu)?;
全服務(wù):完成一次原子操作;
完成后:DMA_ACK=1;INT_REQ=1;
傳輸大小
單元(unit)和突發(fā)(Burst)
iis.h
/*******************************************************************
*Copyright(C),2011-2012,XXX.
*FileName:iis.h
*Author:HuangYinqing
*Version:1.0
*Date::2012-08-12
*Description:iis音頻驅(qū)動(dòng).
*FunctionList:
*History:
******************************************************************/
/*IIS調(diào)試等級(jí)*/
#defineDBG_IIS_LEVEL1
/*采樣頻率選擇*/
#defineFRQ_SELECT4
/*使用DMA傳輸數(shù)據(jù)*/
//#defineIIS_USE_DMA
/*引腳定義*/
#defineL3C(1<<4)//GPB4=L3CLOCK
#defineL3D(1<<3)//GPB3=L3DATA
#defineL3M(1<<2)//GPB2=L3MODE
#defineMIN_VOLUME0x01
#defineMID_VOLUME0x20
#defineMAX_VOLUME0x3e//==音量最大值
/*緩沖區(qū)產(chǎn)度*/
#defineSOUND_DATA_LEN243552
/*函數(shù)原型*/
/***************************************************************
**函數(shù)名稱:voidSoundRecord(unsignedchar*pucRecBuf,unsignedlongulSize)
**函數(shù)功能:錄音
**入口參數(shù):pucPlayBuf:放音緩沖區(qū);ulSize:緩沖區(qū)大小
**出口參數(shù):無
**返回:無
***************************************************************/
voidSoundRecord(unsignedchar*pucRecBuf,unsignedlongulSize);
/***************************************************************
**函數(shù)名稱:voidSoundPlay(unsignedchar*pucPlayBuf,unsignedlongulSize)
**函數(shù)功能:放音
**入口參數(shù):pucPlayBuf:放音緩沖區(qū);ulSize:緩沖區(qū)大小
**出口參數(shù):無
**返回值:無
*************