<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 嵌入式系統中I2S總線(xiàn)數據通信的軟件模擬

嵌入式系統中I2S總線(xiàn)數據通信的軟件模擬

作者: 時(shí)間:2010-09-29 來(lái)源:網(wǎng)絡(luò ) 收藏

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

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

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

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

 ?、?選擇左右聲道。首先發(fā)送左聲道數據,將WS置低(若發(fā)送右聲道數據則將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;

  }

  ……

  }

 ?、?選擇高低字節。將左聲道數據以高低字節的順序發(fā)送,在發(fā)送高字節第1位數據之前先發(fā)送1個(gè)周期的串行時(shí)鐘。

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

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

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

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

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

  }

  else{//低字節

  c=*SampleData;

  }

  }

  ……

  }

 ?、?開(kāi)始傳輸音頻數據(音頻數據的傳輸在SCK下降沿準備數據,在SCK的上升沿發(fā)

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

  for(BitCnt=0;BitCnt8;BitCnt++){//1次傳送的數據長(cháng)度為8位,先傳送高字節再傳送低字節置時(shí)鐘線(xiàn)SCK為低,開(kāi)始準備數據位

  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); //延時(shí)半個(gè)SCK時(shí)鐘周期置時(shí)鐘線(xiàn)為高,開(kāi)始傳輸數據位

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

  delayI2S(1);//延時(shí)半個(gè)時(shí)鐘周期

  }

 ?、?當將1個(gè)采樣點(diǎn)的左聲道的數據發(fā)送完以后,延時(shí)2個(gè)SCK周期,然后發(fā)送右聲道的數據(同左聲道數據的發(fā)送過(guò)程)。

  根據以上的過(guò)程對每個(gè)采樣點(diǎn)的數據進(jìn)行處理,就可以實(shí)現通過(guò)I2S傳輸音頻數據了。以上實(shí)現的是典型I2S時(shí)序模擬,而左對齊和右對齊2種格式只是時(shí)序稍有差異,模擬實(shí)現過(guò)程同典型I2S總線(xiàn)模擬實(shí)現過(guò)程基本相同。

  結語(yǔ)

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


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

上一頁(yè) 1 2 3 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>