新聞中心

        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 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 新晃| 桦南县| 星座| 通州区| 长葛市| 东至县| 周至县| 黑水县| 香港 | 渑池县| 信阳市| 浪卡子县| 敖汉旗| 文水县| 桐庐县| 竹山县| 江陵县| 利辛县| 泸溪县| 开封县| 五华县| 自治县| 密云县| 嘉义县| 垫江县| 洪湖市| 通化县| 吴忠市| 张家界市| 丰城市| 襄汾县| 兴义市| 潞城市| 宝鸡市| 武川县| 炎陵县| 小金县| 宜兰县| 平阳县| 浏阳市| 汨罗市|