• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 設計應用 > 嵌入式系統中I2S總線數據通信的軟件模擬

    嵌入式系統中I2S總線數據通信的軟件模擬

    作者: 時間:2010-09-29 來源:網絡 收藏

      根據MS6336的格式以及數據發送流程,的步驟如下:

      ① 根據語音數據采樣率及采樣位數計算得到SCK的值和WS的值(WS的值等于采樣頻率)。

      采樣率為44.1 kHz,則SCK=2×44.1 kHz×103×16=1 411 200 Hz,WS=44 100 Hz。1個SCK時鐘周期T=1/SCK=07 μs。采用延時程序SCK時鐘周期需要應用示波器來精確延時時間。本中一個SCK周期的延時為delay(2)。

      ② 將WS、BCK和DATA均置為高電平。

      ③ 選擇左右聲道。首先發送左聲道數據,將WS置低(若發送右聲道數據則將WS置高)。

      for(ChannelCnt=0;ChannelCnt2;ChannelCnt++){//雙聲道選擇播放

      if(ChannelCnt==0){//左聲道選擇信號為低電平

      HWREG(GPIO_PORTA_BASE + (GPIO_O_DATA + (I2S_WS 2))) = ~I2S_WS;

      }

      else{//右聲道選擇信號為高電平

      HWREG(GPIO_PORTA_BASE + (GPIO_O_DATA + (I2S_WS 2))) = I2S_WS;

      }

      ……

      }

      ④ 選擇高低字節。將左聲道數據以高低字節的順序發送,在發送高字節第1位數據之前先發送1個周期的串行時鐘。

      for(HorLCnt=0;HorLCnt2;HorLCnt++){//聲道數據高低字節選擇

      if(ChannelCnt==0){//左聲道

      if(HorLCnt==0){//高字節

      c=*(SampleData+1);//SampleData指向音頻數據緩沖區首地址,即左聲道低字節

      delayI2S(2);//發送第一個數據位之前需要延遲一個位時鐘周期

      }

      else{//低字節

      c=*SampleData;

      }

      }

      ……

      }

      ⑤ 開始傳輸音頻數據(音頻數據的傳輸在SCK下降沿準備數據,在SCK的上升沿發

      送給數據接收端)。將采樣點左聲道數據的高字節最高位送給SD,設置SCK為低電平,此時為SCK的下降沿,數據準備好。延時半個SCK周期以后將SCK置為高電平,此時SD線上的數據發送給數據接收端,延時半個SCK周期。依次將左聲道剩余位數據按照最高位的方式發送出去。

      for(BitCnt=0;BitCnt8;BitCnt++){//1次傳送的數據長度為8位,先傳送高字節再傳送低字節置時鐘線SCK為低,開始準備數據位

      HWREG(GPIO_PORTA_BASE + (GPIO_O_DATA + (I2S_BCK 2))) = ~I2S_BCK;

      if((cBitCnt)0x80) {

      HWREG(GPIO_PORTA_BASE + (GPIO_O_DATA + (I2S_DATA 2))) = I2S_DATA;

      }

      else{

      HWREG(GPIO_PORTA_BASE + (GPIO_O_DATA + (I2S_DATA 2))) = ~I2S_DATA;

      }

      delayI2S(1); //延時半個SCK時鐘周期置時鐘線為高,開始傳輸數據位

      HWREG(GPIO_PORTA_BASE + (GPIO_O_DATA + (I2S_BCK 2))) = I2S_BCK;

      delayI2S(1);//延時半個時鐘周期

      }

      ⑥ 當將1個采樣點的左聲道的數據發送完以后,延時2個SCK周期,然后發送右聲道的數據(同左聲道數據的發送過程)。

      根據以上的過程對每個采樣點的數據進行處理,就可以實現通過I2S傳輸音頻數據了。以上實現的是典型I2S時序模擬,而左對齊和右對齊2種格式只是時序稍有差異,模擬實現過程同典型I2S總線模擬實現過程基本相同。

      結語

      在以太網數字語音廣播中應用模擬實現I2S總線時序,能夠成功地實現語音信號的數據傳輸,實現語音信號的實時廣播,表明了軟件模擬實現I2S總線的可行性,為解決不支持I2S總線的MCU和各種I2S總線設備間的通信提供了一種可行的方法。但是,在應用軟件模擬實現I2S的以太網數字語音廣播系統實時播放語音信號時,存在一些噪聲,表明在采用軟件模擬實現I2S的時序精確性上存在一些欠缺。


    linux操作系統文章專題:linux操作系統詳解(linux不再難懂)

    上一頁 1 2 3 下一頁

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 黄龙县| 清河县| 雅安市| 太仓市| 密云县| 济源市| 曲沃县| 南丰县| 岚皋县| 南和县| 凉城县| 台南市| 龙江县| 瓦房店市| 蛟河市| 敖汉旗| 惠水县| 贵港市| 榆社县| 富民县| 舟山市| 长白| 常州市| 雅安市| 保山市| 大方县| 永兴县| 瑞安市| 馆陶县| 曲靖市| 炉霍县| 雷州市| 上虞市| 三河市| 黄平县| 延庆县| 望奎县| 光泽县| 丰城市| 乐业县| 永胜县|