Cortex-M3 (NXP LPC1788)之IIS控制器
圖1:I2S時(shí)序
從圖中可以看出每個(gè)串行時(shí)鐘SCK傳送一位音頻信號(hào),因此SCK的頻率=聲道數(shù)X采樣頻率X采樣位數(shù)。如程序中44.1KHZ采樣的16位立體音,對(duì)應(yīng)的SCK頻率為2X16X44100HZ。WS是字段選擇,也稱為幀時(shí)鐘,他的一個(gè)周期正好傳輸一幀數(shù)據(jù)。在WS改變后,數(shù)據(jù)字在發(fā)送時(shí)鐘的下一個(gè)下降沿上開始。即圖中MSB位在WS下降沿的下一個(gè)SCK時(shí)鐘出現(xiàn)。在立體聲模式下,當(dāng)WS為低電平時(shí)發(fā)送左聲道數(shù)據(jù),當(dāng)WS為高電平時(shí)發(fā)送右聲道數(shù)據(jù)。如果是單聲道模式,相同的數(shù)據(jù)會(huì)在WS的高低電平各發(fā)送一次。因此,要正確的通過(guò)I2S總線進(jìn)行音頻信號(hào)的傳送,關(guān)鍵要正確配置傳輸速率。對(duì)于LCP1778,我們通過(guò)配置數(shù)字音頻輸出寄存器I2SDAO配置音頻數(shù)據(jù)的寬度、聲道數(shù)、和WS的周期。程序中的音頻數(shù)據(jù)為44.1KHZ采樣的16位立體音,因此I2SDAO中的WS_halfperiod字段配置成16-1,因?yàn)閃S低電平和高電平各發(fā)送16位數(shù)據(jù)。配置SCK要設(shè)置2個(gè)寄存器,首先配置發(fā)送時(shí)鐘速率寄存器I2STXRATE,通過(guò)它配置分?jǐn)?shù)速率發(fā)生器以分頻CCLK得到I2S TX_REF=CCLKX(X/Y)/2;如果我們使能了MCLK輸出時(shí),RX_REF就發(fā)送到MCLK管腳。其次,配置位發(fā)送時(shí)鐘位速率寄存器I2STXBITRATE,該寄存器的值加1用來(lái)分頻TX_REF得到SCK頻率。
對(duì)I2S控制器配置完成后,我們可以將要發(fā)送的音頻數(shù)據(jù)寫入發(fā)送FIFO,F(xiàn)IFO的大小為8個(gè)字。而且發(fā)送和接收通道僅接收32位對(duì)齊的數(shù)據(jù),因此對(duì)較短的數(shù)據(jù)我們要進(jìn)行擴(kuò)展才能寫入FIFO進(jìn)行發(fā)送。
對(duì)于總線上的狀態(tài),將在狀態(tài)反饋寄存器I2SSTATE中進(jìn)行指示,主要有中斷和DMA請(qǐng)求的指示以及FIFO的當(dāng)前深度指示。對(duì)于中斷我們可以配置中斷請(qǐng)求控制寄存器I2SIRQ設(shè)置FIFO觸發(fā)中斷的深度。
評(píng)論