微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 硬件工程师文库 > 嵌入式系统中I2S总线数据通信的软件模拟

嵌入式系统中I2S总线数据通信的软件模拟

时间:04-25 来源:互联网 点击:

or(HorLCnt=0;HorLCnt《2;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;BitCnt《8;BitCnt++){//1次传送的数据长度为8位,先传送高字节再传送低字节置时钟线SCK为低,开始准备数据位

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

  if((c《《BitCnt)&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的时序精确性上存在一些欠缺。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top