嵌入式系统中I2S总线数据通信的软件模拟
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的时序精确性上存在一些欠缺。
- 嵌入式系统在电源设计中的运用(09-20)
- 一种小型智能化UPS系统的嵌入式设计方案(09-16)
- 基于无线传感器网络的嵌入式远程测控系统研究(10-17)
- 嵌入式工业以太网控制器的设计和应用(10-17)
- 基于4G通信的嵌入式数据通信系统设计(10-10)
- 嵌入式CPU卡在医用便携式监护仪中的应用及设计(09-23)