<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > Cortex-M3 (NXP LPC1788)之IIS控制器

          Cortex-M3 (NXP LPC1788)之IIS控制器

          作者: 時間:2016-11-19 來源:網(wǎng)絡 收藏
          I2S總線為數(shù)字音頻應用提供了一個標準的通信接口。它是一條3線串行總線,包含串行數(shù)據(jù)SD、字選擇WS、串行時鐘SCK。LPC1788的I2S接口提供了彼此獨立的發(fā)送和接收通道,每個通道可以作為主機或從機,還提供了可選的過采樣主機時鐘輸出MCLK。因此發(fā)送和接收通道各有四個引腳,對于發(fā)送為I2S_TX_CLK、I2S_TX_WS、I2S_TX_SDA、I2S_TX_MCLK。I2S的時序如圖1。

          本文引用地址:http://www.ex-cimer.com/article/201611/318457.htm

          圖1:I2S時序

          從圖中可以看出每個串行時鐘SCK傳送一位音頻信號,因此SCK的頻率=聲道數(shù)X采樣頻率X采樣位數(shù)。如程序中44.1KHZ采樣的16位立體音,對應的SCK頻率為2X16X44100HZ。WS是字段選擇,也稱為幀時鐘,他的一個周期正好傳輸一幀數(shù)據(jù)。在WS改變后,數(shù)據(jù)字在發(fā)送時鐘的下一個下降沿上開始。即圖中MSB位在WS下降沿的下一個SCK時鐘出現(xiàn)。在立體聲模式下,當WS為低電平時發(fā)送左聲道數(shù)據(jù),當WS為高電平時發(fā)送右聲道數(shù)據(jù)。如果是單聲道模式,相同的數(shù)據(jù)會在WS的高低電平各發(fā)送一次。因此,要正確的通過I2S總線進行音頻信號的傳送,關鍵要正確配置傳輸速率。對于LCP1778,我們通過配置數(shù)字音頻輸出寄存器I2SDAO配置音頻數(shù)據(jù)的寬度、聲道數(shù)、和WS的周期。程序中的音頻數(shù)據(jù)為44.1KHZ采樣的16位立體音,因此I2SDAO中的WS_halfperiod字段配置成16-1,因為WS低電平和高電平各發(fā)送16位數(shù)據(jù)。配置SCK要設置2個寄存器,首先配置發(fā)送時鐘速率寄存器I2STXRATE,通過它配置分數(shù)速率發(fā)生器以分頻CCLK得到I2S TX_REF=CCLKX(X/Y)/2;如果我們使能了MCLK輸出時,RX_REF就發(fā)送到MCLK管腳。其次,配置位發(fā)送時鐘位速率寄存器I2STXBITRATE,該寄存器的值加1用來分頻TX_REF得到SCK頻率。

          對I2S控制器配置完成后,我們可以將要發(fā)送的音頻數(shù)據(jù)寫入發(fā)送FIFO,F(xiàn)IFO的大小為8個字。而且發(fā)送和接收通道僅接收32位對齊的數(shù)據(jù),因此對較短的數(shù)據(jù)我們要進行擴展才能寫入FIFO進行發(fā)送。

          對于總線上的狀態(tài),將在狀態(tài)反饋寄存器I2SSTATE中進行指示,主要有中斷和DMA請求的指示以及FIFO的當前深度指示。對于中斷我們可以配置中斷請求控制寄存器I2SIRQ設置FIFO觸發(fā)中斷的深度。



          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();